Por que seu chatbot inventa respostas (e como parar)?
Você subiu um PDF no chatbot, configurou o RAG e o agente começou a responder. Problema: metade das respostas são precisas, a outra metade são alucinações confiantes. O cliente pergunta o preço do plano Enterprise e o bot inventa "R$ 497/mês" quando na verdade é R$ 997. A culpa não é do LLM. É da arquitetura de RAG.
RAG (Retrieval-Augmented Generation) é a técnica que alimenta o LLM com dados relevantes antes de gerar a resposta. Mas a qualidade do RAG depende 100% de como você implementa cada camada: chunking, embedding, retrieval e geração. Segundo a ChatRAG, a escolha do modelo de embedding impacta mais a qualidade do que o tamanho do chunk ou a quantidade de resultados.
Estes são os 5 padrões de arquitetura que funcionam em produção para agentes no WhatsApp.
Padrão 1 - Chunking semântico (não por tamanho fixo)
O erro mais comum: dividir documentos em chunks de 500 tokens de forma mecânica, cortando parágrafos no meio. O resultado são chunks que misturam dois assuntos, e o retrieval traz contexto irrelevante.
Como fazer certo
- Quebre por fronteiras naturais: parágrafos, seções (h2/h3), quebras de tópico
- Tamanho ideal: comece com 250 tokens (~1.000 caracteres), ajuste com testes
- Overlap de 10-20%: repita as últimas 2-3 frases do chunk anterior no próximo, evitando cortar informação importante na fronteira
Em 2026, o estado da arte é context-aware partitioning: modelos analisam embeddings de frases adjacentes para decidir onde cortar, conforme documentado pela Braincuber. Mas para a maioria dos chatbots, chunking por parágrafo com overlap resolve 90% dos problemas.
Exemplo prático
// Chunking por seções de um documento Markdown
function chunkBySection(markdown) {
const sections = markdown.split(/(?=^## )/gm);
return sections.map(section => ({
content: section.trim(),
tokens: estimateTokens(section),
metadata: {
heading: section.match(/^## (.+)/)?.[1] || 'intro',
source: 'catalogo-produto.md'
}
}));
}
Padrão 2 - Retrieval híbrido (semântico + keyword)
Busca puramente semântica (por embedding) é boa para perguntas conceituais ("como funciona o agendamento?"). Mas falha em perguntas com termos específicos ("qual o código do plano PRO-300?"). A busca por keyword (BM25) pega exatamente essas queries.
Dado-chave: As melhores implementações de RAG em 2026 combinam busca semântica e keyword, segundo AetherLink. A combinação reduz casos de "documento relevante não encontrado" em até 40%.
Como implementar
// Retrieval híbrido: semântico + keyword
async function hybridRetrieve(query, topK = 5) {
const [semanticResults, keywordResults] = await Promise.all([
vectorStore.similaritySearch(query, topK),
fullTextSearch(query, topK)
]);
// Merge e deduplica, priorizando docs que aparecem em ambos
return mergeAndRank(semanticResults, keywordResults);
}
Ferramentas como Supabase (pgvector + full-text search) e Elasticsearch oferecem ambos os métodos na mesma query.
Padrão 3 - Parent-child chunking
O problema do chunking granular: chunks pequenos são ótimos para precisão no retrieval, mas ruins para contexto na geração. O LLM recebe um trecho de 200 tokens e não entende o contexto geral.
A solução é o padrão parent-child:
- Child chunks (pequenos): usados para busca (alta precisão)
- Parent chunks (grandes): enviados ao LLM quando um child faz match (contexto rico)
Exemplo: o child chunk contém "Plano Enterprise: R$ 997/mês". O match é preciso. Mas o parent chunk que vai pro LLM contém toda a seção de pricing com os 3 planos, limites e features. O agente responde com contexto completo.
Quando usar cada tipo
FAQ com perguntas diretas → Flat (chunk único). Cada Q&A é autocontida.
Documentação técnica → Parent-child. Contexto da seção importa para a resposta.
Catálogo de produtos → Parent-child. Preço isolado sem features gera confusão.
Políticas e termos → Parent-child. Cláusulas dependem do contexto geral.
Padrão 4 - Metadata filtering (pré-filtragem por contexto)
Se seu agente atende múltiplos produtos, departamentos ou idiomas, buscar em toda a base a cada query é desperdício. Metadata filtering restringe a busca antes do retrieval semântico.
// Filtrar por departamento antes de buscar
const results = await vectorStore.similaritySearch(query, 5, {
filter: {
department: conversation.department, // "vendas" ou "suporte"
language: "pt-BR",
product: conversation.product // "plano-starter"
}
});
Benefícios: retrieval mais rápido, resultados mais relevantes, menos tokens consumidos (chunks irrelevantes não entram no contexto).
Padrão 5 - Guardrails de alucinação
Mesmo com RAG bem implementado, o LLM pode alucinar. O último padrão é uma camada de proteção que detecta e bloqueia respostas inventadas.
3 guardrails que funcionam
Grounding check: instrua o LLM a citar qual chunk usou na resposta. Se não conseguir citar, está alucinando.
Confidence threshold: se o similarity score dos chunks recuperados for baixo (<0,7), o agente responde "não tenho essa informação" em vez de inventar.
Forbidden patterns: regex ou regras que bloqueiam respostas com preços, prazos ou garantias que não estão na base.
// Guardrail: bloquear resposta se confiança baixa
const results = await retrieve(query);
const maxScore = Math.max(...results.map(r => r.score));
if (maxScore < 0.7) {
return "Não encontrei essa informação na nossa documentação. "
+ "Vou encaminhar para o time te responder.";
}
// Se confiança alta, enviar para o LLM com os chunks
return await generateResponse(query, results);
Como a Verboo implementa RAG?
Na Verboo, você não precisa implementar nenhum desses padrões manualmente. A plataforma resolve cada camada:
- Chunking: automático por tipo de documento (PDF, Markdown, URL), com parent-child para documentação técnica
- Embedding: modelos otimizados para português e multi-idioma
- Retrieval: híbrido (semântico + keyword) com metadata filtering por agente
- Guardrails: confidence threshold configurável, grounding nativo
Você sobe o arquivo. A Verboo cuida da arquitetura. 730 agentes em produção, +168 mil conversas, latência abaixo de 500ms.
+168 mil conversas processadas com menos de 500ms de latência. Conheça a plataforma.



