Aller au contenu principal

Chapitre 2 : Multi-requête et Fusion

Récupération Multi-requête​

Générez plusieurs variations de requêtes, récupérez pour chacune, combinez les résultats :

from langchain.retrievers.multi_query import MultiQueryRetriever

# Créer un récupérateur multi-requête
retriever = MultiQueryRetriever.from_llm(
retriever=vectorstore.as_retriever(),
llm=llm
)

# Génère automatiquement des variations
results = retriever.get_relevant_documents(
"Quels sont les avantages de RAG ?"
)

Exemple de Variations Générées​

Original : "Quels sont les avantages de RAG ?"

Généré :
1. "Quels avantages RAG offre-t-il par rapport aux LLM traditionnels ?"
2. "Pourquoi devrais-je utiliser la génération augmentée par récupération ?"
3. "Comment RAG améliore-t-il la performance des systèmes d'IA ?"

Fusion RAG​

Technique avancée combinant multi-requête avec fusion de rang réciproque :

def rag_fusion(query, llm, retriever, num_queries=4):
# Étape 1 : Générer des variations de requête
queries = generate_query_variations(query, llm, num_queries)

# Étape 2 : Récupérer pour chaque requête
all_results = []
for q in [query] + queries:
results = retriever.get_relevant_documents(q)
all_results.append(results)

# Étape 3 : Fusion de Rang Réciproque
fused = reciprocal_rank_fusion(all_results)

return fused[:5] # Top 5 résultats fusionnés

Avantages​

AvantageDescription
CouvertureDifférents angles trouvent différents documents
RobustesseMoins sensible à la formulation des requêtes
QualitéLa RRF promeut des documents constamment pertinents

Quand Utiliser​

✅ Utilisez la multi-requête lorsque :

  • Les requêtes sont complexes ou multi-facettes
  • Les utilisateurs expriment les choses différemment
  • Un rappel plus élevé est nécessaire

❌ Évitez lorsque :

  • La latence est critique
  • Les requêtes sont simples et claires
  • Le coût est une préoccupation