نماذجك اللغوية لا تعرف شيئاً عن عملك: دليلك العملي لتغذيتها بالمعرفة الخاصة باستخدام RAG

يا جماعة الخير، السلام عليكم ورحمة الله.

قبل كم شهر، إجاني اتصال من صاحب شركة محاماة كبيرة، رجل محترم ومعروف. دخل علي المكتب، وبعد فنجان القهوة والحكي عن الأحوال، دخل في صلب الموضوع. حكالي: “يا أبو عمر، إحنا عنا أرشيف ضخم من القضايا والمرافعات والوثائق القانونية، آلاف الملفات. بدي أعمل نظام زي ChatGPT، أسأله عن قضية معينة، ويعطيني ملخصها، أو أسأله عن مادة في القانون بناءً على قضايانا السابقة، ويجاوبني فوراً. بتقدر تعملي إياه؟”

ابتسمت وقلتله: “يا خَواجا، فكرتك ممتازة، بس هالشغلة مش بالساهل زي ما بتتخيل. ChatGPT ما بعرف إشي عن ملفاتك، هاي ملفات خاصة فيك، مش منشورة على الإنترنت. الموضوع زي ما تسأل واحد غريب في الشارع عن تاريخ عيلتك، شو بده يعرف؟”. شفت علامات الإحباط على وجهه، فكملت بسرعة: “بس اطمن، القصة إلها حل. إحنا ما رح نعلّم النموذج كل قضاياك من الصفر، رح نخليه ‘يفتح كتاب’ ويقرأ منه وقت الحاجة. وهذا الكتاب هو أرشيفك”.

هذه القصة هي المدخل الأمثل لموضوعنا اليوم: كيف تجعل النماذج اللغوية “الغبية” بخصوص بياناتك، “ذكية” وخاصة بعملك باستخدام تقنية اسمها RAG.

ما هي مشكلة “الجهل” في النماذج اللغوية الكبيرة؟

النماذج اللغوية الكبيرة (LLMs) مثل GPT-4 و Llama 3 وغيرها، تم تدريبها على كميات هائلة من البيانات من الإنترنت العام. هي تعرف الكثير عن التاريخ، والعلوم، والأدب، وحتى وصفات الطبخ. لكنها تقف عاجزة تماماً أمام الأسئلة التالية:

  • ما هي آخر تحديثات سياسة الإجازات في شركتي؟
  • لخص لي محضر اجتماع قسم التسويق الأسبوع الماضي.
  • ما هي تفاصيل تذاكر الدعم الفني المتعلقة بالعميل “س”؟

السبب بسيط: هذه البيانات خاصة، سرية، وموجودة على خوادمك الداخلية، ولم تكن جزءاً من بيانات تدريب النموذج. الأخطر من ذلك هو ظاهرة “الهلوسة” (Hallucination). عندما لا يعرف النموذج الإجابة، قد يحاول “تأليف” إجابة تبدو منطقية، وهذا كارثي في سياق الأعمال حيث الدقة هي الأهم.

الحل السحري (تقريباً): الجيل المعزز بالاسترجاع (RAG)

هنا يأتي دور تقنية Retrieval-Augmented Generation (RAG) أو “الجيل المعزز بالاسترجاع”. الفكرة بسيطة وعبقرية في نفس الوقت. بدلاً من إعادة تدريب النموذج بالكامل بتكلفة باهظة، نقوم بتزويده بالمعلومات ذات الصلة “في الوقت الفعلي” عند طرح السؤال.

تخيل أن النموذج هو طالب ذكي جداً، لكنه سيدخل الامتحان دون مذاكرة. الـ RAG هو بمثابة السماح له بإدخال “كتاب مفتوح” (Open Book) معه إلى قاعة الامتحان. هذا الكتاب هو بياناتك الخاصة.

العملية تتم على ثلاث مراحل رئيسية:

  1. الفهرسة (Indexing): تجهيز “الكتاب” عن طريق قراءة مستنداتك، تقسيمها لأجزاء صغيرة، وتحويلها لصيغة يفهمها الحاسوب.
  2. الاسترجاع (Retrieval): عندما يسأل المستخدم سؤالاً، نبحث في “الكتاب” عن أكثر الصفحات صلة بالسؤال.
  3. التوليد (Generation): نعطي النموذج السؤال الأصلي مع الصفحات التي وجدناها، ونطلب منه صياغة الإجابة بناءً على هذه المعلومات فقط.

الغوص في التفاصيل: كيف نبني نظام RAG خطوة بخطوة؟

خلونا “نشمر عن إيدينا” ونشوف كيف بتصير هاي العملية بشكل تقني وعملي. رح نستخدم Python كمثال.

الخطوة الأولى: تجهيز البيانات وتقطيعها (Data Preparation & Chunking)

أولاً، يجب أن نجمع بياناتنا (ملفات PDF, Word, TXT, صفحات Wiki…). النماذج اللغوية لها ما يسمى بـ “نافذة السياق” (Context Window)، وهي كمية النص التي يمكنها معالجتها في المرة الواحدة. لذلك، لا يمكننا إعطاؤها مستنداً من 100 صفحة مباشرة.

