التوليد المعزَّز بالاسترجاع (Retrieval-Augmented Generation - RAG)

RAG طريقة لمنح نموذج اللغة معرفة تتجاوز ما رآه أثناء تدريبه — دون الحاجة لإعادة تدريب النموذج.

Embeddings Vector Search Semantic Retrieval
تشغيل مباشر في Sandbox

ما هو RAG؟

يعني التوليد المعزَّز بالاسترجاع بالضبط ذلك: بدلًا من الاعتماد فقط على المعرفة الداخلية للنموذج، نقوم أولًا بـاسترجاع المستندات ذات الصلة بسؤال المستخدم من قاعدة معرفة خارجية، ثم نمنحها للنموذج كسياق إضافي إلى جانب السؤال الأصلي ليتمكن من توليد إجابة مبنية عليها.

لماذا RAG؟

  • تقليل الهلوسة — تُبنى الإجابة على مستند حقيقي، لا على مجرد الذاكرة البارامترية للنموذج
  • معرفة محدَّثة — دون إعادة ضبط دقيق، يكفي إضافة مستند جديد إلى قاعدة المعرفة
  • معرفة خاصة — يمكن لنموذج عام الإجابة عن بيانات مؤسستك الخاصة (التي لم يرها أبدًا أثناء تدريبه العام)
  • قابل للاستشهاد — يمكنك إظهار المصدر الدقيق لكل إجابة

خط أنابيب RAG

Documents Chunking + Embedding Vector DB User Query Query Embedding Semantic Search Relevant Docs Top-K LLM Final Answer

التجزئة والتضمين (Chunking & Embedding)

تُقسَّم المستندات الكبيرة أولًا إلى أجزاء أصغر (Chunk) بحيث يكون كل جزء مركّزًا بما يكفي ويتسع ضمن نافذة السياق. ثم يُحوَّل كل جزء بواسطة نموذج تضمين (Embedding) إلى متجه رقمي (تمثيل دلالي)؛ النصوص ذات المعنى المتقارب تمتلك متجهات متقاربة من بعضها.

قاعدة البيانات المتجهية (Vector DB)

تُخزَّن هذه المتجهات في قاعدة بيانات متجهية مُحسَّنة للبحث عن "أقرب الجيران" (Nearest Neighbor Search). بمجرد تحويل استفسار المستخدم أيضًا إلى متجه، يمكن لقاعدة البيانات إيجاد الأقرب من بين ملايين المستندات في غضون مللي ثوانٍ قليلة.

البحث الهجين (Hybrid Search) وإعادة الترتيب

البحث المتجهي وحده ليس دائمًا الخيار الأفضل: بالنسبة للعبارات الدقيقة مثل اسم موديل أو رمز منتج (مثل SKU-4471)، غالبًا ما يكون البحث التقليدي بالكلمات المفتاحية (BM25) أدق من البحث الدلالي، لأن المتجهات مُحسَّنة من أجل "التشابه المفاهيمي" لا التطابق الدقيق.

  • البحث الهجين (Hybrid Search) — تُؤخذ نتائج البحث المتجهي والبحث بالكلمات المفتاحية معًا وتُدمَج بصيغة ترجيح؛ عادةً ما يرفع هذا الدمج الدقة مقارنةً بكل منهما على حدة.
  • إعادة الترتيب (Re-ranking) — مرحلة ثانية اختيارية: بعد الاسترجاع الأولي لعدد N من النتائج (مثلًا 50 مستندًا)، يُعيد نموذج أصغر وأدق (Cross-Encoder) تقييم هذه النتائج بحيث لا يُعطى للنموذج اللغوي الرئيسي إلا أفضل K نتيجة (مثلًا 4 مستندات). هذه الخطوة أبطأ من البحث المتجهي، لذا تُنفَّذ فقط على المجموعة المصغَّرة، لا على قاعدة البيانات بأكملها.

مثال كود: خط أنابيب بسيط

def answer_with_rag(question, vector_db, llm):
    query_vector = embed(question)
    top_chunks = vector_db.similarity_search(query_vector, k=4)

    context = "\n\n".join(chunk.text for chunk in top_chunks)
    prompt = f"أجب عن السؤال باستخدام النص التالي:\n\n{context}\n\nالسؤال: {question}"

    return llm.generate(prompt)

القيود

  • تعتمد جودة الإجابة كليًّا على جودة الاسترجاع؛ فإذا لم يُعثر على المستند ذي الصلة، يخمّن النموذج أو يخطئ
  • ينفّذ RAG البسيط عملية بحث واحدة فقط في كل مرة؛ وهذا غير كافٍ للأسئلة متعددة الخطوات — ولهذا السبب ظهر Agentic RAG

الأسئلة الشائعة

هل يحل RAG محل الضبط الدقيق (Fine-tuning)؟

عادةً لا يحل محله، بل يكمّله. يتفوق RAG في المعرفة "الحديثة والقابلة للتغيير"؛ أما الضبط الدقيق فهو أنسب لتغيير أسلوب النموذج أو سلوكه.

ما علاقة RAG بالتجارة الوكيلية؟

يمكن لعميل الشراء استخدام RAG للبحث الدلالي في كتالوج المنتجات — وهو بالضبط ما يحدث خلف الكواليس في قدرة search_offers ضمن UCP.