MODULO 5.2

πŸ€– Assistente Unico vs Multiplos

A decisao mais importante antes de escrever uma linha de codigo: um bot que faz tudo ou varios bots que fazem coisas especificas? Analise os trade-offs, entenda os limites e saiba quando migrar.

6
Topicos
~45min
Duracao
Intermediario
Nivel
Teoria
Tipo
1

πŸ—οΈ Monolito vs Microsservicos para Bots

O debate monolito vs microsservicos que existe no backend tradicional se aplica diretamente ao mundo dos bots. Um unico bot que faz tudo e o monolito. Varios bots especializados sao os microsservicos. E a mesma tensao, os mesmos trade-offs, as mesmas armadilhas.

🎯 Conceito Principal

Um bot monolito centraliza tudo num unico processo: system prompt, tools, memoria, contexto. Ele e simples de deployar, simples de debugar e simples de entender. Mas tem um teto. Quando voce adiciona a decima funcionalidade, o system prompt vira uma biblia e o modelo comeca a se confundir sobre qual personalidade usar.

Um sistema multibot (microsservicos) distribui responsabilidades. Cada bot tem escopo reduzido, prompt curto e tools limitadas. O custo e a complexidade de orquestracao: routing, comunicacao entre bots, estado compartilhado, deploy de multiplos servicos.

  • β€’ Monolito: 1 processo, 1 system prompt, N tools. Deploy simples. Complexidade interna cresce linearmente com features
  • β€’ Microsservicos: N processos, N prompts, tools distribuidas. Deploy complexo. Complexidade interna de cada bot permanece baixa
  • β€’ Trade-off real: simplicidade de operacao vs qualidade de resposta. Nao existe resposta certa universal

πŸ“¦ Bot Monolito

bot-unico/
β”œβ”€β”€ system-prompt.md (2000+ palavras)
β”œβ”€β”€ tools/ (15+ tools)
β”œβ”€β”€ memory/ (tudo junto)
└── index.ts (1 processo)
  • + 1 deploy, 1 processo, 1 banco
  • + Contexto 100% compartilhado
  • - Prompt enorme = confusao do modelo
  • - Uma falha derruba tudo

πŸ”€ Sistema Multibot

multi-bot/
β”œβ”€β”€ router/ (classificador)
β”œβ”€β”€ bot-suporte/ (prompt curto)
β”œβ”€β”€ bot-vendas/ (prompt curto)
└── bot-conteudo/ (prompt curto)
  • + Cada bot e excelente no seu dominio
  • + Falha isolada, nao derruba o sistema
  • - Router adiciona latencia e complexidade
  • - Estado compartilhado exige infra extra

πŸ’‘ Quando a Simplicidade Ganha

Em 80% dos casos, comece com monolito. Se voce esta lancando um MVP, tem um time pequeno, ou o bot atende um unico dominio com variacao (exemplo: suporte tecnico com FAQ, tickets e troubleshooting), um bot unico bem construido vai ser mais rapido de entregar, mais facil de manter e mais barato de operar. Microsservicos sao a resposta certa para o problema errado se voce nao tem escala.

2

🚧 Limites do Assistente Unico

Todo bot unico tem um ponto de ruptura. Nao e uma questao de "se", e "quando". Entender os sinais de que voce atingiu o limite e o que separa um desenvolvedor que escala de um que fica preso refatorando.

🎯 Conceito Principal

Os LLMs tem limites cognitivos praticos que aparecem muito antes de atingir o limite de tokens. Um system prompt com 50 instrucoes conflitantes produz respostas piores que um com 10 instrucoes claras, mesmo que o modelo tenha capacidade de processar ambos.

Os tres limites criticos sao: saturacao de contexto (informacao demais no prompt), confusao de papel (personalidades conflitantes) e sobrecarga de tools (muitas ferramentas disponΓ­veis). Qualquer um deles degrada a qualidade significativamente.

🧠

Saturacao de Contexto

Mesmo com janelas de 128k ou 200k tokens, modelos perdem acuracia em instrucoes que estao no "meio" do contexto (o famoso problema "lost in the middle"). Um system prompt de 5000 palavras com 30 regras diferentes garante que o modelo vai ignorar ou misturar pelo menos algumas delas.

Sintoma:
O bot "esquece" regras que estao no system prompt.
Respostas ficam genericas em vez de seguir instrucoes.
Qualidade varia conforme o tamanho da conversa.
🎭

Confusao de Papel (Role Confusion)