الحل هو تقطيع المستندات إلى “قطع” (Chunks) أصغر. يمكن أن تكون هذه القطع فقرات، أو جملاً، أو مقاطع ذات حجم ثابت (مثلاً، 500 حرف).

نصيحة من أبو عمر: لا تقطّع النص بشكل عشوائي! التقطيع الذكي الذي يحافظ على سياق الجمل والفقرات يعطي نتائج أفضل بكثير. مكتبات مثل LangChain و LlamaIndex توفر أدوات تقطيع متقدمة (RecursiveCharacterTextSplitter) تقوم بذلك بكفاءة.

الخطوة الثانية: التضمين وقواعد البيانات المتجهية (Embeddings & Vector Databases)

الآن لدينا مجموعة من القطع النصية. كيف يمكن للكمبيوتر أن يفهم معنى “سياسة الإجازات السنوية” ليجدها عندما يسأل المستخدم “كم يوم إجازة إلي؟”؟

هنا يأتي دور التضمين (Embeddings). وهي عملية تحويل كل قطعة نصية إلى متجه رياضي (قائمة من الأرقام). الفكرة السحرية هي أن النصوص ذات المعاني المتقاربة تكون متجهاتُها “قريبة” من بعضها في الفضاء الرياضي. يعني كأنك بتحول كل فكرة لإحداثيات على خريطة ضخمة.

بعد تحويل كل قطع النصوص إلى متجهات، نحتاج إلى مكان لتخزينها والبحث فيها بسرعة. هذا هو دور قواعد البيانات المتجهية (Vector Databases) مثل ChromaDB, FAISS, Pinecone, أو Weaviate.

لنشاهد مثال كود بسيط لإنشاء المتجهات باستخدام مكتبة sentence-transformers:


# pip install sentence-transformers
from sentence_transformers import SentenceTransformer

# اختر نموذج تضمين يدعم اللغة العربية بشكل جيد
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

# قطع النصوص التي جهزناها
chunks = [
    "سياسة الإجازات في الشركة تمنح الموظفين 21 يوماً إجازة سنوية مدفوعة الأجر.",
    "يجب تقديم طلب الإجازة قبل أسبوعين على الأقل من خلال نظام الموارد البشرية.",
    "تأسست الشركة في عام 2005 بهدف تقديم حلول برمجية مبتكرة."
]

# حساب المتجهات (Embeddings) لهذه القطع
embeddings = model.encode(chunks)

# كل متجه هو عبارة عن قائمة من الأرقام تمثل معنى القطعة النصية
print(embeddings.shape) # (3, 384) -> 3 قطع, كل واحدة ممثلة بـ 384 رقم

بعد ذلك، نقوم بتخزين هذه المتجهات مع النصوص الأصلية في قاعدة بيانات متجهية مثل ChromaDB، وهي سهلة الاستخدام محلياً.

الخطوة الثالثة: الاسترجاع والتوليد (Retrieval & Generation)

الآن، الجزء الممتع. عندما يأتي المستخدم ويسأل سؤالاً، على سبيل المثال: “ما هي مدة الإجازة السنوية؟”، تحدث العملية التالية:

  1. تضمين السؤال: نقوم بتحويل سؤال المستخدم إلى متجه بنفس نموذج التضمين الذي استخدمناه سابقاً.
  2. البحث عن الشبيه: نستخدم متجه السؤال للبحث في قاعدة البيانات المتجهية عن “أقرب” المتجهات إليه (أي أكثر القطع النصية صلةً بالسؤال). هذه هي عملية الاسترجاع (Retrieval). في مثالنا، ستكون النتيجة غالباً هي القطعة: “سياسة الإجازات في الشركة تمنح الموظفين 21 يوماً إجازة سنوية مدفوعة الأجر.”.
  3. بناء السياق والطلب (Prompt): الآن نجمع كل شيء معاً. نبني طلباً جديداً (Prompt) نرسله للنموذج اللغوي الكبير. هذا الطلب هو سر نجاح RAG.

مثال على الـ Prompt النهائي الذي نرسله للنموذج اللغوي:

أنت مساعد ذكي ومحترف. مهمتك هي الإجابة على سؤال المستخدم بناءً على السياق المرفق أدناه فقط. إذا كانت الإجابة غير موجودة في السياق، أجب بوضوح “لا أملك معلومات كافية للإجابة من المستندات المتاحة”. لا تخترع إجابات.

— السياق —

سياسة الإجازات في الشركة تمنح الموظفين 21 يوماً إجازة سنوية مدفوعة الأجر.

— نهاية السياق —

السؤال: ما هي مدة الإجازة السنوية؟

الإجابة:

عندما يرى النموذج اللغوي هذا الطلب، سيجد الإجابة مباشرة في السياق الذي قدمناه له ويجيب: “مدة الإجازة السنوية هي 21 يوماً.” وهكذا، نكون قد “أجبرنا” النموذج على الاعتماد على بياناتنا الخاصة ومنعناه من الهلوسة.

