المستوى: محترف
GraphRAG للمحترف: لما Vector Search بيفشل في أسئلة العلاقات والتسلسل
لو الـ RAG بتاعك بيرجّع chunks قريبة من السؤال دلاليًا، لكنه بيفشل على سؤال من نوع "إيه الـ 3 قضايا اللي القاضي س حكم فيها قبل تعيينه في المحكمة الإدارية؟"، الـ Vector Search مش غلطان — هو أصلًا مش مصمّم يمشي على relationships و timelines. GraphRAG من Microsoft Research بيحل المشكلة دي عن طريق بناء knowledge graph من الـ corpus وقت الـ indexing، فيخلّي الـ retrieval يمشي على entities و relations مش بس على cosine similarity.
المشكلة باختصار
Vector Search بيقيس قرب المعنى بين الـ query و chunks موجودة سلفًا في الـ index. ده شغّال كويس لما السؤال "نقطي" (point lookup) زي: "إيه تعريف Reentrancy في Solidity؟". وبيفشل لما السؤال "علائقي" (relational) زي: "مين الأطراف اللي اشتركوا في 3 قضايا مع بعض في آخر سنتين؟". الفشل هنا مش bug، ده consequence طبيعي لطريقة الـ embedding: chunks فيها أسماء الأطراف بتبقى متفرّقة في الـ corpus، فمحدش chunk منهم بيبقى قريب دلاليًا من السؤال كله.
مثال واقعي قبل ما ندخل في العلم: أرشيف قانوني عربي بـ 18,400 قضية
تخيّل معاك منصة بحث قانوني فيها 18,400 قضية مصرية في القانون التجاري، متوسط طول القضية 2,300 token. مستخدم سأل: "إيه القضايا اللي شركة س اتنازلت فيها عن دعوى تحكيم بعد ما حصل تغيير في مجلس إدارتها؟". الـ Vector RAG التقليدي (Chunks بحجم 800 token + OpenAI text-embedding-3-large) رجّع 10 chunks: 7 منهم فيهم اسم الشركة، لكن مفيش واحد ربط بين "تنازل عن دعوى" و "تغيير مجلس". الـ Precision@10 على 240 سؤال من النوع ده طلع 58%.
الـ GraphRAG على نفس الـ corpus: استخرج 47,200 entity (شركات، أشخاص، أحكام، تواريخ) و 89,000 علاقة بينهم، عمل community detection بخوارزمية Leiden، ووقت الـ query بيمشي على الجراف ويلمّ evidence من 5–9 nodes في hops متعددة. النتيجة: Precision@10 = 89%، بزيادة 31 نقطة.
التعريف العلمي: GraphRAG من ورقة Edge et al. 2024
GraphRAG نشرها فريق Microsoft Research في أبريل 2024 (arXiv:2404.16130) كرد على فشل Naive RAG في الـ "global sensemaking queries" — الأسئلة اللي إجابتها مش في chunk واحد. الـ pipeline 4 مراحل: (1) Entity & relation extraction من كل chunk باستخدام LLM، (2) بناء graph موحّد بدمج الـ duplicates، (3) Community detection بـ Leiden للحصول على hierarchical clusters، (4) Community summarization باستخدام LLM علشان يبقى عندك "ملخصات قابلة للـ retrieval" على مستويات تجريد مختلفة (محلي → عام).
الفرق الجوهري عن Hybrid Search (BM25 + Vector): الـ Hybrid بيحسّن الـ keyword matching، لكنه لسه مرتكز على chunks مستقلة. GraphRAG بيغيّر الـ data structure نفسها: من قائمة chunks إلى رسم مترابط بـ semantics محفوظة بشكل explicit.