Quando o system prompt diz "seja empatico e acolhedor para suporte" mas tambem "seja assertivo e direto para vendas", o modelo fica preso entre personalidades. O resultado e um bot que nao e bom em nenhuma das duas coisas. E pior: o usuario percebe a inconsistencia.

Sintoma:
Bot alterna entre tons sem motivo claro.
Respostas de suporte ficam agressivas.
Respostas de vendas ficam excessivamente cautelosas.
πŸ”§

Sobrecarga de Tools

Cada tool no schema consome tokens e adiciona complexidade de decisao. Com 5 tools, o modelo escolhe bem. Com 25 tools, ele comeca a chamar a tool errada, inventar parametros, ou ignorar tools disponiveis. O Claude Agent SDK, por exemplo, funciona melhor com tools focadas por contexto.

Sintoma:
Bot chama tool errada para a tarefa.
Inventa parametros que nao existem.
Ignora tools relevantes, responde com texto puro.

πŸ“Š Metricas de Degradacao

  • β€’ System prompt > 1500 palavras: qualidade comeca a cair perceptivelmente. Acima de 3000, cai drasticamente
  • β€’ Tools > 15: taxa de selecao correta cai de ~95% para ~78% (benchmark interno com Claude Sonnet)
  • β€’ Dominios > 3 distintos: confusao de papel aparece em ~20% das respostas
  • β€’ Conversas > 50 turnos: instrucoes do system prompt sao progressivamente ignoradas

πŸ’‘ Dica Pratica

Meca antes de migrar. Crie um test suite com 50 mensagens reais dos seus usuarios. Rode contra o bot unico. Se a taxa de acerto (resposta correta + tom correto + tool certa) cai abaixo de 85%, voce tem evidencia concreta para justificar a migracao para multibot. Sem dados, voce esta adivinhando.

3

🎯 Vantagens de Multiplos Assistentes

Quando a complexidade justifica, um sistema multibot desbloqueia capacidades que um monolito nunca vai ter. Nao e so sobre qualidade de resposta. E sobre escalabilidade, testabilidade, custo e resiliencia.

🎯 Conceito Principal

Multiplos assistentes seguem o principio da responsabilidade unica (Single Responsibility Principle) aplicado a IA. Cada bot sabe fazer uma coisa extremamente bem. O resultado e que a soma das partes e maior que o todo: um sistema com 4 bots especializados supera um unico bot tentando ser os 4.

As vantagens se dividem em cinco categorias: especializacao (qualidade), paralelismo (velocidade), testabilidade (confiabilidade), escalabilidade independente (custo) e isolamento de falhas (resiliencia).

🎯

Especializacao

System prompts curtos e focados produzem respostas melhores. Um bot de suporte com 200 palavras de instrucao supera um bot generalista com 2000 palavras na mesma tarefa.

Exemplo real: Bot de suporte com Ollama local (custo zero) responde FAQ com 94% de acuracia vs 76% de um bot generalista com Claude.
⚑

Processamento Paralelo

Bots independentes processam mensagens simultaneamente. Enquanto o bot de suporte responde um ticket, o bot de vendas qualifica outro lead. Zero contenco de recursos.

Throughput: 4 bots especialistas = 4x mais mensagens processadas por segundo que 1 bot sequencial.
πŸ§ͺ

Testabilidade

Testar um bot com escopo reduzido e ordens de magnitude mais facil. 50 test cases por dominio cobrem 95% dos cenarios. Para um bot generalista, voce precisaria de 200+ test cases com combinacoes explosivas.

Pipeline: CI/CD por bot. Mudanca no bot de vendas nao afeta o bot de suporte.
πŸ“ˆ

Escalabilidade Independente

Bot de suporte recebe 10x mais mensagens na Black Friday? Escala so ele. Nao precisa escalar vendas, conteudo ou operacoes junto. Cada bot tem seus proprios recursos e limites.

Custo: Paga so pelo que usa. Suporte pode usar modelo barato, vendas pode usar modelo premium.

πŸ›‘οΈ Isolamento de Falhas

No monolito, se a API do OpenAI cai, tudo para. No multibot, se o bot de conteudo (que usa Claude) cai, o bot de suporte (que usa Ollama local) continua funcionando normalmente. Falhas sao contidas no bot afetado.

πŸ”΄
Bot Conteudo
API Claude fora
🟒
Bot Suporte
Ollama local OK
🟒
Bot Vendas
OpenRouter OK

πŸ’‘ Dica Pratica

