O que é e por que usar
RAG, ou Retrieval-Augmented Generation, é uma arquitetura que combina recuperação de informação com modelos generativos de linguagem. Em termos práticos, você alimenta o sistema com documentos específicos (manuais, contratos, FAQs, transcrições de reuniões) e, quando faz uma pergunta, ele primeiro busca os trechos mais relevantes nessa base de conhecimento para, só então, gerar uma resposta precisa e contextualizada usando um modelo como o GPT-4 ou Claude.
Por que isso é crucial para automação? Modelos de IA generativos puros têm conhecimento limitado ao seu treinamento e podem “alucinar” informações. Um sistema de RAG garante que as respostas sejam fundamentadas em suas fontes internas, aumentando a precisão e a confiabilidade. Para empresas, isso significa poder criar um assistente interno que realmente conhece os processos da companhia, um suporte ao cliente que acessa instantaneamente manuais técnicos, ou um analista que resume relatórios complexos baseando-se apenas nos documentos fornecidos.
Implementar RAG manualmente envolve pipelines complexos de ingestão, vetorização e consulta. O n8n simplifica drasticamente esse processo, permitindo que você orquestre cada etapa – do carregamento do PDF à resposta final no Slack – em um único fluxo visual, integrado ao resto da sua stack operacional.
Pré-requisitos
- Acesso ao n8n: Instância local ou n8n.cloud (versões 1.0+ recomendadas).
- Credenciais de um provedor de IA e Embeddings: Por exemplo, uma API Key da OpenAI (para GPT e embeddings) ou da Anthropic (Claude). Alternativas open-source como modelos locais são possíveis, mas exigem configuração adicional.
- Uma base de conhecimento digitalizada: Seus documentos especializados em formatos como PDF, TXT, DOCX, MD, ou conteúdo estruturado em bancos de dados ou APIs (ex: artigos do Confluence, tickets do Zendesk).
- Um banco de dados vetorial (opcional, mas altamente recomendado para produção): O n8n tem um nó de “Memória” embutido, mas para bases maiores e persistentes, considere Pinecone, Weaviate, Qdrant ou PostgreSQL com a extensão pgvector.
- Compreensão básica dos conceitos: Saber o que são embeddings vetoriais, chunks (pedaços de texto) e similaridade de cosseno ajudará no debug.
Exemplo Prático: Assistente de Suporte Técnico Baseado em Manuais de Produto
Cenário concreto: Imagine que sua equipe de suporte técnico lida com 50+ consultas por dia sobre um software complexo. As respostas estão espalhadas em 3 manuais PDF (total de 300 páginas), uma wiki interna desatualizada e uma série de emails de engenharia. Novos integrantes da equipe levam semanas para se familiarizar com todo o material, e mesmo os veteranos perdem tempo buscando informações.
O que será automatizado: Vamos construir um fluxo n8n que, ao receber uma pergunta via webhook (por exemplo, de um comando no Slack), irá: 1) Buscar nos manuais os trechos mais relevantes; 2) Combinar esses trechos com a pergunta do usuário; 3) Usar um LLM para gerar uma resposta precisa, citando a fonte (página do manual).
Resultado esperado: Um canal no Slack onde qualquer agente de suporte pode digitar /perguntar "Como configurar a sincronização em lote?" e receber em segundos uma resposta clara, com os passos extraídos diretamente do manual oficial, incluindo referências. Isso reduz o tempo de resolução de tickets em até 40% e padroniza a qualidade das respostas.

Configuração Passo a Passo
Vamos construir um fluxo completo em duas partes: Ingestão (preparação da base) e Consulta (sistema de perguntas e respostas).
Parte 1: Fluxo de Ingestão e Indexação do Conhecimento
- Nó “Read Binary Files” (ou HTTP Request):Use este nó para carregar seus documentos. Aponte para a pasta local com os PDFs ou configure um nó HTTP Request para buscar documentos de uma URL/API. A saída será um binário.
- Nó “Extract from File”:Conecte o nó anterior aqui. Configure para extrair texto dos arquivos PDF. Este nó converterá o binário em texto puro, pronto para processamento.
- Nó “Split In Batches” ou “Code”:Modelos de embedding têm limites de tokens. Precisamos dividir o texto longo em “chunks” (pedaços) menores. Use o nó “Code” (modo Python) ou “Split Out” para criar chunks de ~500 palavras com uma pequena sobreposição (para manter o contexto).
# Exemplo no nó Code para criar chunks items = $input.all() text = items[0].json.text chunk_size = 2000 overlap = 200 chunks = [] for i in range(0, len(text), chunk_size - overlap): chunk = text[i:i + chunk_size] chunks.append({"json": {"chunk_text": chunk, "source": items[0].json.fileName}}) return chunks; - Nó “OpenAI” ou “Embeddings”:Selecione a operação “Create Embedding”. Conecte-se à sua conta OpenAI. O campo de entrada será o texto do “chunk” gerado no passo anterior. Este nó transformará cada pedaço de texto em um vetor numérico (embedding).
- Nó de Armazenamento Vetorial:Aqui você tem opções:
- Memória do n8n (nó “Memory”): Simples para testes. Armazena embeddings na RAM da instância n8n (não persistente entre reinícios).
- Banco de dados externo: Use nós como “Pinecone”, “Weaviate”, ou um “PostgreSQL” com configuração para pgvector. Você salvará o embedding vetorial, o texto original do chunk e metadados (ex: nome do arquivo fonte, número da página).
Configure para salvar o vetor (saída do nó OpenAI) e os metadados associados.
Este fluxo de ingestão pode ser acionado por schedule (para atualizar a base periodicamente) ou manualmente ao adicionar novos documentos.
Parte 2: Fluxo de Consulta (RAG em Ação)
- Nó “Webhook” ou “Slack Trigger”:

