أحمد حايس
الرئيسيةمن أناالدوراتالمدونةالعروض
أحمد حايس

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

تعلم أسرعوصول مباشر للدورات والمسارات من الموبايل.
تنقل أوضحالروابط الأساسية والدعم في مكان واحد بدون تشتيت.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • العروض
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالعروضالمدونةالدخول

GraphRAG للمحترف: لما Vector Search بيفشل في أسئلة العلاقات والتسلسل

📅 ١١ مايو ٢٠٢٦⏱ 7 دقائق قراءة
GraphRAG للمحترف: لما Vector Search بيفشل في أسئلة العلاقات والتسلسل

المستوى: محترف

GraphRAG للمحترف: لما Vector Search بيفشل في أسئلة العلاقات والتسلسل

لو الـ RAG بتاعك بيرجّع chunks قريبة من السؤال دلاليًا، لكنه بيفشل على سؤال من نوع "إيه الـ 3 قضايا اللي القاضي س حكم فيها قبل تعيينه في المحكمة الإدارية؟"، الـ Vector Search مش غلطان — هو أصلًا مش مصمّم يمشي على relationships و timelines. GraphRAG من Microsoft Research بيحل المشكلة دي عن طريق بناء knowledge graph من الـ corpus وقت الـ indexing، فيخلّي الـ retrieval يمشي على entities و relations مش بس على cosine similarity.

شبكة عقد مترابطة تمثّل knowledge graph بحواف زرقاء على خلفية داكنة

المشكلة باختصار

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.

نقاط بيانات متصلة بخطوط رفيعة تحاكي خطوة entity extraction في GraphRAG

الـ Pipeline التنفيذي: 4 مراحل بكود شغّال

  1. Chunking + Entity extraction: قسّم كل قضية لـ chunks بـ 600 token مع overlap 80. لكل chunk، استدعِ Claude Sonnet 4.6 بـ structured output schema يرجّع entities + relations.
  2. Graph consolidation: دمج الـ entities المتطابقة (مثلاً "شركة س" و "س ش.م.م.") عبر fuzzy matching + LLM verification على الحالات الغامضة فقط.
  3. Community detection: طبّق Leiden algorithm بـ resolution = 1.0 على الجراف، فيظهر عندك (في حالتنا) 142 community موزّعة على 3 مستويات هرمية.
  4. Community summarization: لكل community، ولّد summary بـ 200–400 token باستخدام Haiku 4.5 (أرخص من Sonnet بـ 16 مرة على output tokens).
Python
from anthropic import Anthropic
import networkx as nx
from graspologic.partition import hierarchical_leiden

client = Anthropic()

EXTRACT_PROMPT = """Extract entities and relations from the Arabic legal text.
Return JSON: {"entities": [{"name": str, "type": str}],
              "relations": [{"src": str, "rel": str, "dst": str}]}
Text:
{chunk}"""

def extract_graph(chunks):
    G = nx.Graph()
    for c in chunks:
        msg = client.messages.create(
            model="claude-sonnet-4-6",
            max_tokens=1024,
            messages=[{"role": "user", "content": EXTRACT_PROMPT.format(chunk=c)}],
        )
        data = parse_json(msg.content[0].text)
        for e in data["entities"]:
            G.add_node(e["name"], type=e["type"])
        for r in data["relations"]:
            G.add_edge(r["src"], r["dst"], rel=r["rel"])
    return G

def detect_communities(G):
    return hierarchical_leiden(G, max_cluster_size=15, random_seed=42)

def summarize_community(nodes, edges):
    ctx = format_subgraph(nodes, edges)
    msg = client.messages.create(
        model="claude-haiku-4-5-20251001",
        max_tokens=512,
        messages=[{"role": "user", "content": f"لخّص العلاقات دي في 200 كلمة:\n{ctx}"}],
    )
    return msg.content[0].text

الكود ده مبسّط للتوضيح. في الإنتاج محتاج caching للـ extraction (لو chunk اتغيّر 5% بس متعدّش عليه تاني)، و batching على Claude (Batch API بيخصم 50%)، و persistence للجراف في Neo4j أو ArangoDB بدل ما يفضل في الذاكرة.

الأرقام المقاسة: Precision من 58% لـ 89%

