Anatomia do pipeline RAG

TL;DR

Pipeline RAG tem duas fases: indexing (offline, uma vez por documento) e query (online, cada pergunta). Indexing: parse → chunk → embed → store. Query: rewrite → embed → retrieve → rerank → generate. Cada passo é uma oportunidade de melhorar OU destruir qualidade. Saber onde cada peça encaixa é pré-requisito para debugar quando a resposta vier ruim.

As duas fases

INDEXING (offline, uma vez)        QUERY (online, cada pergunta)
═══════════════════════════         ════════════════════════════
1. Parse                            5. Rewrite
2. Chunk                            6. Embed (query)
3. Embed (chunks)                   7. Retrieve
4. Store                            8. Rerank
                                    9. Generate

Fase Indexing (offline)

Roda uma vez por documento (e quando ele muda).

1. Parse — texto estruturado

PDF / HTML / DOCX / MD → texto + metadata
FormatoTool
PDFpypdf, unstructured, marker, Docling
HTMLBeautifulSoup, trafilatura
DOCXpython-docx, unstructured
Markdownmistletoe, markdown-it-py

Parse ruim destrói RAG

PDF mal-parseado vira texto sem estrutura — chunks misturam tabelas com prosa, headers somem, citações se perdem. Investigue o output do parse antes de seguir.

2. Chunk — partir em pedaços

Texto → pedaços de N tokens com overlap. Crítico para qualidade. Detalhes em 04 - Chunking — onde 50% da qualidade vive.

3. Embed — texto vira vetor

Cada chunk → vetor denso (256-3072 dimensões). Detalhes em 03 - Embeddings — representação semântica.

4. Store — vector database

Salvar (chunk_text, embedding, metadata) em vector DB. Opções em 05 - Vector databases — pgvector, Pinecone, Qdrant.

Fase Query (online)

Roda a cada pergunta. Latência total tipica: 200ms-2s.

5. Rewrite — query → query melhor (opcional)

"como faço para configurar X?" → "configurar X documentação"

Técnicas:

  • HyDE (Hypothetical Document Embeddings) — gera resposta hipotética, usa como query
  • Query expansion — múltiplas queries do mesmo conceito
  • Subquestion decomposition — pergunta complexa → várias simples

Detalhes em 06 - Retrieval — hybrid search, BM25, query rewriting.

6. Embed (query)

Mesmo modelo do indexing. Crucial que seja o mesmo — embeddings de modelos diferentes não são comparáveis.

-- Vector search com pgvector
SELECT chunk, metadata
FROM chunks
ORDER BY embedding <=> query_embedding
LIMIT 50;

Em produção: hybrid retrieval (BM25 + vector). Pure vector vence em ~70% dos casos; hybrid vence em ~95%.

8. Rerank — refinar top-k

Top-50 do retrieve → top-5 que vão pro prompt.

Modelos: Cohere Rerank, Voyage Rerank, BGE Reranker. Cross-encoders são mais precisos que bi-encoders (embeddings).

Detalhes em 07 - Reranking — Cohere, Voyage, cross-encoders.

9. Generate — LLM com contexto

Prompt típico:

Você é um assistente que responde baseado nos trechos abaixo.

Trechos:
{chunk1}
{chunk2}
{chunk3}

Pergunta: {query}

Regras:
- Cite o trecho usado em cada afirmação [1], [2], etc.
- Se trechos não cobrem a pergunta, diga "não sei".

Detalhes em 08 - Generation — passar contexto ao LLM com citação.

Onde cada problema vive

graph TB
    P1["Parse ruim"] --> S1["Texto desestruturado"]
    P2["Chunk grande demais"] --> S2["Atenção dilui"]
    P3["Chunk pequeno demais"] --> S3["Sem contexto suficiente"]
    P4["Embedding ruim"] --> S4["Top-k irrelevante"]
    P5["Pure vector sem BM25"] --> S5["Perde matches exatos"]
    P6["Sem rerank"] --> S6["Top-k cheio de noise"]
    P7["Prompt sem regras"] --> S7["LLM ignora contexto"]

Eval separa retrieval de generation (09 - Evaluation de RAG) — sem isso, você não sabe onde está o problema.

Latência típica

StepLatência
Parse + chunk + embed (indexing)offline, varia
Query rewrite100-500ms (LLM call)
Embed query20-50ms
Retrieve (vector + BM25)50-200ms
Rerank top-50100-300ms
Generate500ms-3s (depende do modelo)
Total online800ms-4s

Custo típico (1000 queries/dia)

ComponenteCusto mensal
Embeddings (indexing one-time)$5-50
Embeddings (query)$1-5/mês
Vector DB$0-50 (pgvector free)
Reranker$5-30
LLM generation$10-100 (depende do modelo)
Total$20-235/mês

Métricas para monitorar

MétricaAlvo
Retrieval precision (top-5)>70%
Retrieval recall>85%
Faithfulness (resposta vs contexto)>90%
Latência total p95<3s
Cost por query<$0.01

Anti-patterns

  • Pular passo de rerank — top-k vira ruidoso
  • Skipping query rewrite — pergunta do usuário ≠ query ótima
  • Mesmo modelo de embedding em queries de domínio diferente — bias
  • Sem metadata em chunks — não consegue filtrar (data, tipo, etc.)
  • Eval só de generation — não detecta retrieval ruim

Veja também

Referências

  • AnthropicContextual Retrieval (2024)
  • PineconeLearn RAG (2025)
  • LlamaIndexRAG architecture documentation (2026)