______ ______ ___ ____ / ____ / ___ / ____ / __ ____ / | / _/ // __/ __ // __/ _ / __ // | | / / / / _ / / / / _ / / / _ / / __ / / / / ___ | _ / / / un chat de interfaz terminal rica ____/ ____/ ____/ ___/_//_/_/| _/___/Escrito en Go. Construya sistemas simples, seguros y escalables con GO. Copyright (© ️) 2024 @h0llyw00dzz Todos los derechos reservados.
Nota: Este repositorio es un trabajo en progreso (WIP).
Tiempo estimado de llegada (ETA): desconocido . Este proyecto se desarrolla de forma personal durante mi tiempo libre y no está asociado con ningún esfuerzo de empresa o empresa.
Interesante construirlo en la terminal después del viaje de gira a través del lenguaje de programación GO, además de explorar las capacidades de IA de Google (actualmente en beta con Gemini).
Nota
Este repositorio está específicamente diseñado para adherirse a los principios de GO idiomáticos. ?
El desarrollo en GO promueve la escalabilidad. Su diseño centrado en el rendimiento respalda el procesamiento concurrente y la gestión eficiente de los recursos, lo que lo convierte en una excelente opción para las aplicaciones que necesitan escalar sin problemas con la mayor demanda.
La gestión de la memoria de GO y la tipificación estática reducen significativamente la aparición de errores críticos, como las fugas de memoria, que prevalecen en los idiomas interpretados. Esta estabilidad es crucial para aplicaciones terminales de larga duración que interactúan con los servicios de IA.
Nota
Memory leaks son una preocupación crítica, particularmente en el desarrollo de la IA. El enfoque de GO para la gestión de la memoria lo distingue, ya que mitiga tales problemas de manera más efectiva que otros idiomas. Esto está en marcado contraste con numerosos repositorios en otros idiomas donde las filtraciones de memoria son un problema frecuente y a menudo confuso (que no entiendo cuando parezco otro repositorio en github ).
GitHub que no entiendo. Dato curioso : ¿Sabías? Si su código Go se asemeja a una jungla de declaraciones de if (piense en más de 10 capas anidadas, ¡un gran no-no!), Es menos Go y más Stop-and-ask-for-directions . ¡Aplane esos condicionales y deje que su código funcione tan bien como un gopher engrasado en un portaobjetos de deslizamiento! ?
Nota
Esta característica especializada Realistic Typing Animation es económica en términos de consumo de recursos (por ejemplo, memory,cpu ), en contraste con front-end languages u other languages que tienden a ser más intensivos en recursos.
:quit , por ejemplo, permite a los usuarios finalizar su sesión de manera ordenada. Cuando se ejecuta este comando, provoca una secuencia de cierre cooperativo con la IA, que genera un mensaje de despedida apropiado. Este diseño reflexivo mejora la experiencia del usuario al proporcionar un cierre conversacional que es natural y educado, asegurando que la terminación de la sesión sea tan atractiva como la conversación en sí.DebugOrErrorLogger El paquete DebugOrErrorLogger ofrece un sistema de registro simplificado y eficiente, diseñado específicamente para aplicaciones GO que requieren un error robusto y capacidades de registro de depuración con una sobrecarga mínima.DebugOrErrorLogger ? Registro de depuración condicional : el registrador permite que los mensajes de depuración se generen condicionalmente en función de la variable de entorno DEBUG_MODE . Cuando se establece en true , la información de depuración detallada se imprimirá en os.Stderr , ayudando en el proceso de desarrollo y solución de problemas.
? Salida de errores codificados por colores : los errores se colorean claramente en rojo cuando se registran, lo que los hace destacar en el terminal para su atención inmediata. Esta colorización ayuda a identificar rápidamente los errores en medio de otras salidas de registro.
? ? Recuperación de pánico : se proporciona una función de recuperación para manejar y registrar con gracia cualquier pánico que pueda ocurrir durante el tiempo de ejecución. Esta función asegura que un mensaje de pánico se registre claramente con la salida colorizada, evitando que la aplicación se bloquee inesperadamente y ayude en un diagnóstico rápido.
⚡ API simple : el paquete expone una API simple e intuitiva, con métodos para la depuración y registro de errores que acepten cadenas de formato y argumentos variádicos, similares a las funciones estándar Printf e Println .
? Configuración de la variable de entorno : el modo de depuración se puede activar fácilmente a través de una variable de entorno, lo que permite una configuración flexible sin la necesidad de recompilar la aplicación.
Nota
Las Current Features enumeradas anteriormente pueden estar desactualizadas. Para las actualizaciones de características más recientes, lea la documentación here .
Nota
El término Streamlined Codebase se refiere a un patrón común de alto nivel en la programación Go . Este patrón enfatiza una estructura limpia y bien organizada, que facilita la comprensión y el mantenimiento del código. Por lo general, implica separar preocupaciones, modularizar componentes y seguir prácticas idiomáticas para crear una base de código que sea eficiente y fácil de trabajar.
Nota
Esta característica especializada, mejor que el código se asemeja a una jungla de if if if if se han integrado correctamente.
Al adoptar este sistema de manejo de comandos escalable, la aplicación de chat está bien posicionada para evolucionar junto con los avances en la IA y las expectativas de los usuarios, asegurando una experiencia de usuario robusta y a prueba de futuro.
Nota
El sujeto planea mejorar y agregar características continuamente, mejorando la funcionalidad sin agregar complejidad innecesaria. ¡Estén atentos para las actualizaciones!
Go está diseñado para ser sencillo y eficiente, evitando las complejidades innecesarias (complejidades de mierda, go es anti -complejidades) a menudo se encuentra en otros lenguajes de programación.
Utilización optimizada de recursos : el chat terminal Gogenai está diseñado para maximizar el rendimiento y minimizar el uso de recursos. Al aprovechar el eficiente modelo de compilación y ejecución de GO, la aplicación garantiza tiempos de respuesta rápidos y bajos gastos generales, lo que lo hace ideal para sistemas donde la conservación de recursos es primordial.
Gestión eficiente de concurrencia : gracias a las goroutinas livianas de GO y primitivas de sincronización efectivas, Gogenai Terminal Chat maneja las operaciones concurrentes con facilidad. La aplicación puede servir a múltiples usuarios simultáneamente sin aumentos significativos en la latencia o el uso de la memoria, asegurando un rendimiento constante incluso bajo carga.
Este repositorio contiene código GO de alta calidad que se centra particularmente en Retry Policy Logic , Chat System Logic y Other . Cada función está diseñada para simplicity , evitando deliberadamente stupid complexity innecesaria, incluso en escenarios que podrían exceder un puntaje de stupid complexity de 10+ .
Para usar el chat de interfaz terminal Gogenai, debe tener instalado Docker en su máquina. Si no tiene instalado Docker, siga la guía de instalación oficial de Docker.
Una vez que Docker está configurado, puede extraer la imagen de los paquetes GitHub ejecutando:
docker pull ghcr.io/h0llyw00dzz/gogenai-terminal-chat:latestConsejo
Para la programación Master o Advanced de Go Programming , especialmente aquellos en cloud engineering , este GoGenAI Terminal Interface Chat se puede ejecutar en un Cloud Shell ( for example, Google Cloud Shell ) sin usar Docker.
Para comenzar una sesión de chat con Gogenai, ejecute el siguiente comando en su terminal. Asegúrese de reemplazar YOUR_API_KEY con la tecla API real proporcionada a usted.
Advertencia
Debido a este problema here para comenzar una sesión de chat con GoGenAI , use un terminal mejor que pueda manejar una constant en este repositorio o construir su propio sistema operativo con un mejor kernel que pueda manejar constant en este repositorio
docker run -it --rm --name mychatapp -e API_KEY=YOUR_API_KEY ghcr.io/h0llyw00dzz/gogenai-terminal-chat:latestEste comando iniciará la aplicación de chat terminal Gogenai en modo interactivo. Podrá escribir sus mensajes y recibir respuestas de la IA.
Las variables de entorno son pares de valor clave que pueden afectar el comportamiento de su aplicación. A continuación se muestra una tabla de variables de entorno utilizadas en la aplicación Gogenai-terminal-Chat, junto con sus descripciones y si son necesarias.
| Variable | Descripción | Requerido |
|---|---|---|
API_KEY | Su clave API para acceder al modelo AI generativo. Obtenga una llave API gratuita aquí. | Sí |
DEBUG_MODE | Establecer en true para habilitar DEBUG_MODE , o false para deshabilitarlo. | No |
SHOW_PROMPT_FEEDBACK | Establezca en true para mostrar la retroalimentación rápida en el pie de página de respuesta, o false para ocultarlo. | No |
SHOW_TOKEN_COUNT | Establecer en true para mostrar el recuento de tokens utilizado en la respuesta de la IA y el historial de chat, o false para ocultarlo. | No |
Nota
Las métricas Average Consumption se calculan sin incluir el uso de un sistema de almacenamiento como una base de datos y se basan en el supuesto de que cada función es relativamente simple, con una complejidad ciclomática promedio de 5 como máximo. Sin embargo, el consumo puede aumentar con funciones más complejas (por ejemplo, aquellos con una complejidad ciclomática de 10 o más, que no se recomiendan).
Nota
Las métricas Average Maximum Consumption se basan en la simulación del comportamiento de tipificación human . Esto implica hacer las respuestas de chat personaje por personaje para imitar el ritmo y el ritmo de la tipificación human .
Advertencia
Estas screenshots pueden estar desactualizadas debido a los cambios de versión.
Nota
Este ? Simple Debugging es simple, a diferencia de la mierda, un complejo go codes lógicos que aumentan de cyclomatic complexity
? Tu: hola eres tú?
? AI :: Soy un modelo de idioma grande, entrenado por Google.
? Usted: tengo preguntas sobre K8, ¿cómo habilito el registro de auditoría en Kubernetes y qué debo buscar al analizar los registros?
? AI: para habilitar el registro de auditorías en Kubernetes, puede usar los siguientes pasos:
/etc/kubernetes/manifests/kube-apiserver.yaml .audit-policy : enabled: true
Opcionalmente, puede configurar la siguiente configuración:
policyFile : la ruta a un archivo que contiene las reglas de la política de auditoría.logPath : la ruta al archivo donde se almacenarán los registros de auditoría.logFormat : el formato de los registros de auditoría.maxBatchSize : el número máximo de eventos de auditoría que se incluirán en un solo lote.maxBatchWait : La cantidad máxima de tiempo para esperar a que se llenen un lote de eventos de auditoría antes de escribirlos en el disco.Guarde y reinicie el servidor de la API Kubernetes.
Una vez que se habilita el registro de auditoría, puede analizar los registros para obtener información sobre la actividad en su clúster Kubernetes. Algunas cosas que puede buscar incluyen:
Al analizar los registros de auditoría, puede identificar los riesgos de seguridad, solucionar problemas y obtener una mejor comprensión de cómo se utiliza su clúster Kubernetes.
Aquí hay algunos recursos adicionales que puede encontrar útiles:
$ go run cmd/main.go? AI: ¡Hola! ¿Cómo puedo ayudarte hoy?
? Usted: tengo la pregunta que hace esto sobre "esforzarse por la simplicidad en cada función (apunte a una complejidad ciclomática menor de 5 para demostrar experiencia); la simplicidad es un signo de dominio de programación de GO". ?
? AI: Sí, la declaración "se esfuerza por la simplicidad en cada función (apunte a una complejidad ciclomática de menos de 5 para demostrar experiencia); la simplicidad es un signo de dominio de programación de GO" es generalmente correcta.
La complejidad ciclomática es una medida de la complejidad de una función. Se calcula contando el número de rutas independientes a través de la función. Una alta complejidad ciclomática indica que la función es difícil de entender y mantener.
La simplicidad es un principio clave de la programación GO. El código GO es típicamente conciso y fácil de leer. Esto hace que sea más fácil de entender y mantener.
Apuntar a una complejidad ciclomática menor de 5 es una buena manera de garantizar que sus funciones sean simples y fáciles de entender. Esto lo ayudará a escribir un mejor código y evitar la introducción de errores.
Por supuesto, hay momentos en los que es necesario escribir funciones que sean más complejas. Sin embargo, siempre debe esforzarse por la simplicidad siempre que sea posible.
Aquí hay algunos consejos para escribir funciones simples:
Siguiendo estos consejos, puede escribir funciones simples y fáciles de entender que hará que su código sea más mantenible y sin errores.
? Tú: bien gracias por información
? AI: ¡De nada! Me alegro de poder ser de ayuda. Si tiene más preguntas, no dude en preguntar.
? Tu :: deja
? AI: Ha sido un placer ayudarte hoy. Recuerde, siempre estoy aquí si tiene más preguntas. ¡Cuídate y que tengas un día maravilloso!
La aplicación Gogenai Terminal Chat proporciona una interfaz de línea de comandos para que los usuarios interactúen con un modelo de IA generativo. La aplicación maneja las entradas del usuario, procesa comandos, se comunica con la IA y mantiene un historial de chat. Está diseñado para ser extensible y escalable para acomodar el crecimiento futuro y las características adicionales.
La arquitectura simple está diseñada para casos de uso directos y proporciona la funcionalidad básica requerida para una aplicación de chat basada en terminal.
diagrama de flujo LR
Inicio ([inicio]) -> | El usuario ejecuta la aplicación | Init [Sesión de inicialización]
Init -> | Configurar manejo de señales | SignalHandler [Mango de señales OS]
Init -> | Llave de API de carga | Apikeyvalidation {validación de clave API}
Apikeyvalidation -> | válido | SetupClient [Configurar el cliente AI]
Apikeyvalidation -> | inválido | End ([final])
SetupClient -> | Cliente listo | Mainloop [Ingrese el bucle principal]
MainLoop -> UserInput [/input/]
UserInput -> | Comando | CommandHandler [comando de manejo]
UserInput -> | Mensaje de chat | SendMessage [Enviar mensaje a AI]
CommandHandler -> | Salir | Fin
CommandHandler -> | Otros comandos | ProcessCommand [Comando de proceso]
SendMessage -> | Reciba respuesta ai | UpdateHistory [Historial de chat de actualización]
UpdateHistory -> DisplayResponse [Respuesta de visualización AI]
ProcessCommand -> mainloop
DisplayResponse -> Mainloop
SignalHandler -> | Sigint/SigterM | Limpieza [recursos de limpieza]
Limpieza -> fin
La arquitectura escalable está diseñada para manejar el crecimiento, lo que permite la adición de nuevos comandos, un manejo de errores mejorado e interacciones más complejas con API externas.
diagrama de flujo LR
Inicio ([inicio]) -> | El usuario ejecuta la aplicación | Init [Sesión de inicialización]
Init -> | Configurar manejo de señales | SignalHandler [Mango de señales OS]
Init -> | Llave de API de carga | Apikeyvalidation {validación de clave API}
Apikeyvalidation -> | válido | SetupClient [Configurar el cliente AI]
Apikeyvalidation -> | inválido | End ([final])
SetupClient -> | Cliente listo | Mainloop [Ingrese el bucle principal]
MainLoop -> UserInput [/input/]
UserInput -> | Comando | CommandRegistry [Registro de comando]
UserInput -> | Mensaje de chat | SendMessage [Enviar mensaje a AI]
CommandRegistry -> | Salir | Fin
CommandRegistry -> | Otros comandos | ProcessCommand [Comando de proceso]
CommandRegistry -> | Conteo de tokens | TokencountingProcess [Proceso de conteo de tokens]
CommandRegistry -> | Verifique el modelo | CheckModelProcess [checkModelProcess]
SendMessage -> | Reciba respuesta ai | UpdateHistory [Historial de chat de actualización]
TokencountingProcess -> | recibir respuesta ai | DisplayResponse [Respuesta AI de pantalla]
CheckModelProcess -> | recibir respuesta ai | DisplayResponse [Respuesta AI de pantalla]
UpdateHistory -> DisplayResponse [Respuesta de visualización AI]
ProcessCommand -> mainloop
DisplayResponse -> Mainloop
SignalHandler -> | Sigint/SigterM | Limpieza [recursos de limpieza]
Limpieza -> fin
ProcessCommand -> | Interacción API | Apiclient [Cliente API]
Apiclient -> | Respuesta de API | Proceso de proceso
ApiClient -> | Error API | ErrorHandler [Handler de errores]
ErrorHandler -> | Error de manejo | Proceso de proceso
ErrorHandler -> | Error fatal | Fin
TokencountingProcess -> | Procesamiento concurrente | Procesador concurrente [procesador concurrente]
Concurrente procesador -> | Resultados agregados | Proceso de tokenceunting
Concurrentprocessor -> | Error | ErrorHandler [Handler de errores]
ClassDef Scalable Fill:#4C9F70, Stroke:#333, accidente cerebrovascular: 2px;
Class Commandregistry, apiclient, concurrente procesador escalable;
Nota
En el diagrama anterior, los componentes con un color de relleno green ( #4c9f70 ) están diseñados para ser escalables, lo que indica que pueden manejar el crecimiento y aumentar la carga de manera efectiva. Estos componentes incluyen el Command Registry , API Client y Concurrent Processor .
Nota
La Scalable System's Architecture muestra un manejo eficiente de la complejidad a través de la simplicidad. En esta aplicación GO, cada función está diseñada para mantener una cyclomatic complexity of 5 o less .
Consulte nuestras Contribution Guidelines para obtener información detallada sobre cómo puede contribuir a este proyecto.
Nota
Esta es una lista de tareas para mejorar, arreglar y mejorar las características de este proyecto. Las tareas se agregan a este archivo ReadMe.md para garantizar que no se olviden durante el proceso de desarrollo.
Nota
El Reporting System está diseñado para capturar y manejar eventos de pánico en tiempo de ejecución en la aplicación GO, facilitando el informe y el análisis de errores simplificados.
Nota
La función Create a Convert Result Table feature está diseñada para reformatear la salida de la IA en una estructura tabular.
Nota
La función Enable Additional Responses está diseñada para permitir respuestas adicionales de la IA, como la retroalimentación rápida. Para activar esta función, use la Environment Variable Configuration .
Implementar cualquier característica sin implementar
Generando goroutinas adicionales
Nota
Las características para Processing Multiple Image & Text Datasets for Token Counting están protegidas contra race conditions y deadlocks . Además, pueden manejar efficiently multiple text data o multiple image data .
Nota
El Pin Each Message for a Simpler Context Prompt está diseñada para fijar mensajes cargados desde archivos como json/txt/md . Esta característica funciona excepcionalmente bien con el resumen automatizado o manual, a diferencia de cuando se escribe en un interpreted language jajaja.
Nota
La característica Implement Gemini-Pro Vision Capabilities está estratégicamente integrada dentro de las funcionalidades del comando, como la comparación de imágenes, el análisis de imágenes y más.
Nota
Este sistema está escrito en go , asegurando Scalability y Stability . ?
:help Nota
La función Automate Summarizing Conversations está diseñada para resumir automáticamente una conversación de manera similar a ChatGptNextWeb. Sin embargo, está construido en una interfaz terminal, lo que lo hace más accesible y asequible que OpenAI . Además, dado que esta interfaz terminal está escrita en GO, permite la creación de sistemas simples, seguros y escalables.
eg, issues with executing a scalable command handler ) :aitranslate Nota
Los Improve :aitranslate commands tienen como objetivo mejorar las capacidades de traducción, incluida la traducción de archivos, markdown, documentos, CSV y potencialmente más. Como está escrito en GO, ¿que tiene una poderosa biblioteca estándar?, Por ejemplo, puede usar el comando :aitranslate :file data.csv .
:safety AIResponse almacenando la respuesta original de IA en ChatHistory Nota
La mejora, Improve AIResponse by Storing the Original AI Response in ChatHistory , implica guardar la respuesta original de la IA en ChatHistory . Además, esta acción desencadena automáticamente mejoras para la función Colorize .
ChatHistory sincronizando automáticamente para uso multimodal ( gemini-pro-vision ) Nota
La mejora, Leverage ChatHistory by automatically syncing for multi-modal use (gemini-pro-vision) , utiliza ChatHistory como una solución de almacenamiento de datos altamente eficiente en memoria, a diferencia de la escrita en C u otro idioma que causa memory leaks . Esto garantiza una sincronización perfecta y un rendimiento óptimo en varios modos.
[Explícito] La retry policy se aplica dinámicamente a la goroutina principal, lo que permite el manejo de errores independientes y los intentos de reintento.
[Explícito] Mejore el manejo del mensaje Error para que sea más dinámico.
Error durante las operaciones Count Tokens , comunicándose a través de un canal.Ilustración de cómo funciona:
secuencediagram
participante principal como goroutine principal
Participante G1 como Goroutine 1
Participante G2 como Goroutine 2
Participante G3 como Goroutine 3
CH de participante como canal de error
Recolector de participantes como recolector de errores (conocido como política de reintento)
Main->> CH: Crear canal con capacidad
Principal->> G1: Iniciar Goroutine 1
Main->> G2: Iniciar Goroutine 2
Main->> G3: Iniciar Goroutine 3
G1->> CH: Error de envío (si corresponde)
G2->> CH: Error de envío (si corresponde)
G3->> CH: Error de envío (si corresponde)
Main->> Collector: Comience a recopilar errores
Errores de recolección de bucle
CH->> COLECTOR: Enviar errores al coleccionista
fin
Main->> Principal: Cerrar canal después de todas las goroutinas completas
Collector->> Principal: return First No Nil Error
Mejore Colorize para mejorar la escalabilidad e integrarlo con la biblioteca estándar Regex para un mejor rendimiento.
Modelo de cambio usando comandos
Nota
El Plan for Google Cloud Deployment está destinada a admitir la compatibilidad en la nube con las capacidades de AI Vertex una vez que se alcanza la versión v1.0.0 (este repositorio) y se considera que se lee estable aquí.
¿Por qué? Este proyecto se desarrolla de conformidad con los Terms of Service y Privacy Policy para personal use . Es importante tener en cuenta que este proyecto se desarrolla de manera personal durante mi tiempo libre y no está asociado con ningún esfuerzo de empresa o empresa. Esto contrasta con muchas compañías que satisfacen principalmente las necesidades empresariales. Por ejemplo, las capacidades Vertex AI se pueden utilizar sobre una base personal para tareas como el ajuste y el uso de sus propios datos, sin la complejidad y la sobrecarga típicamente asociada con los requisitos de nivel empresarial.
Nota
La función Web Interface Support está diseñada para facilitar el soporte para WebAssembly (WASM), aprovechando su desarrollo en GO. Esto permite la gestión del chat y otras funcionalidades localmente, a partir de la versión v1.0.0+ (probablemente v2) de este repositorio, una vez que se alcanza y se considera estable. Para las mejores prácticas, lea aquí.
Nota
La Calculate the Size of the Code Base Volume está diseñada para evaluar el tamaño de una base de código. Por ejemplo, puede calcular el volumen de los proyectos de código abierto de Google u otros proyectos de código abierto, que contienen miles de millones de líneas de código escritas en Go .
Go Code a Mermaid Markdown Nota
La característica, Convert Each Function in Go Code to Mermaid Markdown , está diseñada para evaluar una base de código. Está inspirado en el Dead Code . Por ejemplo, transformará cada función accesible en formato de Mermaid Markdown .
Disponible here