Capítulo 2: Multi-Query e Fusão
Recuperação Multi-Query
Gere múltiplas variações de consulta, recupere para cada uma e combine os resultados:
from langchain.retrievers.multi_query import MultiQueryRetriever
# Create multi-query retriever
retriever = MultiQueryRetriever.from_llm(
retriever=vectorstore.as_retriever(),
llm=llm
)
# Automatically generates variations
results = retriever.get_relevant_documents(
"What are the benefits of RAG?"
)
Exemplo de Variações Geradas
Original: "What are the benefits of RAG?"
Generated:
1. "What advantages does RAG offer over traditional LLMs?"
2. "Why should I use retrieval augmented generation?"
3. "How does RAG improve AI system performance?"
Fusão RAG
Técnica avançada que combina multi-query com fusão de ranking recíproco:
def rag_fusion(query, llm, retriever, num_queries=4):
# Step 1: Generate query variations
queries = generate_query_variations(query, llm, num_queries)
# Step 2: Retrieve for each query
all_results = []
for q in [query] + queries:
results = retriever.get_relevant_documents(q)
all_results.append(results)
# Step 3: Reciprocal Rank Fusion
fused = reciprocal_rank_fusion(all_results)
return fused[:5] # Top 5 fused results
Benefícios
| Benefício | Descrição |
|---|---|
| Cobertura | Diferentes abordagens encontram documentos distintos |
| Robustez | Menos sensível à formulação da consulta |
| Qualidade | RRF promove documentos consistentemente relevantes |
Quando Usar
✅ Use multi-query quando:
- As consultas são complexas ou multifacetadas
- Usuários expressam as perguntas de formas diferentes
- É necessário maior recall
❌ Evite quando:
- A latência é crítica
- Consultas simples e objetivas
- O custo é uma preocupação