Raphael Serafim· Publicado em 16 de setembro de 2026· 9 min de leitura

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.

Ver como Markdown

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 contexto

1. 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.

javascript
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).

javascript
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:

javascript
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átis

Perguntas 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