قياس على 240 سؤال علائقي من سجلات المستخدمين الحقيقية:

  • Naive RAG (text-embedding-3-large + cosine): Precision@10 = 58%، Latency = 410ms، تكلفة indexing لمرة واحدة = $14.
  • Hybrid Search (BM25 + Vector + RRF): Precision@10 = 71%، Latency = 480ms، تكلفة = $14.
  • GraphRAG (Sonnet 4.6 للـ extraction + Haiku 4.5 للـ summarization): Precision@10 = 89%، Latency = 1.4s، تكلفة indexing لمرة واحدة = $312، وتكلفة الـ query بعد كده $0.008 فقط.

الفارق في الـ Precision (31 نقطة) جاي من إن الجراف بيحفظ relations بشكل explicit. الـ query عن "تنازل بعد تغيير مجلس إدارة" بيتحوّل داخليًا لمشي على الجراف من entity "شركة س" مرورًا بـ relations من نوع "تنازل" و "تغيير_إدارة" مع timestamp filter.

دائرة كهربائية معقدة ترمز إلى community detection في خوارزمية Leiden داخل GraphRAG

Trade-offs محدش بيقولهالك

1. تكلفة الـ indexing 22 ضعف. الـ Naive RAG كلّفك $14 لمرة، GraphRAG كلّفك $312. لو الـ corpus بيتحدّث 5% يوميًا، ده $15 إضافي يومي = $450 شهري على الـ indexing لوحده.

2. الـ latency عالي. 1.4s مقابل 410ms في Naive RAG. لو بتبني شات بوت محادثة فورية، 1.4s فوق Streaming TTFB ممكن يخلّي الـ abandonment rate يزيد. GraphRAG مش لشات بوتات السرعة، هو للـ analytical assistants وأدوات البحث المتخصصة.

3. جودة الـ extraction بتتحكّم في كل حاجة. لو Claude غلط في علاقة مهمة في 3% من الـ chunks، الجراف هيبقى فيه noise بيظهر في queries على الـ edge cases. الحل: human-in-the-loop review على عيّنة + تكرار الـ extraction على الـ chunks بـ low confidence.

4. مش بيشتغل على corpus صغير. أقل من 5,000 وثيقة، الجراف بيبقى متشظّى وقليل العلاقات. لو عندك 200 PDF بس، استخدم Naive RAG وارتاح.

متى لا تستخدم GraphRAG

متستخدمش GraphRAG لو:

  • أسئلة المستخدمين 90% منها "نقطية" (تعريف، توضيح، how-to محدد).
  • الـ corpus أقل من 5,000 وثيقة أو عدد الـ entities المختلفة أقل من 500.
  • عندك latency budget أقل من 800ms في الـ end-to-end response.
  • ميزانية الـ indexing الشهرية أقل من $200.
  • فريقك مفيهوش خبرة في graph databases أو الـ operational overhead لـ Neo4j / Memgraph.

في الحالات دي، Hybrid Search (BM25 + Vector + RRF) بيوصّلك لـ 71% precision بـ 5% من التكلفة. الفرق بين 71% و 89% مش دائمًا يستاهل 22× زيادة في الـ indexing cost.

الخطوة التالية

افتح logs المستخدمين بتوعك، اختار 100 سؤال متنوع، صنّفهم يدويًا: "نقطي" مقابل "علائقي". لو النسبة العلائقية فوق 25%، GraphRAG هيدفع تكلفته خلال 3 شهور. ابدأ بـ Microsoft GraphRAG library الرسمية (pip install graphrag) على sample بـ 500 وثيقة وقِس الـ Precision قبل ما تـ commit على الـ corpus الكامل.

المصادر

  • Edge, D. et al. (2024). "From Local to Global: A Graph RAG Approach to Query-Focused Summarization". arXiv:2404.16130. arxiv.org/abs/2404.16130
  • Microsoft GraphRAG official repository: github.com/microsoft/graphrag
  • Traag, V. A., Waltman, L., & van Eck, N. J. (2019). "From Louvain to Leiden: guaranteeing well-connected communities". Scientific Reports 9, 5233.
  • Anthropic Claude API documentation (May 2026): docs.anthropic.com
  • Neo4j GraphRAG patterns & reference architectures: neo4j.com/labs/genai-ecosystem/graphrag
  • Robertson, S. & Zaragoza, H. (2009). "The Probabilistic Relevance Framework: BM25 and Beyond". Foundations and Trends in Information Retrieval.

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة