📋 Planejamento do Sistema
Antes de escrever uma linha de codigo, voce precisa de um plano claro. Sistemas multibot falham mais por falta de planejamento do que por problemas tecnicos. O planejamento comeca com uma pergunta simples: quais problemas este sistema vai resolver? Nao "quais tecnologias vou usar" ou "quantos bots vou ter". A resposta define tudo que vem depois: quantos bots, quais responsabilidades, como se comunicam, e onde rodam.
O mapeamento de bots segue o principio da separacao de responsabilidades. Cada bot deve ter um dominio claro e bem definido. Se voce nao consegue descrever o que um bot faz em uma frase, ele provavelmente esta fazendo coisas demais. Exemplos de dominios bem definidos: "responde perguntas sobre codigo e desenvolvimento", "gerencia emails e comunicacoes", "pesquisa e sintetiza informacoes da web", "monitora servicos e infraestrutura".
O diagrama de arquitetura e o artefato mais importante do planejamento. Ele mostra: os bots (com seus nomes e responsabilidades), os canais de entrada (Telegram, Slack, webhook), o router (como mensagens sao classificadas e encaminhadas), as dependencias externas (APIs, bancos de dados, LLMs), e os fluxos de comunicacao entre componentes. Desenhando isso antes de codar, voce evita refatoracoes caras depois.
Conceito Principal
O planejamento de sistema multibot deve responder cinco perguntas fundamentais. Primeira: quantos bots? Comece com o minimo viavel (router + 2 especialistas). Voce pode adicionar mais depois. Segunda: quais dominios? Defina responsabilidades claras e nao sobrepostas. Terceira: quais canais? Comece com um canal (Telegram) e expanda depois. Quarta: qual LLM por bot? Nem todo bot precisa do modelo mais caro. Perguntas simples vao para modelos locais baratos. Quinta: como se comunicam? Via router centralizado ou peer-to-peer.
A arquitetura mais comum e o padrao hub-and-spoke: um router central (hub) recebe todas as mensagens e encaminha para os bots especialistas (spokes). Os especialistas nunca se comunicam diretamente entre si. Toda comunicacao passa pelo router. Isso simplifica o debug, o monitoramento e a adocao incremental de novos bots.
Para o exercicio deste modulo, voce vai implementar: 1 router (classificador de intencoes), 2 bots especialistas (um para codigo/dev e um para pesquisa/informacoes gerais), e 1 canal (Telegram). Esse e o sistema minimo viavel que demonstra todos os conceitos de multibot sem complexidade desnecessaria.
Checklist de Planejamento
Inventario de bots - Lista com nome, dominio, LLM backend, e estimativa de custo por mensagem
Mapa de canais - Quais canais de entrada, como mensagens sao recebidas, formatos suportados
Routing rules - Regras de classificacao: quais keywords/intencoes vao para qual bot
Fallback strategy - O que acontece quando nenhum bot especialista e o match? Quem responde?
Diagrama de arquitetura - Desenho visual mostrando componentes, fluxos e dependencias
Dica Pratica
Use o Claude Code para gerar seu diagrama de arquitetura. Descreva os componentes em linguagem natural e peca para gerar um diagrama em Mermaid ou ASCII art. Voce pode tambem pedir para o Claude analisar seu plano e apontar falhas ou melhorias. Planejamento assistido por IA e tao valido quanto codigo assistido por IA.
Resista a tentacao de planejar o "sistema perfeito" de 10 bots. Comece com 2 especialistas e o router. Valide que funciona. Depois adicione o terceiro bot. Sistemas que nascem grandes morrem grandes. Sistemas que nascem pequenos e crescem organicamente sobrevivem.
Fazer
- ✓Definir dominios claros e nao sobrepostos para cada bot
- ✓Desenhar o diagrama de arquitetura ANTES de codar
- ✓Planejar a estrategia de fallback desde o inicio
- ✓Comecar com o minimo viavel (router + 2 bots + 1 canal)
Evitar
- ✗Planejar 10 bots antes de ter 2 funcionando
- ✗Bots com responsabilidades sobrepostas (conflitos de routing)
- ✗Ignorar custos de API no planejamento
- ✗Pular o planejamento e ir direto pro codigo
🧭 Criando o Router
O router e o cerebro do sistema multibot. Ele recebe cada mensagem do usuario, classifica a intencao, e encaminha para o bot especialista correto. Um bom router e rapido, preciso, e tem fallbacks inteligentes. Um router ruim manda mensagens pro bot errado e frustra o usuario. A qualidade do router determina a qualidade de todo o sistema.
Existem tres abordagens principais para classification. A mais simples e regex/keyword matching: se a mensagem contem "codigo", "debug", "deploy", vai para o bot de desenvolvimento. E rapido e gratuito, mas fragil com linguagem natural ambigua. A segunda e LLM classification: voce envia a mensagem para um modelo leve (como Llama 3.2 3B ou Qwen 2.5 7B) com um prompt que pede para classificar em categorias. E mais preciso mas adiciona latencia e custo. A terceira e hybrid: tenta regex primeiro, e se nao encontra match com confianca alta, usa LLM como fallback.
O conceito de confidence threshold e essencial. Quando o router classifica uma mensagem, ele deve retornar nao apenas a categoria mas tambem um nivel de confianca. Se a confianca esta acima do threshold (ex: 80%), encaminha diretamente. Se esta entre 50-80%, pode pedir confirmacao ao usuario. Se esta abaixo de 50%, vai para o bot default. Sem threshold, o router vai forcar classificacoes incorretas em mensagens ambiguas.
Conceito Principal: Arquitetura do Router
Pre-processamento
Normaliza a mensagem: lowercase, remove pontuacao excessiva, detecta idioma, identifica comandos explicitos (/claude, /research). Comandos explicitos bypassam a classificacao e vao direto pro bot indicado.
Regex Layer
Primeira camada de classificacao. Patterns definidos em config: /code|debug|deploy|git|npm/ -> dev-bot, /pesquisa|busca|search|quem|quando/ -> research-bot. Rapido, deterministico, zero custo. Cobre 60-70% dos casos claros.
LLM Classifier
Quando regex nao encontra match, um modelo leve classifica. Prompt: "Classifique a mensagem em uma das categorias: development, research, general. Retorne JSON com category e confidence." Modelo recomendado: Llama 3.2 3B via Ollama (local, rapido, gratuito).
Default Handler
Quando a confianca e baixa ou a mensagem e ambigua, vai para o bot default. O default deve ser o bot mais generalista. Em muitos sistemas, e o Ollama local com um modelo conversacional. Custo zero e resposta rapida para o fallback.
Metricas de Router
Latencia target para routing decision (regex: ~1ms, LLM: 50-200ms)
Accuracy target para classificacao correta de intencoes
Confidence threshold recomendado para routing automatico
Abordagem recomendada: regex first, LLM fallback
Dica Pratica
Logue TODAS as decisoes de routing: mensagem recebida, metodo usado (regex/LLM), categoria classificada, confidence score, e bot destino. Esse log e ouro para debugging e melhoria continua. Depois de uma semana de uso, analise os logs para encontrar patterns de classificacao incorreta e ajuste as regras.
Para o LLM classifier, use structured output (JSON mode) para garantir que a resposta sempre venha no formato esperado. Modelos pequenos as vezes retornam texto livre em vez de JSON. Force o formato via system prompt e parsing robusto com fallback para regex no output.
Fazer
- ✓Implementar hybrid routing (regex + LLM fallback)
- ✓Usar confidence threshold para evitar misrouting
- ✓Logar todas as decisoes de routing para analise
- ✓Permitir override explicito via comandos (/claude, /research)
Evitar
- ✗Usar apenas regex (fragil com linguagem natural)
- ✗Usar modelo pesado para routing (GPT-4 e overkill e lento)
- ✗Forcar classificacao sem fallback (mensagens ambiguas existem)
- ✗Nao logar decisoes de routing (impossivel debugar depois)
🤖 Implementando Especialistas
Cada bot especialista e um agente autonomo com sua propria personalidade, conhecimento de dominio, conjunto de skills, e backend de LLM. A chave e que cada especialista seja realmente bom no seu dominio especifico, nao mediocre em tudo. Um bot de desenvolvimento que conhece seu stack tecnico, suas convencoes de codigo, e seus repositorios e infinitamente mais util que um chatbot generico que sabe um pouco de tudo.
O deploy de especialistas pode ser feito de duas formas. Na forma monolitica, todos os bots rodam no mesmo processo Node.js, como modulos diferentes. E mais simples de gerenciar mas tem o risco de um bot crashar todo o sistema. Na forma distribuida, cada bot e um processo separado, comunicando via HTTP/WebSocket ou fila de mensagens. E mais resiliente mas mais complexo de operar. Para comecar, monolitico e a escolha certa. Distribua quando tiver necessidade real.
A personalidade de cada bot e definida em seu proprio arquivo de configuracao (como um CLAUDE.md especifico). O bot de desenvolvimento deve ter tom tecnico, direto, e conhecer os frameworks que voce usa. O bot de pesquisa deve ser investigativo, citar fontes, e admitir quando nao tem certeza. Essas personalidades diferentes nao sao frescura estetica. Elas melhoram a qualidade das respostas porque o LLM se comporta diferente com system prompts diferentes.
Conceito Principal
Um bot especialista tem quatro componentes essenciais. O system prompt define personalidade, tom de voz, e regras de comportamento especificas ao dominio. O domain knowledge e o contexto adicional que o bot recebe: lista de projetos, documentacao de APIs, convencoes do time. As skills sao as ferramentas que o bot pode usar: para o bot de dev, acesso ao filesystem e terminal; para o bot de pesquisa, web search e browser. E o LLM backend e o modelo que alimenta o bot, escolhido pelo balanco entre custo, velocidade e qualidade para aquele dominio.
A escolha de LLM por especialista e estrategica. O bot de desenvolvimento precisa de raciocinio forte e tool use, entao Claude Sonnet ou GPT-4o sao boas escolhas (mais caros, mas o dominio exige). O bot de pesquisa precisa de boa sintese e custo baixo, entao DeepSeek R1 via OpenRouter e ideal. O bot default/conversacional pode usar Ollama local com Qwen 2.5, custo zero. Essa diversificacao reduz custos dramaticamente.
Cada especialista deve ter isolamento de contexto. O bot de dev nao precisa saber sobre as pesquisas que o bot de research fez. Contextos separados significam janelas de contexto menores, menos tokens consumidos, e respostas mais focadas. Se um bot precisa de informacao de outro, o router pode orquestrar isso explicitamente.
Exemplo: 2 Especialistas + Backend Recomendado
DevBot - Especialista em Desenvolvimento
Claude SonnetPersonalidade: tecnico, direto, code-first. Skills: filesystem, terminal, git, npm. Domain: lista de projetos do usuario, stack preferido, convencoes de codigo. Custo: ~$0.01-0.05/mensagem.
ResearchBot - Especialista em Pesquisa
DeepSeek R1Personalidade: investigativo, cita fontes, admite incerteza. Skills: web search, browser, link extraction. Domain: areas de interesse do usuario. Custo: ~$0.001-0.005/mensagem.
DefaultBot - Conversacional
Ollama LocalPersonalidade: amigavel, casual. Skills: memoria, tasks. Domain: preferencias pessoais, lembretes. Custo: $0 (modelo local). Modelo: Qwen 2.5 14B.
Dica Pratica
Crie um arquivo de personalidade separado para cada bot (ex: dev-bot.md, research-bot.md). Isso permite iterar na personalidade de cada um independentemente. Inclua exemplos de como o bot deve responder em situacoes comuns do dominio. Exemplos concretos no system prompt melhoram drasticamente a qualidade das respostas.
Para o primeiro deploy, comece com dois bots usando o mesmo LLM (ex: ambos em Ollama) e personalidades diferentes. Valide que o routing funciona e que as respostas sao coerentes com o dominio. Depois otimize os backends por especialista. Separar a preocupacao "funciona?" de "qual modelo e melhor?" evita debugging impossivel.
Fazer
- ✓Definir personalidade unica para cada especialista
- ✓Escolher o LLM certo para cada dominio (custo vs qualidade)
- ✓Isolar contextos entre bots (nao compartilhar sessao)
- ✓Dar skills relevantes ao dominio (nao todas para todos)
Evitar
- ✗Todos os bots com a mesma personalidade generica
- ✗Usar o modelo mais caro para todos os bots
- ✗Compartilhar contexto entre bots (polui a janela)
- ✗Implementar 5+ bots de uma vez (comece com 2)
📡 Conectando Canais
Multi-channel deployment significa que seu sistema multibot pode receber mensagens de diferentes plataformas: Telegram, Slack, Discord, WhatsApp, webhooks HTTP, ou ate email. O desafio nao e tecnico (APIs existem para todas essas plataformas). O desafio e normalizacao: cada plataforma envia mensagens em formatos diferentes, com capacidades diferentes, e limitacoes diferentes. O sistema precisa abstrair essas diferencas.
A camada de normalizacao transforma mensagens de qualquer canal em um formato interno padrao. Esse formato deve conter: texto da mensagem, ID do usuario, canal de origem, timestamp, e metadados opcionais (se tem midia, se e reply, etc.). Quando o bot responde, uma camada de formatacao faz o caminho inverso: transforma a resposta interna no formato especifico do canal. Telegram suporta markdown, Slack usa blocks, Discord tem embeds. A mesma resposta e formatada diferente para cada destino.
Para webhooks, voce expoe um endpoint HTTP que recebe eventos de servicos externos. Isso permite integracoes como: GitHub envia um webhook quando um PR e aberto, o sistema processa e notifica via Telegram; um servico de monitoramento detecta downtime e dispara um webhook que aciona o bot de ops. Webhooks transformam o sistema de passivo (espera mensagens do usuario) em ativo (reage a eventos externos).
Conceito Principal
A arquitetura multi-channel segue o padrao adapter. Cada canal tem um adapter que implementa duas funcoes: receive() (converte mensagem do formato nativo para formato interno) e send() (converte resposta do formato interno para formato nativo). O core do sistema trabalha apenas com o formato interno, ignorando de qual canal a mensagem veio.
O webhook setup requer um servidor HTTP acessivel publicamente. Para desenvolvimento local, use ngrok ou cloudflared para criar um tunnel. Para producao, configure um dominio com SSL. O endpoint do webhook deve validar a origem (secret/signature verification) para evitar que qualquer um envie eventos falsos ao sistema.
Channel-specific formatting e onde a experiencia do usuario e definida. Telegram suporta HTML e Markdown, permite enviar arquivos e fotos inline, e tem botoes interativos. Slack tem Block Kit com layouts ricos. Discord tem embeds coloridos. Adaptar a resposta para cada canal nao e opcional; uma resposta em texto puro quando a plataforma suporta rich media e uma experiencia pobre.
Comparativo de Canais
| Canal | Bot API | Rich Media | Custo |
|---|---|---|---|
| Telegram | Excelente | Markdown, HTML, arquivos, botoes | Gratuito |
| Slack | Boa | Block Kit, threads, modals | Free tier |
| Discord | Boa | Embeds, botoes, slash commands | Gratuito |
| Limitada | Texto, imagens, templates | Pago (Meta API) | |
| Webhook HTTP | Custom | Qualquer formato | Gratuito |
Dica Pratica
Comece com Telegram. Domine esse canal completamente antes de adicionar outro. A tentacao de ser "multi-channel desde o dia um" resulta em experiencia mediocre em todos os canais. Uma experiencia excelente em um canal e melhor que uma experiencia ok em tres.
Quando for adicionar um segundo canal, crie o adapter layer primeiro e teste com mensagens mockadas. So depois conecte a API real. Isso permite testar a normalizacao sem depender da disponibilidade do servico externo. Use o padrao de inversion of control: o core do bot nao sabe e nao se importa de onde a mensagem veio.
Fazer
- ✓Implementar normalizacao de mensagens (formato interno unico)
- ✓Adaptar formatacao para as capacidades de cada canal
- ✓Validar origem de webhooks (secret verification)
- ✓Dominar um canal antes de adicionar outros
Evitar
- ✗Enviar texto puro quando o canal suporta rich media
- ✗Acoplar logica de negocio ao formato de um canal especifico
- ✗Aceitar webhooks sem verificacao de origem
- ✗Tentar suportar 5 canais simultaneamente no dia um
🧪 Testes End-to-End
Testar um sistema multibot e diferente de testar software tradicional. Voce tem componentes nao-deterministicos (LLMs retornam respostas diferentes para o mesmo input), dependencias externas (APIs de terceiros), e fluxos complexos que atravessam multiplos servicos. Testes tradicionais de "input X = output Y" nao funcionam aqui. Voce precisa de estrategias adaptadas.
Conversation tests sao testes que simulam conversas reais. Voce define um script com mensagens do usuario e verifica que: a mensagem foi roteada para o bot correto, a resposta contem os elementos esperados (nao a resposta exata, mas palavras-chave ou patterns), e o sistema nao crashou. Esses testes cobrem o fluxo principal: mensagem entra, router classifica, especialista responde, resposta volta ao canal.
Load tests verificam como o sistema se comporta sob pressao. O que acontece se 10 mensagens chegam ao mesmo tempo? E 100? O Ollama local aguenta? As filas de processamento funcionam? O timeout esta configurado corretamente? Load tests revelam gargalos que so aparecem em producao: memory leaks, connection pool exhaustion, rate limiting de APIs.
Conceito Principal: Estrategias de Teste
Unit Tests: Router
Teste a classificacao de intencoes isoladamente. Input: lista de 50 mensagens com a classificacao esperada. Assertion: accuracy > 85%. Teste edge cases: mensagens vazias, so emojis, mistura de idiomas, comandos explicitos. Use mocks para o LLM classifier para testes deterministicos.
Integration Tests: Fluxo Completo
Simule uma conversa end-to-end: envie mensagem mock, verifique que passou pelo router, chegou ao especialista correto, e gerou resposta. Nao valide o texto exato da resposta (nao-deterministico), mas valide que a resposta existe, tem tamanho razoavel, e veio do bot certo.
Error Scenarios
Teste o que acontece quando coisas dao errado: LLM timeout, API retorna 500, Ollama nao esta rodando, rate limit atingido. O sistema deve falhar gracefully: retornar uma mensagem amigavel ao usuario, logar o erro, e nao crashar o processo.
Monitoring de Producao
Apos deploy, monitore: latencia por mensagem, taxa de erro, accuracy do routing (via feedback), custo acumulado, e uptime. Um dashboard simples com essas metricas e suficiente. Alertas automaticos quando latencia > 30s ou taxa de erro > 5%.
Metricas de Saude do Sistema
Latencia maxima aceitavel (routing + LLM + formatacao)
Taxa de erro target para mensagens em producao
Uptime target (menos de 7 horas de downtime por mes)
Frequencia minima de review de logs e metricas
Dica Pratica
Crie um script de "smoke test" que voce roda antes de cada deploy. O script envia 5-10 mensagens de teste cobrindo diferentes intencoes, verifica que todas recebem resposta em tempo aceitavel, e confirma que o routing esta correto. Execute esse script automaticamente via CI ou manualmente. Leva 2 minutos e evita deploys quebrados.
Para monitoramento em producao, comece simples. Um arquivo de log estruturado (JSON) com cada mensagem processada ja e suficiente. Voce pode analisar esses logs com jq no terminal, ou importar em um SQLite para queries mais complexas. Nao precisa de Grafana no dia um. Precisa de visibilidade.
Fazer
- ✓Criar smoke tests automatizados para pre-deploy
- ✓Testar error scenarios (timeout, API down, rate limit)
- ✓Monitorar latencia, erros e custo em producao
- ✓Usar logs estruturados (JSON) para analise posterior
Evitar
- ✗Testar apenas o "happy path" (erros acontecem em producao)
- ✗Assertions exatas em respostas de LLM (nao-deterministico)
- ✗Deploy sem nenhum teste automatizado
- ✗Ignorar monitoramento depois que "esta funcionando"
🛠️ Exercicio: Multibot Funcional
Este e o exercicio final da Trilha 5. Voce vai construir um sistema multibot funcional completo: router inteligente + 2 bots especialistas + 1 canal, tudo funcionando e testado. Ao final, voce tera um sistema que recebe mensagens, classifica intencoes, roteia para o bot certo, e retorna respostas especializadas. Isso e o que empresas cobram milhares de dolares para implementar.
O exercicio consolida tudo que voce aprendeu na Trilha 5: arquitetura multibot (Modulo 5.1-5.2), patterns de comunicacao (Modulo 5.3), protocolos de coordenacao (Modulo 5.4), frameworks de bot pessoal (Modulo 5.5), e deployment (Modulo 5.6). Cada um desses modulos forneceu uma peca do quebra-cabeca. Agora voce vai montar todas juntas.
Tempo estimado: 2-4 horas para o setup completo, mais 1-2 horas para testes e refinamento. Se voce ja completou o exercicio do Modulo 5.5 (setup de framework), grande parte da infraestrutura ja esta pronta. O foco agora e adicionar o router e o segundo especialista.
Passo a Passo do Exercicio
Planejar a Arquitetura
Desenhe o diagrama do sistema. Defina:
- Router: hybrid (regex + LLM classification via Ollama)
- Bot 1 - DevBot: responde perguntas de codigo, roda comandos, acessa filesystem
- Bot 2 - ResearchBot: pesquisa na web, sintetiza informacoes, cita fontes
- Default: Ollama conversacional para tudo que nao e dev nem research
- Canal: Telegram
Implementar o Router
Crie o modulo de routing com tres camadas:
// 1. Comando explicito: /claude, /research → bypass direto
// 2. Regex: patterns de keywords → classificacao rapida
// 3. LLM fallback: Ollama classifica → retorna {category, confidence}
// 4. Default: confidence < 0.8 → bot conversacional
Implementar os Especialistas
Crie o DevBot (Claude Sonnet ou Ollama com tools) e o ResearchBot (OpenRouter/DeepSeek ou Ollama com web search). Cada um com seu system prompt, skills, e LLM backend. Teste cada bot isoladamente antes de conectar ao router.
Integrar e Testar
Conecte router + especialistas + Telegram. Envie mensagens de teste cobrindo todos os cenarios: mensagens de dev ("como faco git rebase?"), pesquisa ("quem ganhou a Copa de 2022?"), conversacional ("bom dia!"), e comandos explicitos (/claude, /research).
Criar Smoke Tests
Escreva um script que envia 10 mensagens de teste via API do Telegram (ou mock local), verifica que cada uma foi roteada corretamente, e reporta pass/fail. Esse script deve rodar em menos de 1 minuto e cobrir: routing correto, resposta recebida, latencia aceitavel.
Deploy e Monitoramento
Coloque em producao e configure monitoramento basico:
- pm2/systemd: para auto-restart e persistencia
- Dashboard: metricas de uso por bot, latencia, custo
- Logs: JSON estruturado com routing decisions
- Alertas: notificacao Telegram quando erro rate > threshold
Checklist de Entregaveis
Dica Pratica
Use Vibe Coding para construir o proprio sistema multibot. Abra o Claude Code, descreva a arquitetura que voce planejou, e peca para implementar. Itere com feedback: "o routing nao ta pegando mensagens de debug, ajusta os regex patterns". O proprio exercicio e uma demonstracao de tudo que voce aprendeu no curso.
Se voce travou, nao gaste mais que 30 minutos em um unico problema. Mude de abordagem ou peca ajuda (no grupo da comunidade, no Stack Overflow, ou pro proprio Claude). O objetivo e ter o sistema rodando, nao resolver cada problema sozinho. Em producao real, voce tambem pede ajuda. Isso nao e fraqueza. E eficiencia.
Fazer
- ✓Seguir a sequencia: planejar > router > especialistas > integrar > testar
- ✓Testar cada componente isoladamente antes de integrar
- ✓Usar Vibe Coding para construir o sistema (meta!)
- ✓Deployar mesmo imperfeito e iterar em producao
Evitar
- ✗Tentar construir o "sistema perfeito" de primeira
- ✗Gastar mais de 30 min em um unico bug sem pedir ajuda
- ✗Pular os testes ("esta funcionando no meu manual")
- ✗Adicionar mais bots antes de 2 funcionarem bem
Resumo do Modulo 5.7
Voce completou o exercicio final da Trilha 5 e construiu um sistema multibot funcional. Vamos revisar o que voce conquistou: