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.
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
- Embedding query com prefixo E5 (
query: ...) para busca semântica. - tsquery em paralelo sobre tsvector indexado na ingestão.
- Fusão normalizada:
score = w_sem * cos_norm + w_kw * kw_norm. - 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.