RAG Híbrido na Prática: Semântica + Keyword

Como combinar busca vetorial e keyword search para recuperar contexto técnico com precisão em pipelines RAG de produção.

Renan Moraes

RAG Híbrido na Prática: Semântica + Keyword

Retrieval-Augmented Generation (RAG) deixa de ser "só embedding" quando você precisa de precisão em termos técnicos. A busca puramente semântica captura paráfrases, mas pode perder siglas, nomes de APIs e conceitos raros. A solução pragmática é fusão híbrida: candidatos de cosine similarity (HNSW) + candidatos de full-text search (GIN/tsvector), depois rerank.

Por que híbrido?

Em produção, queries misturam linguagem natural com jargão. Um usuário pergunta "como funciona reranking no RAG?" — o embedding entende a intenção, mas o tsvector garante que chunks com "rerank" literal subam no ranking. Como explica Chip Huyen em AI Engineering (p. 112): retrieval quality dominates end-to-end RAG performance.

Arquitetura mínima

  1. Embedding query com prefixo E5 (query: ...) para busca semântica.
  2. tsquery em paralelo sobre tsvector indexado na ingestão.
  3. Fusão normalizada: score = w_sem * cos_norm + w_kw * kw_norm.
  4. Rerank heurístico por capítulo e diversidade.
async def hybrid_search(session, query_vec, tsquery, top_k=6):
    sem = await semantic_candidates(session, query_vec, fetch_k=30)
    kw = await keyword_candidates(session, tsquery, fetch_k=30)
    merged = fuse_normalized(sem, kw, w_sem=0.65, w_kw=0.35)
    return rerank_by_chapter(merged)[:top_k]

Grounding no gerador

O LLM só deve citar o que veio dos chunks recuperados. Valide pós-geração: termos EN→PT dos livros aparecem no texto? Há citações com página? Sem isso, o modelo inventa definições genéricas de "retriever + generator".

def validate_grounding(draft: str, book_chunks: list) -> bool:
    hits = sum(1 for c in book_chunks if chunk_has_keyword_hit(draft, c))
    return hits >= min(2, len(book_chunks))

Tradeoffs reais

Abordagem Prós Contras
Só semântica Recall alto em paráfrase Perde termos exatos
Só keyword Precisão em siglas Frágil a sinônimos
Híbrido Melhor dos dois Mais tuning (pesos, gates)

Ajuste w_kw para queries técnicas (≥4 tokens informativos). Gates evitam que hits keyword-only fracos dominem o ranking.

Conclusão

RAG híbrido não é over-engineering — é o padrão quando seus livros técnicos têm vocabulário denso e suas queries misturam PT com termos EN. Comece com fusão simples, meça recall no golden set, depois refine pesos.

Referências técnicas

  • Chip Huyen, AI Engineering (p. 112) — retrieval quality como gargalo de RAG.
  • Chip Huyen, AI Engineering (p. 118) — chunking e indexação para recall.
  • Lewis et al., Retrieval-Augmented Generation (p. 2) — arquitetura retriever + generator.