Misture modelos por funcao para otimizar custo. Suporte com FAQ repetitivo? Ollama local, custo zero. Vendas que precisa ser persuasivo? GPT-4o ou Claude Sonnet. Pesquisa que precisa de raciocinio? DeepSeek-R1 via OpenRouter. Um sistema multibot te da essa flexibilidade. Um monolito te prende num modelo so.

4

πŸ“ Criterios de Decisao

A decisao entre bot unico e multibot nao e tecnica, e de negocio. Depende do seu time, do seu orcamento, da complexidade do produto e das necessidades reais dos usuarios. Use uma matriz de decisao, nao o instinto.

🎯 Conceito Principal

Quatro fatores determinam se voce precisa de 1 bot ou varios: tamanho do time (quem vai manter isso?), complexidade do dominio (quantas funcoes distintas?), orcamento (quanto pode gastar em infra e APIs?) e necessidades do usuario (o usuario percebe diferenca?).

A regra de ouro: comece com 1 bot. Divida quando a dor aparecer. A dor aparece na forma de respostas ruins, usuarios insatisfeitos, system prompt incontrolavel ou impossibilidade de testar adequadamente.

πŸ“Š Matriz de Decisao

Fator Bot Unico Multibot
Time 1-2 devs 3+ devs
Dominios 1-2 relacionados 3+ distintos
Tools Ate 10 15+
Usuarios Ate 500/dia 1000+/dia
Budget $0-500/mes $500+/mes
Personalidades 1 tom consistente Tons conflitantes
SLA Tolerante a downtime 99.9% uptime

πŸ”„ Fluxo de Decisao Rapido

1
O bot atende mais de 2 dominios distintos? Nao = bot unico. Sim = continue.
2
Os dominios precisam de personalidades diferentes? Nao = bot unico com modulos. Sim = continue.
3
Voce tem time pra manter multiplos bots? Nao = bot unico com routing interno. Sim = multibot.
4
A escala exige processamento paralelo? Sim = multibot com message queue. Nao = multibot simples.

πŸ’‘ Dica Pratica

Documente a decisao. Escreva um ADR (Architecture Decision Record) de 1 paragrafo: "Escolhemos [bot unico/multibot] porque [criterio 1], [criterio 2], [criterio 3]. Revisaremos quando [gatilho]." Isso evita debates circulares no futuro e da contexto pra quem entrar no time depois.

5

πŸ”€ Padroes de Migracao

A migracao de bot unico para multibot nunca deve ser big bang. Nao desliga o monolito na sexta e liga o multibot na segunda. A evolucao e gradual, por etapas, com rollback possivel em cada passo.

🎯 Conceito Principal

A migracao segue tres etapas: extrair por dominio (tirar o primeiro especialista do monolito), introduzir router (classificar para onde cada mensagem vai) e compartilhar estado gradualmente (mover contexto e memoria para camada compartilhada).

Cada etapa deve ser reversivel. Se o bot especialista piorar a experiencia, voce redireciona de volta pro monolito sem downtime. Feature flags sao seus melhores amigos nessa transicao.

1

Extrair por Dominio

Identifique o dominio mais independente do seu bot. Aquele que tem menos dependencia de contexto compartilhado. Extraia ele para um processo separado com seu proprio system prompt e tools.

// Antes: tudo num bot
bot.handle('suporte', handleSupport)
bot.handle('vendas', handleSales)
bot.handle('conteudo', handleContent)
// Depois: FAQ extraido para bot separado
const faqBot = new FaqBot({ model: 'ollama/qwen2.5' })
bot.handle('faq', (msg) => faqBot.respond(msg))
bot.handle('suporte', handleSupport) // continua no monolito
bot.handle('vendas', handleSales) // continua no monolito
2

Introduzir Router

Quando voce tem 2+ bots, precisa de um classificador. Comece com keyword matching simples. Evolua para LLM-based quando as keywords nao forem suficientes.

// Router v1: keywords
function route(message) {
const faqKeywords = ['como', 'tutorial', 'ajuda', 'problema']
if (faqKeywords.some(k => message.includes(k))) return 'faq'
return 'general' // fallback pro monolito
}
// Router v2: LLM-based (quando keywords nao bastam)
async function route(message) {
const intent = await ollama.classify(message, ['faq', 'vendas', 'geral'])
return intent.confidence > 0.8 ? intent.label : 'general'
}
3

Compartilhar Estado Gradualmente

O maior desafio do multibot: como os bots compartilham contexto? O usuario comeca no suporte e migra pra vendas. O bot de vendas precisa saber o que aconteceu. Solucoes: banco compartilhado, message passing, session store.