Configure um webhook para receber a pergunta do usuário. Se integrado ao Slack, use o nó “Slack Trigger” para capturar comandos slash ou mensagens em um canal. - Nó “OpenAI” (Embedding):Repita o processo de criação de embedding, mas agora para a pergunta do usuário. Use a mesma configuração do fluxo de ingestão para garantir compatibilidade.
- Nó de Busca Vetorial:No mesmo banco de dados usado na ingestão, execute uma busca por similaridade. Passe o embedding da pergunta e solicite os 3-5 “chunks” de texto com maior similaridade de cossino. O nó retornará os textos e metadados dos documentos mais relevantes.
- Nó “Code” ou “Template”:Construa o contexto para o LLM. Junte os textos recuperados e formate um “prompt” instrucional.
// Exemplo de formatação no nó Code const question = $input.first().json.question; const retrievedDocs = $input.first().json.retrievedTexts; // Array de chunks const context = retrievedDocs.join("\n\n---\n\n"); const prompt = `Com base EXCLUSIVAMENTE nos trechos de manual técnico fornecidos abaixo, responda à pergunta do usuário. Se a resposta não estiver contida no contexto, diga "Não tenho informações suficientes nos manuais fornecidos". CONTEXTO: ${context} PERGUNTA: ${question} RESPOSTA (seja direto e cite a fonte quando possível):`; return [{json: { prompt: prompt, question: question }}]; - Nó “OpenAI” ou “Chat Model”:Use a operação “Chat” (ex: gpt-4-turbo-preview). Passe o prompt construído. Em parâmetros avançados, você pode ajustar temperatura (baixa, como 0.1, para respostas mais factuais) e max tokens.
- Nó “Response” ou “Slack”:Finalize enviando a resposta gerada pelo LLM de volta ao usuário. Para webhook, use o nó “Respond to Webhook”. Para Slack, use “Slack > Send Message” para postar a resposta no canal ou thread.
Dicas e Variações
- Metadados Ricos: Ao indexar, inclua metadados como `document_type`, `product_version`, `page_number`. Isso permite filtrar buscas (“busque apenas na documentação da versão 2.0”).
- Pré-processamento do Texto: Use um nó “Code” para limpar textos extraídos (remover cabeçalhos/pés de página repetitivos, normalizar espaços) antes de criar chunks, melhorando a qualidade dos embeddings.
- RAG Híbrido: Combine busca vetorial com busca por palavras-chave (BM25). No n8n, você pode buscar no banco vetorial E fazer uma query de texto no PostgreSQL comum, depois mesclar os resultados.
- Cache de Embeddings: Para documentos estáticos, gere os embeddings uma vez e salve-os. Crie um fluxo separado que lê embeddings pré-computados de um arquivo JSON, pulando a chamada à API da OpenAI e reduzindo custos/latência.
- Log e Avaliação: Adicione nós para registrar todas as perguntas, trechos recuperados e respostas em uma planilha ou banco. Isso cria um dataset para avaliar e melhorar a qualidade do seu RAG.
Erros Comuns e Como Evitá-los
- Chunks Mal Dimensionados: Chunks muito grandes perdem foco; muito pequenos perdem contexto. Solução: Teste tamanhos entre 500 e 1500 caracteres. Use sobreposição de 10-15%.
- Embedding Inconsistente: Usar modelos diferentes para indexar e consultar. Solução: Use exatamente o mesmo modelo (ex: `text-embedding-3-small`) e configurações em ambos os fluxos.
- Prompt Fraco: O LLM “inventa” informações fora do contexto. Solução: Reforce no prompt instruções como “Responda APENAS com base no contexto fornecido” e inclua uma cláusula de fallback clara.
- Esquecimento de Metadados: A resposta é precisa, mas o usuário não sabe de onde veio. Solução: Inclua instrução no prompt para citar a fonte (ex: “Baseado no Manual de Instalação, página 12”) e passe os metadados (nome do arquivo) para o nó final de resposta.
- Custo Descontrolado com APIs: Reindexar documentos completos a cada trigger. Solução: Implemente uma verificação de hash/checksum: só gere novos embeddings se o documento foi modificado.
Próximos Passos
Seu sistema de RAG básico está funcionando. Agora, para torná-lo robusto e pronto para produção:
- Migre para um Banco Vetorial Dedicado: Configure um contêiner com Qdrant ou uma conta no Pinecone. Substitua o nó de memória do n8n. Isso garante persistência, escalabilidade e performance em buscas.
- Implemente um Painel de Monitoramento: Crie um dashboard simples no n8n (usando nós “Function” e “Google Sheets” ou “PostgreSQL”) para rastrear métricas como: número de consultas, tempo de resposta, taxa de “não sei” do bot.
- Adicione Múltiplas Fontes de Conhecimento: Expanda seu fluxo de ingestão para consumir não apenas PDFs, mas também tickets encerrados do Zendesk (via API), páginas selecionadas do Confluence, e transcrições de treinamentos em vídeo (usando Whisper via API).
- Teste com Casos de Borda: Prepare uma lista de 20-30 perguntas críticas e ambíguas. Execute-as periodicamente no fluxo para garantir que a qualidade das respostas se mantém ou melhora com ajustes nos chunks e no prompt.
Comece com um documento crítico e uma pergunta simples. Ajuste o pipeline até obter uma resposta perfeita. A partir desse núcleo, escalar para uma base de conhecimento corporativa completa torna-se uma questão de engenharia de fluxo, não de magia.


Comments are closed