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

الفصل 3: تصحيح خطوط أنابيب RAG

أنماط الإخفاق الشائعة​

1. استُرجعت وثائق خاطئة​

الأعراض: يعطي نموذج LLM إجابات خاطئة أو غير ذات صلة

الأسباب:

  • حجم chunk سيئ
  • نموذج embedding خاطئ
  • مرشّحات metadata ناقصة

الحلول:

# Check what's being retrieved
docs = retriever.get_relevant_documents(query)
for doc in docs:
print(f"Score: {doc.metadata.get('score')}")
print(f"Content: {doc.page_content[:200]}...")
print("---")

2. يتجاهل نموذج LLM السياق​

الأعراض: الإجابة لا تعكس الوثائق المسترجعة

الأسباب:

  • مشكلات في قالب الـ prompt
  • السياق طويل جدًا
  • السياق غير منسَّق بوضوح

الحلول:

# Better prompt structure
prompt = """
CONTEXT (use this information to answer):
{context}

QUESTION: {question}

INSTRUCTIONS: Answer ONLY using the context above.
If the context doesn't contain the answer, say "I don't know."

ANSWER:"""

3. الهلوسات​

الأعراض: إجابات واثقة لكنها خاطئة

الأسباب:

  • استُرجعت وثائق خاطئة
  • يخرج نموذج LLM عن السياق

الحلول:

  • حسّن جودة الاسترجاع
  • استخدم prompts تثبيت صريحة
  • خفّض درجة الحرارة (temperature)

التتبّع باستخدام LangSmith​

from langsmith import Client
import os

os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-key"

# Now all LangChain calls are traced
# View at smith.langchain.com

قائمة تصحيح الأخطاء​

الخطوةالتحقّقالأداة
1هل تعمل embeddings؟اختبر embedding لاستعلام
2هل اُسترجعت الوثائق الصحيحة؟اطبع الوثائق المسترجعة
3هل يتسع السياق في الـ prompt؟تحقّق من عدد الـ tokens
4هل يرى نموذج LLM السياق؟اطبع الـ prompt الكامل
5هل الإجابة مثبتة؟قارن بالسياق

تحسين الأداء​

تقليل زمن الاستجابة​

# Async retrieval
async def fast_rag(query):
# Parallel embedding and retrieval
embedding_task = embed_async(query)

embedding = await embedding_task
docs = await retrieve_async(embedding)

return await generate_async(query, docs)

تقليل التكاليف​

  • استخدم نماذج أصغر حيث أمكن
  • خزّن الاستعلامات المتكرّرة مؤقتًا
  • عالج embeddings على دفعات
  • حدّ من حجم السياق