KoPylot: Um Assistente de IA para Kubernetes

Há alguns meses, comecei a mergulhar mais a fundo nos Modelos de Linguagem de Grande Escala (LLMs), tentando entender até que ponto eles poderiam me ajudar e a outros desenvolvedores a melhorar nossa produtividade.

Para colocar esse conhecimento em prática, decidi iniciar um projeto de código aberto que combina duas coisas com as quais eu gosto de trabalhar: IA e Kubernetes. Dessa mistura, nasceu o KoPylot.

GitHub - avsthiago/kopylot: Seu Assistente de IA para Kubernetes escrito em Python

Por que Kubernetes?

Kubernetes é conhecido como uma ferramenta com uma curva de aprendizado íngreme. Dominá-lo exige um investimento significativo de tempo e esforço.

Ao gerenciar um cluster ou implantar sua aplicação no Kubernetes, muitas coisas podem dar errado. A rede, a infraestrutura e as interações entre as aplicações são apenas algumas das coisas que podem nao funcionar. E mesmo quando a aplicação está funcionando, você ainda tem que fazer um esforço extra para garantir que ela esteja segura.

Dada toda essa complexidade e os novos avanços na IA, fez sentido para mim tentar usar a IA para melhorar a vida dos desenvolvedores de Kubernetes.

Recursos do KoPylot

Na versão atual, o KoPylot possui quatro recursos principais. Esses recursos podem ser traduzidos em subcomandos para a CLI kopylot. Os subcomandos são Audit, Chat, Ctl e Diagnose. Vamos explorar esses comandos agora.

Comando de ajuda do KoPylot

🔍 Audit:

Auditar recursos, como pods, deployments e serviços. O KoPylot analisará um único recurso e procurará vulnerabilidades com base em seu arquivo de manifesto (yaml).

Comando de auditoria do KoPylot

💬 Chat:

Pergunte ao KoPylot para gerar comandos kubectl. Você poderá revisar o comando antes de executá-lo 😉.

Comando de auditoria do KoPylot

🩺 Diagnose:

Você pode usar a ferramenta de diagnóstico para ajudá-lo a depurar os diferentes componentes de sua aplicação, como pods, deployments e serviços. O comando de diagnóstico listará possíveis soluções para o problema.

Comando de diagnóstico do KoPylot

☸️ Ctl:

Um wrapper em torno do kubectl. Todos os argumentos passados para o subcomando ctl são interpretados pelo kubectl.

Comando ctl do KoPylot

Como funciona o KoPylot?

No momento, o KoPylot funciona extraindo informações da descrição do recurso Kubernetes (kubectl describe …) ou do manifesto. Então ele passa essa informação para o modelo Davinci da OpenAI junto com um prompt. O prompt informa ao modelo o que fazer com o recurso Kubernetes.

O prompt também é responsável por orientar como o modelo deve estruturar a saída. Por exemplo, o prompt usado para o Comando Audit solicita ao modelo que exiba os resultados como um JSON de duas colunas contendo as vulnerabilidades e suas severidades.

Um dos objetivos no roadmap é tornar possível substituir os modelos da OpenAI por modelos privados. Isso resolveria os problemas de envio de dados potencialmente sensíveis para os servidores da OpenAI.

Quão bons são os resultados?

Testei o KoPylot em um cluster fictício com alguns pods com problemas, alguns com vulnerabilidades e outros sem. O que percebi é que o modelo Davinci pode fornecer boas direções ao diagnosticar um pod problemático. Às vezes, o conselho é muito vago para entender, mas ao executar o comando de diagnóstico 2-3 vezes, é possível identificar o que está acontecendo.

Para o comando Chat, eu comparei as saídas de Davinci e GPT-4. O GPT-4 apresentou resultados muito melhores a partir de prompts vagos do usuário. Até agora, usei o GPT-4 apenas na interface do usuário ChatGPT, mas definitivamente escreverei uma comparação assim que tiver acesso à API.

Como posso usar o KoPylot?

Você pode usar o KoPylot seguindo os passos abaixo:

  1. Solicite uma chave de API da OpenAI.
  2. Exporte a chave usando o seguinte comando:
    export KOPYLOT_AUTH_TOKEN=<sua_chave_openai>
  3. Instale o Kopylot usando o pip:
    pip install kopylot
  4. Execute o Kopylot:
    kopylot --help

Como posso contribuir?

A maneira mais fácil de contribuir para o código do KoPylot é clonando o repositório do GitHub usando git clone https://github.com/avsthiago/kopylot e, em seguida, iniciar o ambiente usando um Dev Container, conforme explicado no arquivo README. Eu aconselho essa abordagem porque o Dev Container possui um cluster Kubernetes pré-instalado (K3d), o que facilita muito os testes 😉.

Contribuir com testes e relatórios de problemas e bugs também é bem-vindo. Você pode encontrar mais informações sobre isso no guia CONTRIBUTING.

Qual é o próximo passo para o KoPylot?

Nas próximas iterações, planejo tornar mais fácil integrar outros LLMs ao KoPylot, como o GPT-3.5-turbo, que pode tornar as solicitações 10 vezes mais baratas.

Também pretendo integrar o LangChain ao KoPylot. A ideia aqui é tornar possível que o KoPylos execute tarefas mais complexas no Kubernetes. Por exemplo, ele pode depurar e resolver problemas em um cluster por conta própria (com algumas salvaguardas, é claro).

Quais são as alternativas ao KoPylot?

Um dos projetos semelhantes que encontrei é o Kopilot do knight42. Ele também é um assistente de Kubernetes que usa LLMs nos bastidores. A principal diferença em relação ao KoPylot é que ele é escrito em Go. No momento, ele não possui o comando Chat implementado, mas pode responder em diferentes idiomas.

Conclusão

Em resumo, desejo é que o KoPylot torne a vida dos desenvolvedores mais fácil. Depurar problemas em um cluster Kubernetes pode ser um processo demorado e ninguém deveria ter que se submeter a isso quando há alternativas mais rápidas disponíveis.

Além disso, estou ansioso para integrar o KoPylot com LLMs de código aberto no futuro, dando às empresas a opção de usar LLMs hospedados em sua própria infraestrutura.

Até o próximo post! 👋

Caso queira entrar em contato, você pode me encontrar no Twitter ou no LinkedIn.