إنتقل إلى المحتوى الرئيسي

الفصل 2: الاستعلامات المتعددة والدمج

استرجاع متعدد الاستعلامات​

ولّد تنويعات متعددة للاستعلام، استرجع لكل منها، وادمج النتائج:

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

مثال على التنويعات المولَّدة​

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

RAG Fusion​

تقنية متقدمة تجمع الاستعلامات المتعددة مع reciprocal rank fusion:

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

الفوائد​

الفائدةالوصف
التغطيةزوايا مختلفة تجد وثائق مختلفة
المتانةأقل حساسية لصياغة الاستعلام
الجودةيعزّز RRF الوثائق ذات الصلة باستمرار

متى تستخدمها​

✅ استخدم الاستعلامات المتعددة عندما:

  • تكون الاستعلامات معقّدة أو متعددة الأوجه
  • يعبّر المستخدمون بطرق مختلفة
  • تحتاج استدعاءً أعلى

❌ تجاوزها عندما:

  • زمن الاستجابة حرج
  • استعلامات بسيطة وواضحة
  • التكلفة مصدر قلق