// Session store compartilhada (Redis ou SQLite)
class SharedContext {
async getHistory(userId) { // qualquer bot pode ler
return db.query('SELECT * FROM messages WHERE user_id = ?', userId)
}
async addMessage(userId, botId, message) { // qualquer bot pode escrever
return db.insert('messages', { userId, botId, message, ts: Date.now() })
}
}

🚨 Evite Big Bang

Nunca reescreva tudo de uma vez. A maioria dos fracassos de migracao acontece quando o time tenta fazer a transicao completa num sprint. Extraia um dominio por vez. Valide por 1-2 semanas. So entao extraia o proximo. Se levar 3 meses, tudo bem. Melhor lento e funcionando que rapido e quebrado.

πŸ’‘ Dica Pratica

Use feature flags para cada rota. ROUTE_FAQ_TO_SPECIALIST=true no .env. Se o especialista der problema, basta mudar pra false e a mensagem volta pro monolito. Sem deploy, sem downtime, sem stress.

6

πŸ—οΈ Exercicio: Avaliar seu SaaS

Teoria sem pratica e entretenimento. Nesse exercicio voce vai analisar seu proprio produto (ou um produto ficticio) e documentar a decisao arquitetural com criterios concretos.

πŸ—οΈ

Exercicio: Decisao Arquitetural do Bot

Tempo estimado: 20-30 minutos

1

Mapeie os Dominios

Liste todas as funcoes que seu bot precisa atender. Agrupe por dominio. Identifique quais dominios tem requisitos conflitantes.

// Template
Dominio 1: [nome] - [funcoes] - [tom] - [tools]
Dominio 2: [nome] - [funcoes] - [tom] - [tools]
Conflitos: [dominio X precisa ser Y, dominio Z precisa ser W]
2

Preencha a Matriz de Decisao

Para cada fator da matriz (time, dominios, tools, usuarios, budget, personalidades, SLA), marque onde seu caso se encaixa.

Time: [X devs] β†’ [unico/multi]
Dominios: [X distintos] β†’ [unico/multi]
Tools: [X tools] β†’ [unico/multi]
Score: [X/7 para multi] β†’ decisao
3

Defina o Plano de Migracao (se aplicavel)

Se a decisao for multibot, documente: qual dominio extrair primeiro, como sera o router, qual modelo cada bot usa.

// Plano de migracao
Fase 1: Extrair [dominio] β†’ modelo [X] β†’ prazo [Y]
Fase 2: Router: [keyword/LLM] β†’ fallback: [estrategia]
Fase 3: Estado compartilhado: [Redis/SQLite/outro]
4

Escreva o ADR (Architecture Decision Record)

Documente a decisao em 1 paragrafo. Inclua: decisao, justificativa e gatilho de revisao.

// ADR Template
"Decidimos usar [bot unico/multibot] porque:
1. [criterio principal]
2. [criterio secundario]
3. [restricao relevante]
Revisaremos quando [gatilho: X usuarios, Y dominios, Z tools]."

βœ… Criterios de Sucesso

☐ Dominios mapeados com funcoes e conflitos
☐ Matriz de decisao preenchida (7 fatores)
☐ Decisao documentada com justificativa
☐ Gatilho de revisao definido

🌟 Bonus

Crie um diagrama de arquitetura do seu sistema (pode ser ASCII art, draw.io ou Excalidraw). Mostre: entrada do usuario, router (se multibot), bots, banco de dados, APIs externas. Esse diagrama vai ser a referencia visual pra todo o time.

πŸ“‹ Resumo do Modulo

βœ“
Monolito e microsservicos se aplicam a bots - Mesmos trade-offs de simplicidade vs escalabilidade. 80% dos casos comecam melhor com monolito.
βœ“
O bot unico tem teto: saturacao, confusao de papel, sobrecarga de tools - Meca com test suite de 50 mensagens reais antes de decidir migrar.
βœ“
Multiplos assistentes desbloqueiam especializacao, paralelismo e resiliencia - A soma dos especialistas supera o generalista quando a complexidade justifica.
βœ“
Use matriz de decisao com 7 fatores concretos - Time, dominios, tools, usuarios, budget, personalidades e SLA.
βœ“
Migracao gradual: extrair dominio, introduzir router, compartilhar estado - Nunca big bang. Feature flags em cada rota. Rollback sempre possivel.
βœ“
Documente a decisao com ADR - Decisao, justificativa e gatilho de revisao num paragrafo.