🔀 Hub-and-Spoke: O Padrao Central
O padrao hub-and-spoke e a arquitetura dominante em sistemas multibot. Um ponto central (hub) recebe todas as mensagens e distribui para bots especialistas (spokes). E o mesmo padrao de aeroportos: tudo passa pelo hub, de la vai pra cada destino.
🎯 Conceito Principal
No hub-and-spoke, o hub (router) tem tres responsabilidades: receber a mensagem, classificar a intencao e despachar para o spoke correto. Ele nao processa a mensagem. Ele decide quem processa. Os spokes (bots especialistas) recebem, processam e retornam a resposta ao hub, que devolve ao usuario.
O hub mantem controle total do fluxo. Ele sabe qual bot respondeu, quanto tempo levou, se houve erro. Isso e fundamental para monitoramento, logging e debugging. Sem hub centralizado, voce perde visibilidade do sistema.
- • Entrada unica: Usuario fala com um unico ponto. Nao precisa saber que existem multiplos bots por tras
- • Roteamento transparente: A experiencia do usuario e seamless. Ele nao percebe a troca de bot
- • Observabilidade central: Todas as metricas passam pelo hub: latencia, erros, routing decisions
📐 Arquitetura Hub-and-Spoke
💻 Como o Hub Decide (Pseudocodigo)
💡 Dica Pratica
O hub deve ser stateless. Ele nao guarda contexto de conversa. Ele classifica, despacha e loga. Se o hub cair e reiniciar, nao perde nada. O estado fica nos bots especialistas ou numa camada de persistencia separada (Redis, SQLite). Isso torna o hub facil de escalar horizontalmente.
🧠 Router: Classificacao de Intent
O router e o cerebro do sistema multibot. Ele recebe texto cru do usuario e decide para qual bot especialista enviar. A qualidade do routing determina a qualidade de todo o sistema. Router ruim = usuario falando com o bot errado = experiencia horrivel.
🎯 Conceito Principal
Existem tres abordagens para classificacao de intent, cada uma com seu custo-beneficio:
- • Keyword matching: Mais rapido (~1ms), mais barato (zero custo), mas limitado. Funciona para dominios com vocabularios distintos. Falha com linguagem ambigua
- • LLM-based routing: Mais preciso (90-95%), mais lento (~200-500ms com Ollama, ~500-1500ms com API). Entende nuance, sarcasmo, perguntas indiretas
- • ML classifier (fine-tuned): Melhor equilibrio. Treina um modelo pequeno nos seus dados. Rapido (~10ms), preciso (92-97%), mas precisa de dados de treino
Keyword Matching
LLM-Based Routing
ML Classifier (Fine-tuned)
Treina um modelo leve (DistilBERT, sentence-transformers) com dados reais do seu produto. Precisa de ~500 mensagens rotuladas por categoria. Rapido como keyword, preciso como LLM.
📊 Thresholds de Confianca
O router nao deve enviar mensagens para especialistas quando nao tem certeza. Defina thresholds:
💡 Dica Pratica
Comece com keyword matching + LLM fallback. Se a keyword acerta, usa ela (rapido e gratis). Se nao acha keyword, passa pro LLM classificar. Isso te da velocidade na maioria dos casos e precisao nos casos ambiguos. E a estrategia que o OpenClaw usa no router.ts.
📨 Message Queue e Async Processing
Nem toda mensagem precisa de resposta instantanea. Quando bots fazem tarefas longas (pesquisa, geracao de relatorio, analise de dados), voce precisa de processamento assincrono. Message queues sao a cola que mantem o sistema funcionando sem bloquear.
🎯 Conceito Principal
Uma message queue e uma fila onde mensagens esperam para ser processadas. O router coloca a mensagem na fila, e o bot especialista pega quando estiver disponivel. Isso desacopla quem envia de quem processa. Se o bot de conteudo esta ocupado gerando um artigo de 3000 palavras, as proximas mensagens ficam na fila em vez de dar timeout.
Opcoes populares em Node.js: BullMQ (filas com Redis, robusto), Redis Pub/Sub (broadcast simples), Database Polling (mais simples, sem dependencia extra). Para projetos pequenos, database polling com SQLite funciona perfeitamente.
📊 Comparativo de Message Queues
| Tecnologia | Setup | Escala | Persistencia | Ideal para |
|---|---|---|---|---|
| BullMQ + Redis | Medio | Alta | Sim | Producao seria |
| Redis Pub/Sub | Facil | Alta | Nao | Broadcast real-time |
| SQLite Polling | Facil | Baixa | Sim | MVP, bot pessoal |
| RabbitMQ | Complexo | Muito alta | Sim | Enterprise |
💻 BullMQ: Fila de Tarefas com Prioridade
⚡ Priority Queues: Nem Toda Mensagem e Igual
Um usuario com problema no login nao pode esperar atras de um pedido de geracao de conteudo. Priority queues garantem que mensagens urgentes passam na frente.
💡 Dica Pratica
Envie uma mensagem de "processando" para o usuario imediatamente. Quando a mensagem entra na fila, responda ao usuario: "Entendi, estou analisando..." Isso evita que o usuario repita a mensagem ou ache que o bot travou. Quando o processamento terminar, envie a resposta completa. O OpenClaw faz isso com bot.sendChatAction('typing').
⚖️ Load Balancing entre Bots
Quando um bot especialista nao da conta do volume, voce precisa de multiplas instancias do mesmo bot. Load balancing distribui a carga entre elas. E o mesmo conceito de servidores web, aplicado a agentes de IA.
🎯 Conceito Principal
Load balancing para bots de IA tem nuances diferentes de web servers. O tempo de processamento e variavel (uma pergunta simples leva 2s, uma analise complexa leva 30s), entao algoritmos simples como round-robin podem sobrecarregar instancias. Least-connections tende a funcionar melhor para bots.
Outra estrategia e weighted routing: direcione mais trafego para instancias com modelos mais rapidos ou hardware melhor. E quando a carga aumenta, auto-scaling adiciona novas instancias automaticamente.
Round-Robin
Distribui mensagens sequencialmente entre instancias. Instancia 1, 2, 3, 1, 2, 3...
Least-Connections
Envia para a instancia com menos tarefas ativas no momento. Adapta-se automaticamente a cargas variaveis.
Weighted
Atribui pesos por instancia. Instancia com GPU recebe peso 3x. Instancia com CPU recebe peso 1x.
💻 Load Balancer com Least-Connections
📈 Auto-Scaling por Demanda
- • Metrica de trigger: Fila do bot com mais de 10 mensagens pendentes? Sobe nova instancia. Abaixo de 3 por 5 minutos? Desce
- • Limites: Defina min/max instancias. Min=1 (sempre ligado), Max=5 (nao estourar custo)
- • Cooldown: Espere 2 minutos entre scale up e scale down pra evitar flapping
💡 Dica Pratica
Para bots pessoais, voce nao precisa de load balancing. Um processo com concurrency=5 no BullMQ ja da conta de um usuario (voce). Load balancing so importa quando voce tem 100+ usuarios simultaneos. Nao adicione complexidade que voce nao precisa ainda.
🛡️ Fallback e Degradacao Graceful
Bots vao falhar. APIs caem, modelos ficam lentos, rate limits sao atingidos. O que define um sistema robusto nao e a ausencia de falhas, e como ele se comporta quando falha. Degradacao graceful garante que o usuario sempre recebe alguma resposta, mesmo que nao seja a ideal.
🎯 Conceito Principal
Degradacao graceful segue uma cadeia de fallback: se o bot especialista falha, tenta um bot generico. Se o bot generico falha, tenta uma resposta pre-programada. Se tudo falha, informa o usuario que vai analisar e retornar. Nunca silencio. Nunca erro cru.
Os tres pilares sao: health checks (detectar falha proativamente), circuit breaker (parar de chamar bot que esta falhando) e fallback chain (sempre ter um plano B, C e D).
🔗 Cadeia de Fallback
💓 Health Checks
⚡ Circuit Breaker
💡 Dica Pratica
Logue todas as falhas e fallbacks. Se voce nao sabe que o bot de vendas caiu 47 vezes ontem e o fallback respondeu no lugar, voce nao sabe que tem um problema. Crie alertas: se o fallback rate passa de 10%, algo precisa de atencao. O dashboard do OpenClaw mostra isso em tempo real.
🏗️ Exercicio: Implementar Router Central
Hora de colocar a arquitetura em pratica. Voce vai construir um router funcional que classifica intent e despacha para 2+ bots especialistas com fallback. Ao final, voce tera um sistema multibot minimo viavel rodando.
Exercicio: Router Central com Fallback
Tempo estimado: 30-40 minutos
Configure o Projeto
Crie a estrutura basica com Node.js. Instale dependencias minimas.
Implemente o Classificador
Comece com keyword matching. Depois adicione LLM como fallback para mensagens ambiguas.
Crie 2 Bots Especialistas
Cada bot com system prompt unico e funcao respond(). Pode usar Ollama local ou API.
Implemente o Fallback com Try/Catch
Se o especialista falha, tenta o generalista. Se o generalista falha, resposta estatica.
Conecte ao Telegram e Teste
Integre o router com o Telegram Bot API. Teste com 10 mensagens de tipos diferentes.
Adicione Logging de Routing
Cada mensagem processada gera um log: intent, confianca, bot selecionado, latencia.
✅ Criterios de Sucesso
🌟 Bonus: Evolua para LLM-Based Routing
Substitua o keyword matching por classificacao LLM usando Ollama local. Use qwen2.5:3b ou llama3.2:1b como classificador. Compare a acuracia com keyword matching e documente os resultados.
Extra credit: Adicione um health check que verifica se cada bot esta respondendo a cada 30 segundos. Se um bot falha 3x seguidas, marque como unhealthy e redirecione automaticamente pro fallback.