الفصل 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 الوثائق ذات الصلة باستمرار |
متى تستخدمها
✅ استخدم الاستعلامات المتعددة عندما:
- تكون الاستعلامات معقّدة أو متعددة الأوجه
- يعبّر المستخدمون بطرق مختلفة
- تحتاج استدعاءً أعلى
❌ تجاوزها عندما:
- زمن الاستجابة حرج
- استعلامات بسيطة وواضحة
- التكلفة مصدر قلق