Há uma tentação contemporânea de tratar “RAG” como uma palavra mágica.
Coloca-se um PDF num balde, conecta-se um modelo de linguagem, e — supostamente — nasce inteligência contextual.
Na prática, o que nasce é outra coisa: uma cadeia de decisões técnicas.
E cada decisão altera o que você chama de “resposta correta”.
Este texto é um tutorial completo para montar um RAG (Retrieval-Augmented Generation) ou um CAG (Context-Augmented Generation) usando o n8n.
Não é um guia performático.
É um guia reproduzível.
1. Antes de começar: RAG vs CAG
RAG — Retrieval-Augmented Generation
Você:
- Divide documentos em chunks
- Gera embeddings
- Armazena em um banco vetorial
- Recupera os vetores mais próximos da pergunta
- Injeta no prompt
É estatística vetorial aplicada à linguagem.
CAG — Context-Augmented Generation
Você:
- Não usa busca vetorial.
- Injeta contexto estruturado (SQL, APIs, dados vivos).
- A resposta depende de estado atual do sistema.
RAG é memória indexada.
CAG é contexto vivo.
Você pode (e talvez deva) usar ambos.
2. Arquitetura Geral no n8n
Um fluxo mínimo de RAG no n8n tem dois workflows:
Workflow A — Ingestão
Documento → Chunk → Embedding → Vector DB
Workflow B — Pergunta
Pergunta → Embedding → Busca vetorial → Prompt → LLM → Resposta
3. Stack Recomendada (Reproduzível)
Você pode usar:
- n8n (self-hosted ou cloud)
- Banco vetorial:
- Supabase (pgvector)
- Pinecone
- Qdrant
- Weaviate
- LLM:
- OpenAI
- Anthropic
- Groq
- Embeddings:
- text-embedding-3-large (OpenAI)
- alternatives open-source
4. Workflow 1 — Ingestão de Documentos
Passo 1 — Entrada do Documento
Node:
- Read Binary File
ou - Webhook (upload)
Passo 2 — Extração de Texto
Use:
- PDF Extract
ou - Function Node com pdf-parse
Passo 3 — Chunking
Chunking é onde a maioria erra.
No Function Node:
const text = $json.text;
const chunkSize = 800;
const overlap = 150;
let chunks = [];
for (let i = 0; i < text.length; i += chunkSize - overlap) {
chunks.push({
content: text.slice(i, i + chunkSize)
});
}
return chunks.map(c => ({ json: c }));
Premissas:
- 800 caracteres ~ 150-200 tokens
- Overlap evita perda de contexto
Limitação:
Chunk mal definido gera busca ruim.
Passo 4 — Gerar Embeddings
Node:
- OpenAI → Create Embedding
Entrada:
{{$json.content}}
Saída:
Vetor numérico (ex: 1536 dimensões)
Passo 5 — Armazenar no Banco Vetorial
Exemplo usando Supabase (pgvector):
Tabela:
CREATE TABLE documentos (
id bigserial PRIMARY KEY,
content text,
embedding vector(1536)
);
Inserção via node PostgreSQL:
INSERT INTO documentos (content, embedding)
VALUES ($1, $2);
5. Workflow 2 — Pergunta e Resposta
Agora o fluxo interessante.
Passo 1 — Receber Pergunta
Node:
- Webhook
ou - Telegram
ou - HTTP
Passo 2 — Embedding da Pergunta
Mesmo modelo usado na ingestão.
Consistência é obrigatória.
Passo 3 — Busca Vetorial
Query exemplo (pgvector):
SELECT content
FROM documentos
ORDER BY embedding <-> $1
LIMIT 5;
Isso retorna os 5 trechos mais próximos.
Passo 4 — Construção do Prompt
Aqui mora a diferença entre “funciona” e “parece inteligente”.
Function Node:
const context = items.map(i => i.json.content).join("nn");
return [{
json: {
prompt: `
Você deve responder APENAS com base no contexto abaixo.
Contexto:
${context}
Pergunta:
{{$json.question}}
Se não houver informação suficiente, diga que não sabe.
`
}
}];
Passo 5 — Chamada ao LLM
Node:
- OpenAI Chat
ou - Anthropic
Entrada:
{{$json.prompt}}
Saída:
Resposta contextualizada.
6. CAG no n8n (quando RAG não basta)
Imagine que você quer responder:
“Qual foi o faturamento ontem?”
Isso não está num PDF.
Está num banco.
Fluxo CAG:
Pergunta → Parser → SQL → Resultado → Prompt → LLM
Você pode:
- Usar um LLM para gerar SQL
- Executar SQL
- Passar resultado como contexto
Arquitetura:
Pergunta
→ Classificador (é pergunta de base?)
→ Se sim: roda SQL
→ Injeta no prompt
Isso é CAG.
7. Problemas Comuns
1. Chunk grande demais
→ embedding diluído
2. Pouco overlap
→ contexto quebrado
3. Misturar modelo de embedding
→ incompatibilidade vetorial
4. Não limitar temperatura
→ alucinação mesmo com contexto
8. Métricas que você deveria medir
Pouca gente mede. Deveria.
- Recall (se o trecho correto está nos top 5)
- Tempo de resposta
- Custo por query
- Taxa de “não sei”
Sem métrica, é só teatro.
9. Arquitetura Final Recomendada
Se for projeto sério:
- Banco vetorial dedicado
- Logs de consultas
- Versionamento de embeddings
- Avaliação automática de respostas
10. Conclusão
RAG não é inteligência.
É organização estatística da memória.
CAG não é magia.
É integração de contexto.
O n8n é apenas o orquestrador — um palco silencioso onde os nós executam seu papel sem aplauso.
O que define qualidade não é o modelo.
É a disciplina na construção do pipeline.
E talvez o ponto mais importante:
RAG ruim parece impressionante nas primeiras cinco perguntas.
RAG bom continua funcionando na pergunta cinquenta.