RAG no WhatsApp: como dar à IA uma base de conhecimento própria
Como montar RAG para um agente de IA no WhatsApp: indexar seus documentos, buscar o trecho certo antes de responder e não deixar o modelo inventar.
RAG é buscar o trecho certo da sua própria base de conhecimento antes de pedir ao modelo para responder, e colocar esse trecho no prompt como contexto. Sem isso, um agente de IA no WhatsApp responde só com o que aprendeu no treinamento — que não inclui seu catálogo, sua política de troca ou o preço que você atualizou ontem. Com RAG, a resposta vem do que está na sua base, não da memória do modelo.
O problema que RAG resolve
Um chatbot de IA simples, como o exemplo com a API da OpenAI, já responde bem perguntas gerais. O problema aparece quando o cliente pergunta algo específico do seu negócio: "qual o prazo de entrega para Cuiabá?", "vocês têm garantia estendida?", "qual o horário de funcionamento da loja da Zona Sul?".
O modelo não sabe nada disso — e um modelo de linguagem, quando não sabe, tende a inventar uma resposta plausível em vez de admitir que não sabe. Isso é o oposto do que se quer em atendimento.
A arquitetura, em três peças
Pergunta do cliente → Busca na base → Trecho relevante → Modelo responde com esse trecho como contexto1. Indexar a base. Seus documentos (FAQ, políticas, catálogo, manual) são divididos em trechos menores (chunks) e transformados em embeddings — uma representação numérica que captura o significado do texto, não só as palavras.
import OpenAI from "openai";
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
async function indexar(documentos) {
const chunks = documentos.flatMap(dividirEmChunks); // ~300-500 tokens por chunk
for (const chunk of chunks) {
const { data } = await openai.embeddings.create({
model: "text-embedding-3-small",
input: chunk.texto,
});
await salvarNoBanco({ texto: chunk.texto, embedding: data[0].embedding });
}
}2. Buscar antes de responder. A cada pergunta, você gera o embedding da pergunta e busca os chunks mais próximos (por similaridade de cosseno, seja em banco vetorial ou em memória para bases pequenas).
async function buscarContexto(pergunta, topK = 3) {
const { data } = await openai.embeddings.create({
model: "text-embedding-3-small",
input: pergunta,
});
const resultados = await buscarSimilares(data[0].embedding, topK);
return resultados.map(r => r.texto).join("\n\n---\n\n");
}3. Responder com o contexto. O trecho recuperado entra no prompt, e o system prompt deixa explícito que a resposta deve vir dali:
const SYSTEM = `Você é o atendente da Loja Exemplo no WhatsApp.
Responda SOMENTE com base no CONTEXTO abaixo. Se a resposta não
estiver no contexto, responda exatamente [SEM_CONTEXTO] e nada mais.
Nunca invente prazo, preço ou política que não esteja no contexto.`;
async function responderComRAG(pergunta) {
const contexto = await buscarContexto(pergunta);
const r = await openai.chat.completions.create({
model: "gpt-4o-mini",
messages: [
{ role: "system", content: SYSTEM },
{ role: "user", content: `CONTEXTO:\n${contexto}\n\nPERGUNTA: ${pergunta}` },
],
temperature: 0.2,
});
return r.choices[0].message.content.trim();
}O restante da integração — receber a mensagem pelo webhook e devolver a resposta pela API — é o mesmo de qualquer chatbot de IA no WhatsApp; RAG muda só o que acontece entre receber a pergunta e chamar o modelo.
Onde a maioria erra
Chunk grande demais ou pequeno demais. Um trecho de um documento inteiro dilui o sinal da busca; um trecho de uma frase perde contexto. Algo entre 300 e 500 tokens, com uma pequena sobreposição entre chunks vizinhos, costuma equilibrar bem.
Não medir a busca separado da resposta. Se a resposta final está ruim, o instinto é ajustar o prompt — mas o problema pode estar na busca trazendo o trecho errado. Vale logar qual chunk foi recuperado para cada pergunta e revisar isso separadamente.
Base desatualizada. RAG resolve o problema de "o modelo não sabe", não o de "a base está errada". Se o catálogo indexado é de três meses atrás, a IA responde de forma confiante e errada — o oposto do que se buscava ao adicionar RAG.
Sem saída para "não sei". Mesmo com RAG, uma pergunta fora da base pode acontecer. O marcador [SEM_CONTEXTO] no prompt acima existe para isso, e deve ser tratado no código encaminhando para um atendente — a lógica de quando isso deve acontecer está em quando a IA deve parar de responder no WhatsApp.
Banco vetorial: quando vale a pena
Para uma base pequena — um FAQ de 50 perguntas, uma política de troca de duas páginas — comparar embeddings em memória (um array com similaridade de cosseno calculada na hora) funciona e evita infraestrutura extra. A partir de algumas centenas de chunks, um banco vetorial dedicado (Pinecone, Qdrant, ou pgvector se você já usa Postgres) compensa pela velocidade de busca e pela facilidade de reindexar quando a base muda.
Conclusão
RAG transforma um agente de IA de "responde bem sobre assuntos gerais" para "responde certo sobre o seu negócio específico" — e o ganho vem inteiro da qualidade da busca, não de um prompt mais elaborado. Comece pequeno: indexe seu FAQ atual, meça se a busca traz o trecho certo, e só depois se preocupe com banco vetorial e chunking sofisticado. Se o próximo passo for o agente também agir — consultar pedido, agendar, criar ticket — isso é function calling, uma peça diferente que se soma a esta.
Pronto para automatizar seu WhatsApp?
Crie sua conta gratuita e comece a enviar mensagens pela API em minutos.
Começar grátisPerguntas frequentes
O que é RAG e por que usar num bot de WhatsApp?+
RAG (Retrieval-Augmented Generation) é buscar o trecho relevante da sua própria base — documentos, políticas, catálogo — antes de pedir ao modelo para responder, e incluir esse trecho no prompt. Sem isso, o modelo responde só do que aprendeu no treinamento, que não conhece seu produto nem seus preços atuais, e tende a inventar quando não sabe.
RAG é diferente de fine-tuning?+
Sim, e resolvem problemas diferentes. Fine-tuning ajusta o comportamento e o estilo do modelo, mas o conhecimento fica congelado no momento do treino. RAG busca informação atualizada a cada pergunta — se você mudar um preço no catálogo hoje, o bot responde certo na próxima pergunta, sem re-treinar nada.
Preciso de um banco vetorial para fazer RAG?+
Para poucas dezenas de documentos, uma busca por palavra-chave ou uma comparação de embeddings em memória já funciona. Um banco vetorial (Pinecone, pgvector, Qdrant) compensa quando a base cresce para centenas ou milhares de trechos e a busca por similaridade semântica passa a superar a busca por palavra.
Como evito que a IA responda com informação de fora da base?+
No system prompt, instrua o modelo a responder apenas com base no contexto fornecido e a admitir quando a base não cobre a pergunta — com um marcador que seu código trata encaminhando para um humano. Sem essa instrução explícita, o modelo preenche a lacuna com o que aprendeu no treinamento, que pode estar errado ou desatualizado para o seu caso.
RAG resolve tudo sozinho?+
Não. Se a busca trouxer o trecho errado, o modelo responde bem em cima de um contexto ruim — o resultado final é tão bom quanto a busca. Vale medir a qualidade da recuperação separadamente da qualidade da resposta, porque um problema de busca parece um problema de IA, mas se resolve de outro jeito.
Continue lendo
Automatizar grupos de WhatsApp pela API: guia completo
Como automatizar grupos de WhatsApp pela API: criar, adicionar participante, moderar entrada e enviar aviso automático, com exemplos práticos em cURL.
Catálogo com carrinho no WhatsApp: como vender sem sair da conversa via API
Veja como popular o catálogo de produtos via API do WhatsApp e montar um fluxo de carrinho nativo, sem redirecionar o cliente pra fora da conversa.
Checklist de compliance para WhatsApp API em 2026
Checklist prático de compliance para WhatsApp API: opt-in, LGPD, Quality Rating e política de template — o que auditar antes de escalar o envio em 2026.