Saltar al contenido principal

Capítulo 2: Multi-Query y Fusión

Recuperación Multi-Query​

Genere múltiples variaciones de la consulta, recupere para cada una y combine los resultados:

from langchain.retrievers.multi_query import MultiQueryRetriever

# Crear el recuperador multi-query
retriever = MultiQueryRetriever.from_llm(
retriever=vectorstore.as_retriever(),
llm=llm
)

# Genera variaciones automáticamente
results = retriever.get_relevant_documents(
"What are the benefits of RAG?"
)

Ejemplo de Variaciones Generadas​

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?"

Fusión RAG​

Técnica avanzada que combina multi-query con fusión 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

Beneficios​

BeneficioDescripción
CoberturaDiferentes enfoques encuentran distintos documentos
RobustezMenos sensible a la formulación de la consulta
CalidadRRF promueve documentos consistentemente relevantes

Cuándo Usar​

✅ Utilice multi-query cuando:

  • Las consultas son complejas o multifacéticas
  • Los usuarios expresan las cosas de manera diferente
  • Se necesita mayor exhaustividad (recall)

❌ Evite cuando:

  • La latencia es crítica
  • Consultas simples y claras
  • El costo es una preocupación