نصائح عملية من مطبخ أبو عمر 👨‍🍳

  • حجم القطعة (Chunk Size): اختيار الحجم المناسب للقطع النصية فن بحد ذاته. قطع صغيرة جداً قد تضيع السياق، وقطع كبيرة جداً قد تحتوي على معلومات غير ضرورية وتكون مكلفة. القاعدة الذهبية: جرّب أحجاماً مختلفة وشوف شو الأنسب لطبيعة مستنداتك.
  • البيانات الوصفية (Metadata): عند تخزين المتجهات، لا تخزن النص فقط! قم بتخزين بيانات وصفية مفيدة مثل اسم الملف المصدر، رقم الصفحة، تاريخ الإنشاء. هذا يسمح لك بعرض المصادر للمستخدم (“الإجابة مأخوذة من ملف ‘سياسات_الشركة.pdf’، صفحة 4”)، وهذا يزيد الثقة بشكل كبير. مشان لما حدا يسألك “من وين جبت هالحكي؟”، تقدر تجاوبه بثقة.
  • النماذج الهجينة (Hybrid Search): البحث بالمتجهات (الدلالي) رائع، لكن أحياناً البحث بالكلمات المفتاحية التقليدي (Keyword Search) يكون ضرورياً للأسماء الدقيقة أو أرقام الموديلات. أفضل الأنظمة اليوم تستخدم بحثاً هجيناً يجمع بين الاثنين.
  • التقييم المستمر: كيف تعرف أن نظامك جيد؟ قم ببناء مجموعة اختبار (Evaluation Set) تحتوي على أسئلة وإجابات نموذجية، وقم بتقييم أداء نظامك بشكل دوري. هل يسترجع المستندات الصحيحة؟ هل الإجابة النهائية دقيقة؟

الخلاصة: من مستهلك للمعرفة إلى خالق للحلول 💡

تقنية RAG ليست مجرد مصطلح تقني معقد، بل هي جسر يربط بين القوة الهائلة للنماذج اللغوية العامة وعالم بياناتك الخاصة والفريدة. هي الأداة التي تحولك من مجرد مستهلك للذكاء الاصطناعي إلى خالق لحلول ذكية ومخصصة تلبي احتياجات عملك بدقة.

التكلفة أقل بكثير من إعادة التدريب، والمرونة أعلى، والنتائج يمكن التحكم بها والتحقق من مصادرها. سواء كنت محامياً، أو طبيباً، أو مهندساً، أو صاحب شركة، يمكنك الآن بناء “خبير” خاص بك، يتحدث لغتك ويفهم تفاصيل عملك الدقيقة.

ما تخاف من التجربة. ابدأ صغير، بمجموعة وثائق بسيطة، ومكتبات مفتوحة المصدر مثل LangChain و ChromaDB، وشوف السحر بنفسك. التكنولوجيا موجودة لتخدمنا، واحنا كمبرمجين ومطورين عرب لازم نكون في الطليعة ونستغلها لمصلحتنا ومصلحة مجتمعاتنا. يلا، ورجوني همتكم! 💪

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

​معمارية البرمجيات

تحديث نظامنا القديم كان مستحيلاً: كيف أنقذنا ‘نمط التين الخانق’ من جحيم إعادة الكتابة الكارثية؟

أتذكر ذلك الاجتماع جيدًا، رائحة القهوة الباردة ونظرات الإرهاق على وجوه الفريق. كنا نواجه وحشًا برمجيًا قديمًا، والجميع يطالب بإعادة كتابته من الصفر. في هذه...

22 أبريل، 2026 قراءة المزيد
تسويق رقمي

ميزانيتنا التسويقية كانت ثقباً أسود: كيف أنقذنا ‘نموذج الإحالة متعدد اللمسات’ من جحيم إهدار الميزانية؟

هل تشعر أن ميزانيتك التسويقية تتبخر دون عائد واضح؟ في هذه المقالة، أشارككم قصة حقيقية عن كيفية انتقالنا من نموذج 'النقرة الأخيرة' الكارثي إلى 'الإحالة...

22 أبريل، 2026 قراءة المزيد
تجربة المستخدم والابداع البصري

واجهاتنا كانت فوضى: كيف أنقذنا ‘نظام التصميم’ (Design System) من جحيم عدم الاتساق؟

بتذكر مرة كنا في اجتماع، وعلى الشاشة الكبيرة تطبيقاتنا المختلفة... وفجأة، لاحظ المدير التنفيذي شغلة بسيطة: "ليش في عنا خمس درجات مختلفة من اللون الأزرق...

21 أبريل، 2026 قراءة المزيد
الشبكات والـ APIs

واجهة تطبيقاتنا كانت بوابة للجحيم: كيف أنقذتنا ‘بوابة الـ API’ من فوضى الخدمات المصغرة؟

أشارككم قصة حقيقية من قلب المعركة البرمجية، كيف تحولت معمارية الخدمات المصغرة لدينا من فوضى عارمة إلى نظام متناغم بفضل مفهوم بسيط وقوي اسمه "بوابة...

21 أبريل، 2026 قراءة المزيد
البودكاست