Uma série de exemplos didáticos de LangChain, cada um resolvendo um problema real de DevOps e ensinando uma ideia por vez. São projetos independentes: você pode clonar o repositório inteiro e rodar só o que interessa.
Os exemplos foram escritos para serem lidos, não estendidos. Cada um é o menor código que demonstra sua ideia — o que falta num exemplo costuma ser o assunto do próximo.
| # | Pasta | O que resolve | O que ensina |
|---|---|---|---|
| 01 | 01-chat-devops |
Uma pergunta DevOps ao Gemini | Modelo, mensagens, invoke() vs stream() e metadados do AIMessage |
| 02 | 02-chat-devops-sem-memoria |
A mesma pergunta, agora num chat que continua aberto | Que um terminal contínuo não é uma conversa: cada chamada começa do zero, e que um ChatPromptTemplate compõe a entrada |
| 03 | 03-chat-devops-memoria |
O mesmo chat, agora lembrando da conversa | Que o modelo não tem memória — quem lembra é o seu código, reenviando a lista por um MessagesPlaceholder |
| 04 | 04-agente-runbook |
Responder sobre um runbook privado carregado pela aplicação | Runtime mínimo de agente, objetos Document e conhecimento inserido diretamente no contexto |
| 05 | 05-agente-runbook-tool |
Consultar diferentes runbooks pelo identificador presente na pergunta | Criação de ferramenta, registro com create_agent e seleção de parâmetro pelo modelo |
| 06 | 06-assistente-plataforma |
Consultar o cluster Kubernetes em linguagem natural | Descoberta e registro do catálogo de ferramentas de um MCP server HTTP |
| 07 | 07-assistente-plataforma-cli |
Executar uma consulta operacional por processo | Contrato de CLI com argumento, contexto, canais e códigos de saída |
| 08 | 08-assistente-plataforma-chat |
Conversar com o assistente e acompanhar a resposta | Histórico de sessão e retorno progressivo em Streamlit |
| 09 | 09-inventario-ec2 |
Consultar o inventário EC2 da conta | A mesma ferramenta declarada de quatro formas e o esquema que o modelo recebe de cada uma |
| 10 | 10-inventario-ec2-testes |
Garantir que a ferramenta do inventário funciona antes de entregá-la ao agente | Teste da ferramenta sem modelo: invocação direta, pedido de chamada escrito à mão e validação do esquema na execução |
| 11 | 11-inventario-ec2-colisao |
Escolher entre duas ferramentas parecidas: estado e status das instâncias | Colisão entre ferramentas, diagnóstico pela chamada pedida e correção por descrição contrastiva |
| 12 | 12-pesquisa-web-devops |
Pesquisar tendências de DevOps e cloud e ler um documento na web | Ferramentas prontas de pacotes de integração (Tavily e Firecrawl), registradas com uma chave e trocadas por uma linha |
A ordem importa. O 02 coloca a chamada isolada do 01 num loop, passa a compor a entrada
por template e mostra que o modelo esquece; o 03 resolve isso com memória explícita, num
slot do mesmo template; o 04 entra no runtime sem tools e
torna o contexto externo explícito; o 05 registra a primeira ferramenta no agente; o 06
conecta o agente a ferramentas Kubernetes publicadas por um MCP server e torna o fluxo
observável; o 07 transforma uma solicitação em execução single shot; o 08 adiciona
conversa, memória de sessão e retorno progressivo; o 09 sai do cluster para uma conta AWS e
olha a ferramenta por dentro: as formas de declará-la e o esquema que cada uma envia ao modelo;
o 10 testa essa ferramenta sem modelo, no lugar da aplicação que executa o pedido;
o 11 coloca uma segunda ferramenta ao lado dela e mostra que descrições parecidas colidem;
e o 12 deixa de escrever a ferramenta e usa ferramentas prontas do ecossistema, com camada gratuita.
- uv — gerencia Python e dependências
- Python 3.12 (o
uvinstala sozinho, se faltar) - Uma chave da Gemini Developer API para os exemplos
01e02 - Uma chave da API da Anthropic para os exemplos
03a09,11e12(o10não usa modelo) - Node.js,
npx,kubectle um cluster de estudo para os exemplos06a08 - Uma conta AWS com credencial de leitura do EC2 para os exemplos
09a11 - Chaves do Tavily e do Firecrawl para o exemplo
12(as duas têm camada gratuita, sem cartão)
Todo exemplo segue o mesmo ritual, sempre de dentro da pasta dele:
cd 01-chat-devops
cp .env.example .env # preencha GOOGLE_API_KEY
uv syncO comando de execução muda por exemplo:
cd 01-chat-devops && uv run src/app.py
cd 02-chat-devops-sem-memoria && uv run chat-devops-sem-memoria
cd 03-chat-devops-memoria && uv run chat-devops-memoria
cd 04-agente-runbook && uv run agente-runbook
cd 05-agente-runbook-tool && uv run agente-runbook-tool
cd 06-assistente-plataforma && uv run assistente-plataforma
cd 07-assistente-plataforma-cli && uv run assistente-plataforma-cli "Liste os pods com reinicializações" --namespace kube-system
cd 08-assistente-plataforma-chat && uv run streamlit run src/app.py
cd 09-inventario-ec2 && uv run inventario-ec2 "Quais instâncias estão paradas?"
cd 10-inventario-ec2-testes && uv run pytest -v
cd 11-inventario-ec2-colisao && uv run inventario-ec2-colisao "Qual o status da worker-01?"
cd 12-pesquisa-web-devops && uv run pesquisa-web-devops "Quais as tendências recentes de DevOps e cloud?"Cada pasta tem um README.md próprio, com a explicação completa daquele exemplo. Comece por
ele.
Pastas seguem nn-slug: número sequencial da aula + nome do projeto. Cada exemplo é
autocontido — tem seu próprio pyproject.toml, uv.lock, .venv e .env. Não há
workspace, pacote compartilhado nem utilitário comum, de propósito: você pode copiar uma pasta
sozinha para outro lugar e ela roda.
Isso significa dependência duplicada entre os exemplos. É intencional, e o preço é barato perto de poder tratar cada aula como um projeto independente.
Cada exemplo tem .env.example com placeholder; o .env de verdade está no .gitignore.
Nenhum arquivo versionado aqui contém credencial.