لو شغّلت Cohere Rerank على RAG عربي عندك ولسه precision@5 واقفة عند 71%، المشكلة مش في الـ reranker. المشكلة إن الـ chunk اللي صح أصلاً مش وصل للـ reranker. Contextual Retrieval من Anthropic بينزّل failed retrievals 35% بـ embeddings لوحدها، و49% بإضافة BM25، و67% لما تضيفلهم reranker — بدون ما تغيّر الموديل ولا الـ vector DB.
Contextual Retrieval: الحلقة المفقودة قبل الـ Reranker
المشكلة باختصار
الـ RAG التقليدي بيقطّع الـ document لـ chunks بحجم 500-1000 token، وكل chunk بيتعمله embedding مستقل. المشكلة: الـ chunk بيفقد سياقه. خد المثال ده من تذكرة دعم فعلية:
"المبلغ المسترد سيظهر في حسابك خلال 5-7 أيام عمل."
الجملة دي chunk كامل. لما المستخدم يسأل "هرجّع فلوسي إمتى بعد إلغاء الاشتراك الذهبي؟"، الـ embedding بتاع الـ chunk ده مش هيتطابق سيمانتيكياً، لأن مفيش ذكر لـ "إلغاء" ولا "اشتراك ذهبي". الـ chunk صح، بس المعلومة اللي بتربطه بالسؤال موجودة في الـ chunk اللي قبله أو الـ section header.
مثال أولاً للمبتدئين في المفهوم: موظف الأرشيف
تخيل موظف أرشيف عنده 50 ألف ورقة مقصوصة من ملفات مختلفة. كل ورقة مكتوب فيها جملة واحدة. لو سألته "إمتى هترجّع فلوس العميل أحمد؟"، هيدور على كلمات "ترجّع" و"أحمد". هيلاقي 200 ورقة فيها كلمة "ترجّع" بس مش عارف هي من أنهي ملف. هيرجّعلك ورقة عشوائية.
دلوقتي تخيّل إنك قبل ما تحط كل ورقة في الأرشيف، كتبت فوقها سطر صغير: "ورقة من ملف ‘شروط الاسترداد - الاشتراك الذهبي - 2026’، بتشرح مدة استرداد الدفع." الموظف بقى يقدر يلاقي الورقة الصح من المرة الأولى. ده بالظبط اللي Contextual Retrieval بيعمله — بس بـ Claude بدل الموظف، والسطر بيكتبه LLM لكل chunk قبل ما يتحوّل لـ embedding.
الشرح العلمي بدقة
الفكرة نشرتها Anthropic في سبتمبر 2024 في بوست رسمي على مدونتها. الـ pipeline التقليدي: chunk → embedding → vector DB. الـ pipeline الجديد: chunk + auto_generated_context → embedding → vector DB.
الـ auto_generated_context بيتولّد بـ prompt على Claude Haiku 4.5 لكل chunk، الـ prompt بيشوف الـ document كامل + الـ chunk المستهدف، ويولّد 50-100 token سياق بيحدد الـ chunk جاي من إيه ومرتبط بإيه. النتيجة: الـ embedding بقى يحمل معنى الـ chunk + سياقه.
الأرقام الرسمية من Anthropic على benchmark مكوّن من 9 datasets متنوعة:
- Baseline RAG (embeddings فقط): 5.7% failed retrievals@20
- Contextual Embeddings: 3.7% (تحسّن 35%)
- Contextual Embeddings + Contextual BM25: 2.9% (تحسّن 49%)
- Contextual Embeddings + BM25 + Reranking: 1.9% (تحسّن 67%)