______ ______ ___ ____ / ____ / ___ / ____ / __ ____ / | / _// // __/ __ // __/ _ / __ // | | / / / / / _ / / / _ / / / _ / / __ / / / / ___ | _ / / A Rich Terminal Interface Chat ____/ ____/ ____/ ___/_//_/_/| _/___/escrito em go. Construa sistemas simples, seguros e escaláveis com GO. Direitos autorais (© iqu) 2024 @h0Llyw00dzz Todos os direitos reservados.
Nota: Este repositório é um trabalho em andamento (WIP).
Tempo estimado de chegada (ETA): desconhecido . Este projeto é desenvolvido pessoalmente durante o meu tempo livre e não está associado a nenhum empreendimento de empresa ou empresa.
Interessante construí -lo no terminal após a viagem de turnê pela linguagem de programação Go, além de explorar os recursos de AI do Google (atualmente em beta com Gemini).
Observação
Este repositório foi projetado especificamente para aderir aos princípios idiomáticos do GO. ?
O desenvolvimento do GO promove a escalabilidade. Seu design centrado no desempenho suporta processamento simultâneo e gerenciamento de recursos eficientes, tornando-o uma excelente opção para aplicativos que precisam escalar perfeitamente com a crescente demanda.
O gerenciamento de memória de Go e a digitação estática reduzem significativamente a ocorrência de erros críticos, como vazamentos de memória, que são predominantes em idiomas interpretados. Essa estabilidade é crucial para aplicações de terminais de longa duração que interagem com os serviços de IA.
Observação
Memory leaks são uma preocupação crítica, principalmente no desenvolvimento da IA. A abordagem do Go para o gerenciamento de memória o diferencia, pois atenua esses problemas com mais eficiência do que alguns outros idiomas. Isso contrasta fortemente com vários repositórios em outros idiomas, onde os vazamentos de memória são um problema frequente e muitas vezes confuso (que eu não entendo quando parece outro repositório no github ).
GitHub que eu não entendo. Curiosidade : você sabia? Se o seu código Go se assemelhar a uma selva de declarações if (pense em mais de 10 camadas aninhadas-um grande não-não!), É menos e mais Go Stop-and-ask-for-directions . Achate esses condicionais e deixe seu código funcionar tão suavemente quanto um gopher untado em um deslizamento deslizante! ?
Observação
Esse recurso especializado Realistic Typing Animation é econômico em termos de consumo de recursos (por exemplo, memory,cpu ), em contraste com front-end languages ou other languages que tendem a ser mais intensivos em recursos.
:quit , por exemplo, permite que os usuários terminem sua sessão de maneira ordenada. Quando este comando é executado, ele solicita uma sequência de desligamento cooperativa com a IA, que gera uma mensagem de adeus apropriada. Esse design atencioso aprimora a experiência do usuário, fornecendo um fechamento de conversação natural e educado, garantindo que a terminação da sessão seja tão envolvente quanto a própria conversa.DebugOrErrorLogger O Pacote DebugOrErrorLogger oferece um sistema de registro simplificado e eficiente, projetado especificamente para aplicativos GO que requerem recursos robustos de erro e depuração com sobrecarga mínima.DebugOrErrorLogger Os principais recursos ? Logging de depuração condicional : o madeireiro permite que as mensagens de depuração sejam condicionalmente emitidas com base na variável de ambiente DEBUG_MODE . Quando definido como true , as informações detalhadas da depuração serão impressas no os.Stderr , ajudando no processo de desenvolvimento e solução de problemas.
? Saída de erro com código de cores : os erros são coloridos claramente em vermelho quando registrados, fazendo-os se destacar no terminal para obter atenção imediata. Essa colorização ajuda a identificar rapidamente erros em meio a outras saídas de log.
? ? Recuperação de pânico : uma função de recuperação é fornecida para manipular e registrar graciosamente qualquer pânico que possa ocorrer durante o tempo de execução. Essa função garante que uma mensagem de pânico seja claramente registrada com saída colorida, impedindo que o aplicativo colidisse inesperadamente e ajudando no diagnóstico rápido.
⚡ API simples : o pacote expõe uma API simples e intuitiva, com métodos para depuração e log de erros que aceitam seqüências de formatos e argumentos variados, semelhantes às funções Printf e Println padrão.
? Configuração da variável de ambiente : o modo de depuração pode ser ativado ou desativado facilmente através de uma variável de ambiente, permitindo configuração flexível sem a necessidade de recompilar o aplicativo.
Observação
Os Current Features listados acima podem estar desatualizados. Para as atualizações mais recentes, leia a documentação here .
Observação
O termo Streamlined Codebase refere-se a um padrão comum de alto nível na programação Go . Esse padrão enfatiza uma estrutura limpa e bem organizada, que facilita a compreensão e a manutenção do código. Normalmente, envolve separar preocupações, modularizar componentes e seguir práticas idiomáticas para criar uma base de código eficiente e fácil de trabalhar.
Observação
Esse recurso especializado, melhor que o código se assemelha a uma selva if if if if as instruções se forem integradas com sucesso.
Ao adotar esse sistema de manuseio de comandos escaláveis, o aplicativo de bate-papo está bem posicionado para evoluir juntamente com os avanços nas expectativas da IA e do usuário, garantindo uma experiência de usuário robusta e à prova de futuro.
Observação
O planejamento do assunto para melhorar e adicionar recursos continuamente, aprimorando a funcionalidade sem adicionar complexidade desnecessária. Fique atento para atualizações!
Go foi projetado para ser direto e eficiente, evitando as complexidades desnecessárias (complexidades, go é anti -complexidades) frequentemente encontradas em outras linguagens de programação.
Utilização otimizada de recursos : o bate -papo do terminal GoGenai é projetado para maximizar o desempenho e minimizar o uso de recursos. Ao alavancar o modelo de compilação e execução eficiente da GO, o aplicativo garante tempos rápidos de resposta e baixa sobrecarga, tornando -o ideal para sistemas em que a conservação de recursos é fundamental.
Gerenciamento eficiente de concorrência : graças às goroutinas leves de Go e primitivas eficazes de sincronização, o Gogenai Terminal Chat lida com operações simultâneas com facilidade. O aplicativo pode servir a vários usuários simultaneamente sem aumentos significativos no uso de latência ou memória, garantindo desempenho consistente mesmo sob carga.
Esse repositório contém código GO de alta qualidade, que se concentra particularmente na Retry Policy Logic , Chat System Logic e Other . Cada função é projetada para simplicity , evitando deliberadamente stupid complexity desnecessária, mesmo em cenários que possam exceder uma pontuação stupid complexity de 10+ .
Para usar o Gogenai Terminal Interface Chat, você precisa instalar o Docker em sua máquina. Se você não tiver instalado o Docker, siga o guia de instalação oficial do Docker.
Depois que o Docker estiver configurado, você pode puxar a imagem dos pacotes do GitHub em execução:
docker pull ghcr.io/h0llyw00dzz/gogenai-terminal-chat:latestDica
Para a programação Master ou Advanced da Go Programming , especialmente aqueles em cloud engineering , este GoGenAI Terminal Interface Chat pode ser executado em um Cloud Shell ( for example, Google Cloud Shell ) sem usar o Docker.
Para iniciar uma sessão de bate -papo com GoGenai, execute o seguinte comando em seu terminal. Certifique -se de substituir YOUR_API_KEY pela chave da API real fornecida a você.
Aviso
Devido a esse problema here para iniciar uma sessão de bate -papo com GoGenAI , use um terminal melhor que possa lidar com uma constant neste repositório ou construir seu próprio sistema operacional com melhor kernel que pode lidar com constant neste repositório
docker run -it --rm --name mychatapp -e API_KEY=YOUR_API_KEY ghcr.io/h0llyw00dzz/gogenai-terminal-chat:latestEste comando iniciará o aplicativo de bate -papo do terminal GoGenai no modo interativo. Você poderá digitar suas mensagens e receber respostas da IA.
As variáveis de ambiente são pares de valor-chave que podem afetar o comportamento do seu aplicativo. Abaixo está uma tabela de variáveis de ambiente usadas no aplicativo Gogenai-Terminal-Chat, juntamente com suas descrições e se são necessárias.
| Variável | Descrição | Obrigatório |
|---|---|---|
API_KEY | Sua chave da API para acessar o modelo generativo de IA. Obtenha uma chave de API gratuita aqui. | Sim |
DEBUG_MODE | Defina como true para ativar DEBUG_MODE ou false para desativá -lo. | Não |
SHOW_PROMPT_FEEDBACK | Defina como true para exibir feedback imediato no rodapé da resposta ou false para ocultá -lo. | Não |
SHOW_TOKEN_COUNT | Defina como true para exibir a contagem de token usada no histórico de resposta e bate -papo da IA, ou false para escondê -lo. | Não |
Observação
As métricas Average Consumption são calculadas sem incluir o uso de um sistema de armazenamento como um banco de dados e baseiam -se na suposição de que cada função é relativamente simples, com uma complexidade ciclomática média de 5 como o máximo. No entanto, o consumo pode aumentar com funções mais complexas (por exemplo, aquelas com uma complexidade ciclomática de 10 ou mais, que não são recomendadas).
Observação
As métricas Average Maximum Consumption são baseadas na simulação do comportamento de digitação human . Isso envolve renderizar o caráter de respostas de bate -papo por personagem para imitar o ritmo e o ritmo da digitação human .
Aviso
Essas screenshots podem estar desatualizadas devido a alterações na versão.
Observação
Esse ? Simple Debugging é simples, diferentemente de uma merda, um complexo go codes que aumentam a cyclomatic complexity
? Você: Olá, você é?
? AI :: Eu sou um modelo de idioma grande, treinado pelo Google.
? Você: Eu tenho perguntas sobre K8s, como ativar o log de auditoria em Kubernetes e o que devo procurar ao analisar os logs?
? AI: Para ativar o log de auditoria em Kubernetes, você pode usar as seguintes etapas:
/etc/kubernetes/manifests/kube-apiserver.yaml .audit-policy : enabled: true
Opcionalmente, você pode definir as seguintes configurações:
policyFile : o caminho para um arquivo que contém as regras da política de auditoria.logPath : o caminho para o arquivo em que os logs de auditoria serão armazenados.logFormat : o formato dos logs de auditoria.maxBatchSize : o número máximo de eventos de auditoria a serem incluídos em um único lote.maxBatchWait : a quantidade máxima de tempo para aguardar um lote de eventos de auditoria ser preenchido antes de escrevê -los no disco.Salve e reinicie o servidor API Kubernetes.
Depois que o log de auditoria estiver ativado, você pode analisar os logs para obter informações sobre a atividade no seu cluster Kubernetes. Algumas coisas que você pode querer procurar incluem:
Ao analisar os logs de auditoria, você pode identificar riscos de segurança, solucionar problemas e obter uma melhor compreensão de como seu cluster Kubernetes está sendo usado.
Aqui estão alguns recursos adicionais que você pode achar úteis:
$ go run cmd/main.go? AI: Olá! Como posso ajudá -lo hoje?
? Você: tenho dúvidas sobre "Livere por simplicidade em cada função (visa uma complexidade ciclomática abaixo de 5 para demonstrar conhecimento); simplicidade é um sinal de domínio da programação GO". ?
? AI: Sim, a afirmação "lute por simplicidade em cada função (visa uma complexidade ciclomática abaixo de 5 para demonstrar conhecimento); simplicidade é um sinal de domínio da programação GO" é geralmente correto.
A complexidade ciclomática é uma medida da complexidade de uma função. É calculado contando o número de caminhos independentes através da função. Uma alta complexidade ciclomática indica que a função é difícil de entender e manter.
A simplicidade é um princípio fundamental da programação GO. O código GO é normalmente conciso e fácil de ler. Isso facilita a compreensão e a manutenção.
O objetivo de uma complexidade ciclomática abaixo de 5 é uma boa maneira de garantir que suas funções sejam simples e fáceis de entender. Isso ajudará você a escrever um código melhor e evitar a introdução de bugs.
Obviamente, há momentos em que é necessário escrever funções mais complexas. No entanto, você deve sempre se esforçar por simplicidade sempre que possível.
Aqui estão algumas dicas para escrever funções simples:
Seguindo essas dicas, você pode escrever funções simples e fáceis de entender que tornarão seu código mais sustentável e livre de bugs.
? Você: tudo bem thx para obter informações
? AI: De nada! Estou feliz por poder ser útil. Se você tiver mais alguma dúvida, fique à vontade para perguntar.
? Você :: Pare
? AI: Foi um prazer ajudá -lo hoje. Lembre -se, estou sempre aqui se você tiver mais alguma dúvida. Tome cuidado e tenha um dia maravilhoso!
O aplicativo de bate-papo do terminal GoGenai fornece uma interface de linha de comando para os usuários interagirem com um modelo de IA generativo. O aplicativo lida com entradas do usuário, processos comandos, se comunica com a IA e mantém um histórico de bate -papo. Ele foi projetado para ser extensível e escalável para acomodar crescimento futuro e recursos adicionais.
A arquitetura simples foi projetada para casos de uso direto e fornece a funcionalidade básica necessária para um aplicativo de bate-papo baseado em terminal.
Fluxograma LR
START ([START]) -> | O usuário executa o aplicativo | Init [Inicializar sessão]
Init -> | Configure manuseio de sinal | SignalHandler [Handle OS Sinais]
Init -> | Carregar a chave da API | ApikeyValidation {API Key Validation}
ApikeyValidation -> | válido | SetupClient [Configuração do cliente AI]
ApikeyValidation -> | inválido | Fim ([fim])
SetupClient -> | Cliente pronto | MAINLOOP [Digite Main Loop]
MAINLOOP -> UserInput [/input/]
UserInput -> | Comando | Commandler [Handle Command]
UserInput -> | Mensagem de bate -papo | SendMessage [Enviar mensagem para ai]
CommandHandler -> | Quit | Fim
CommandHandler -> | Outros comandos | ProcessCommand [Comando do Process]
SendMessage -> | Receba resposta AI | UpdateHistory [Atualizar histórico de bate -papo]
UpdateHistory -> DisplayResponse [Exibir resposta AI]
ProcessCommand -> Mainloop
DisplayResponse -> Mainloop
SignalHandler -> | SIGINT/SIGTERM | Limpeza [Recursos de Limpeza]
Limpeza -> Fim
A arquitetura escalável foi projetada para lidar com o crescimento, permitindo a adição de novos comandos, o manuseio de erros aprimorado e interações mais complexas com APIs externas.
Fluxograma LR
START ([START]) -> | O usuário executa o aplicativo | Init [Inicializar sessão]
Init -> | Configure manuseio de sinal | SignalHandler [Handle OS Sinais]
Init -> | Carregar a chave da API | ApikeyValidation {API Key Validation}
ApikeyValidation -> | válido | SetupClient [Configuração do cliente AI]
ApikeyValidation -> | inválido | Fim ([fim])
SetupClient -> | Cliente pronto | MAINLOOP [Digite Main Loop]
MAINLOOP -> UserInput [/input/]
UserInput -> | Comando | Commandregistry [Comando Registry]
UserInput -> | Mensagem de bate -papo | SendMessage [Enviar mensagem para ai]
CommandReGistry -> | Quit | Fim
CommandRegistry -> | Outros comandos | ProcessCommand [Comando do Process]
CommandRegistry -> | contagem de token | TokenCountingProcess [processo de contagem de token]
CommandRegistry -> | Verifique o modelo | CheckModelProcess [CheckModelProcess]
SendMessage -> | Receba resposta AI | UpdateHistory [Atualizar histórico de bate -papo]
TokenCountingProcess -> | Receba AI Resposta | DisplayResponse [Exibir resposta AI]
CheckModelProcess -> | Receba resposta AI | DisplayResponse [Exibir resposta AI]
UpdateHistory -> DisplayResponse [Exibir resposta AI]
ProcessCommand -> Mainloop
DisplayResponse -> Mainloop
SignalHandler -> | SIGINT/SIGTERM | Limpeza [Recursos de Limpeza]
Limpeza -> Fim
ProcessCommand -> | Interação da API | Apiclient [cliente da API]
Apiclient -> | Resposta da API | ProcessCommand
Apiclient -> | Erro da API | ErrorHandler [manipulador de erros]
ErrorHandler -> | Handle Error | ProcessCommand
ErrorHandler -> | Erro fatal | Fim
TokenCountingProcess -> | Processamento simultâneo | Concorrente [Processador Concorrente]
Concorrente do Concorrente -> | Resultados agregados | TokenCountingProcess
Concorrente de Concorrente -> | Erro | ErrorHandler [manipulador de erros]
ClassDef Scalable Prehi.
Classe CommandRegistry, apiclient, ConcurrentProcessor escalável;
Observação
No diagrama acima, os componentes com uma cor de preenchimento green ( #4c9f70 ) são projetados para serem escaláveis, indicando que eles podem lidar com o crescimento e aumentar a carga de maneira eficaz. Esses componentes incluem o Command Registry , API Client e Concurrent Processor .
Observação
A Scalable System's Architecture mostra um manuseio eficiente de complexidade através da simplicidade. Nesta aplicação GO, cada função é projetada para manter uma cyclomatic complexity of 5 ou less .
Consulte nossas Contribution Guidelines para obter informações detalhadas sobre como você pode contribuir para este projeto.
Observação
Esta é uma lista de tarefas para melhorar, corrigir e aprimorar os recursos deste projeto. As tarefas são adicionadas a este arquivo readme.md para garantir que não sejam esquecidas durante o processo de desenvolvimento.
Observação
O Reporting System foi projetado para capturar e lidar com eventos de pânico no tempo de execução no aplicativo GO, facilitando relatórios e análises de erro simplificado.
Observação
O recurso Create a Convert Result Table feature foi projetado para reformar a produção da IA em uma estrutura tabular.
Observação
O recurso Enable Additional Responses foi projetado para permitir respostas adicionais da IA, como feedback imediato. Para ativar esse recurso, use a Environment Variable Configuration .
Implementar quaisquer recursos não implementados
Importando goroutinas adicionais
Observação
Os recursos para Processing Multiple Image & Text Datasets for Token Counting estão protegidos contra race conditions e deadlocks . Além disso, eles efficiently lidar com multiple text data ou multiple image data .
Observação
O Pin Each Message for a Simpler Context Prompt foi projetado para fixar mensagens carregadas de arquivos como json/txt/md . Esse recurso funciona excepcionalmente bem com o resumo automatizado ou manual, em oposição ao escrito em um interpreted language hahaha.
Observação
O recurso Implement Gemini-Pro Vision Capabilities é estrategicamente integrado nas funcionalidades de comando, como comparação de imagens, análise de imagens e muito mais.
Observação
Este sistema está escrito em go , garantindo Scalability e Stability . ?
:help Observação
O recurso Automate Summarizing Conversations foi projetado para resumir automaticamente uma conversa de maneira semelhante ao ChatGptNextWeb. No entanto, ele é construído em uma interface de terminal, tornando -o mais acessível e acessível que OpenAI . Além disso, como essa interface do terminal está escrita em Go, ela permite a criação de sistemas simples, seguros e escaláveis.
eg, issues with executing a scalable command handler ) :aitranslate Observação
Os Improve :aitranslate commands visa aprimorar os recursos de tradução, incluindo a tradução de arquivos, marcação, documentos, CSVs e potencialmente mais. Como está escrito em Go, que possui uma poderosa biblioteca padrão?, Você pode, por exemplo, usar o comando :aitranslate :file data.csv .
:safety AIResponse armazenando a resposta original da IA na ChatHistory Observação
O aprimoramento, Improve AIResponse by Storing the Original AI Response in ChatHistory , envolve salvar a resposta original da IA em ChatHistory . Além disso, essa ação aciona automaticamente melhorias para o recurso Colorize .
ChatHistory , sincronizando automaticamente para uso multimodal ( gemini-pro-vision ) Observação
O aprimoramento, Leverage ChatHistory by automatically syncing for multi-modal use (gemini-pro-vision) , utiliza ChatHistory como uma solução de armazenamento de dados na memória altamente eficiente, diferentemente do escrito em C ou de outra linguagem que causa memory leaks . Isso garante sincronização perfeita e desempenho ideal em vários modos.
[Explícita] A retry policy é aplicada dinamicamente à goroutina principal, permitindo o manuseio independente de erro e tentativas de nova tentativa.
[Explictic] Melhorar o tratamento da mensagem Error para torná -lo mais dinâmico.
Error durante as operações Count Tokens , comunicando -se através de um canal.Ilustração de como funciona:
Sequenciadoiagram
Participante Main como Goroutina Principal
Participante G1 como Goroutine 1
Participante G2 como Goroutine 2
Participante G3 como Goroutine 3
participante CH como canal de erro
Colecionador de participantes como coletor de erros (conhecido como política de tentativa)
Principal->> CH: Crie canal com capacidade
Principal->> G1: Iniciar Goroutine 1
Principal->> G2: Start Goroutine 2
Principal->> G3: Start Goroutine 3
G1->> CH: Enviar erro (se houver)
G2->> CH: Enviar erro (se houver)
G3->> CH: Enviar erro (se houver)
Principal->> Coletor: comece a coletar erros
Loop coleta erros
CH->> Colecionador: Envie erros para o coletor
fim
Principal->> Principal: Feche o canal depois de todas as goroutinas completas
Colecionador->> Principal: Retorne o primeiro erro não-NIL
Melhore Colorize para aprimorar a escalabilidade e integrá -la com a biblioteca padrão regex para melhor desempenho.
Modelo de troca usando comandos
Observação
O recurso Plan for Google Cloud Deployment destina -se a oferecer suporte à compatibilidade em nuvem com os recursos da AI da VERTEX quando a versão v1.0.0 (este repositório) é alcançado e considerado estável lida aqui.
Por que? Este projeto é desenvolvido em conformidade com os Terms of Service e Privacy Policy para personal use . É importante observar que este projeto é desenvolvido de forma pessoal durante o meu tempo livre e não está associado a nenhum empreendimento de empresa ou empresa. Isso contrasta com muitas empresas que atendem principalmente às necessidades corporativas. Por exemplo, os recursos Vertex AI podem ser utilizados pessoalmente para tarefas como ajuste fino e uso de seus próprios dados, sem a complexidade e a sobrecarga normalmente associadas aos requisitos de nível corporativo.
Observação
O recurso Web Interface Support foi projetado para facilitar o suporte para WebAssembly (WASM), alavancando seu desenvolvimento no GO. Isso permite o gerenciamento de bate -papo e outras funcionalidades localmente, a partir da versão v1.0.0+ (provavelmente V2) deste repositório, uma vez atingido e considerado estável. Para práticas recomendadas, leia aqui.
Observação
O Calculate the Size of the Code Base Volume foi projetado para avaliar o tamanho de uma base de código. Por exemplo, ele pode calcular o volume dos projetos de código aberto do Google ou outros projetos de código aberto, que contêm bilhões de linhas de código escritas em Go .
Go Code em Mermaid Markdown Observação
O recurso, Convert Each Function in Go Code to Mermaid Markdown , foi projetado para avaliar uma base de código. É inspirado no Dead Code . Por exemplo, ele transformará cada função acessível em formato Mermaid Markdown .
Disponível here