شرح عملي · LlamaIndex · Retrieval-Augmented Generation
أنشئ مساعد RAG للمستندات باستخدام LlamaIndex
يشرح هذا الدليل المكوّنات التي جرى التحقق منها لبناء مساعد للإجابة عن الأسئلة المتعلقة بالمستندات باستخدام LlamaIndex وOpenAI. ويتناول إعداد النماذج وعمليات embedding، وتجهيز المستندات، والفرق بين RAG الأساسي وagentic RAG، وكيفية التفكير في الاستمرارية من دون تقديم شيفرة غير موثّقة على أنها تطبيق خضع للاختبار.
ما الذي يغطيه هذا الدليل؟
يجمع Retrieval-Augmented Generation، أو RAG، بين استرجاع المستندات وإجابات نماذج اللغة. وبدلاً من التعامل مع السؤال باعتباره prompt معزولاً، يعمل سير عمل RAG مع مجموعة من المواد المصدرية ويستخدمها أساساً للإجابة. ويوفّر LlamaIndex إطاراً لربط المستندات والعُقد والفهارس ومكوّنات الاستعلام وتكاملات نماذج اللغة.
يهيّئ مثال LlamaIndex الذي جرى التحقق منه في المواد المقدّمة نموذج لغة من OpenAI ونموذج embedding من OpenAI عبر LlamaIndex. ويستخدم text-embedding-3-small مع بُعد embedding محدد صراحةً يبلغ ٢٥٦، ثم يعيّن إعدادات النموذج الناتجة من خلال كائن Settings في الإطار. وهذا مثال عملي على الإعداد، وليس توصية عامة أو ضماناً لملاءمة نموذج أو بُعد معين لكل مجموعة مستندات.
هذه المقالة أضيق نطاقاً من المسودة الأصلية عمداً. فالمراجع المتاحة لا تتحقق من وجود تطبيق Python كامل وقابل للتشغيل يقرأ ملفات محلية عشوائية، ويحفظ الفهرس على القرص، ويعيد تحميله، ويوثّق الأجزاء المسترجعة، وينجح في اختبارات المسودة. وبدلاً من الإيحاء بأن تطبيقاً غير موثّق قد خضع للاختبار، تشرح الخطوات أدناه سير العمل المدعوم وتحدد المواضع التي يجب فيها مراجعة اختيارات التنفيذ مقابل وثائق تكاملات LlamaIndex التي تختارها.
المتطلبات والنطاق
- تُعد المعرفة الأساسية بـ Python مناسبة لمثال إعداد Python الذي نناقشه هنا. وتحدد دورة agentic RAG الموثّقة من DeepLearning.AI المعرفة الأساسية بـ Python كنقطة بداية مناسبة.
- يُستخدم تكامل OpenAI في مثال إعداد LlamaIndex الذي جرى التحقق منه. ولا تثبت المصادر أهلية الحساب أو الأسعار الحالية أو إمكانية الوصول إلى نموذج محادثة معين.
- جهّز مستندات يُسمح لك باستخدامها. تصف المراجع حالات استخدام RAG للمستندات والمستندات المتعددة، لكنها لا تضمن دعم كل نوع من الملفات أو كل محلّل.
- حدّد ما إذا كان هدفك هو الإجابة المباشرة عن الأسئلة المتعلقة بالمستندات، أو التلخيص، أو بناء مساعد بحث أكثر تعقيداً. هذه أنماط تطبيق مترابطة، لكنها مختلفة.
لا يحدد الدليل متطلبات إصدار Python، ولا يفرض إصدارات للحزم، ولا يدّعي أن أمراً معيناً يثبّت تطبيقاً كاملاً وقابلاً للتشغيل. ويجب تأكيد هذه التفاصيل مقابل الإصدارات والتكاملات التي تختارها للمشروع الفعلي.
الخطوة الأولى: فهم سير العمل من المستند إلى الإجابة
يهتم نظام RAG للمستندات بجانبين رئيسيين: تجهيز المحتوى للاسترجاع، والإجابة عن الأسئلة باستخدام المحتوى المسترجع. ويوضح مثال MongoDB وLlamaIndex الذي جرى التحقق منه إنشاء كائنات مستندات في LlamaIndex انطلاقاً من السجلات المصدرية، ويشير إلى إنشاء المستندات والعُقد. كما يعرض إعداد LlamaIndex لنموذج لغة من OpenAI ونموذج embedding من OpenAI. وتمثل هذه نقاطاً مرجعية مفيدة لفهم مكوّنات مسار RAG.
على المستوى المفاهيمي، يُمثَّل المحتوى بصيغة يمكن لمكوّنات الفهرسة والاسترجاع التعامل معها؛ ويُعد نموذج embedding للتمثيل الدلالي؛ ويُعد نموذج اللغة لتوليد الإجابات. أما التحليل الفعلي، وبناء العُقد، والتخزين، واستدعاءات الاستعلام، فتعتمد على تكاملات LlamaIndex ووحدة التخزين التي تختارها. لا تفترض أن قارئ المجلدات يدعم امتداداً معيناً، أو أن فهرساً محدداً يحفظ بياناته تلقائياً، أو أن استجابة الاستعلام تتضمن استشهادات، ما لم تتحقق من هذه السلوكيات في التكامل الذي تستخدمه.
حافظ على الفصل المفاهيمي بين مجموعة المستندات المصدرية والفهرس المُنشأ. فالمستندات الأصلية هي المواد التي ينبغي لمساعدك الرجوع إليها. أما عناصر الفهرس فهي بيانات مشتقة. وعندما تتغير المستندات أو إعدادات embedding، راجع إرشادات التكامل الذي اخترته لتحديث التمثيل المخزن أو إعادة بنائه. وتتضمن المراجع المتاحة نقاشاً مجتمعياً بعنوان “Persistence of Embeddings”، إضافة إلى دورة LlamaIndex بلغة JavaScript التي تدرج حفظ البيانات ضمن موضوعاتها. لكنها لا تثبت أوامر تخزين البيانات على القرص باستخدام Python الواردة في المسودة.
الخطوة الثانية: إعداد LlamaIndex مع OpenAI
يمثل التالي نمط الإعداد الذي جرى التحقق منه في مثال Hugging Face المقدّم. وهو يوضح إعدادات LlamaIndex وتكاملات OpenAI، لكنه ليس تطبيقاً كاملاً ولا ينفذ الإدخال أو الحفظ أو الاستعلام بمفرده.
from llama_index.core.settings import Settings
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
embed_model = OpenAIEmbedding(
model="text-embedding-3-small",
dimensions=256,
)
llm = OpenAI()
Settings.llm = llm
Settings.embed_model = embed_modelلاحظ ما يثبته هذا المقتطف وما لا يثبته. فهو يختار تكامل embedding واسم نموذج، ويقدم قيمة للبُعد، وينشئ تكامل OpenAI لـ LLM، ثم يعيّن كليهما عبر إعدادات LlamaIndex. ولا يحدد المصدر نموذج محادثة في استدعاء OpenAI(). لذلك لا يستبدل هذا الدليل اسم نموذج ولا يدّعي أن المُنشئ غير المقيّد يختار نموذجاً معيناً في كل إصدار أو بيئة. راجع وثائق التكامل الحالية لمعرفة الإعداد المدعوم بدقة وبيانات الاعتماد المطلوبة.
يُعد إعداد embedding جزءاً من تصميم الفهرس، وليس مجرد خيار وقت الاستعلام. وإذا غيّرت نموذج embedding أو أبعاده، فتحقق من متطلبات تكامل التخزين قبل إعادة استخدام المتجهات الموجودة. ولا تفرض المصادر المتاحة عملية لترحيل البيانات، لذلك لا تفترض إمكانية دمج المتجهات التي أُنشئت بإعدادات مختلفة أو إعادة استخدامها بالتبادل.
الخطوة الثالثة: تجهيز المستندات والبيانات الوصفية
تعتمد جودة RAG جزئياً على المحتوى المقدم إلى النظام. وينشئ مثال MongoDB الذي جرى التحقق منه كائن Document في LlamaIndex يتضمن نص المستند والبيانات الوصفية. كما يوضح استبعاد مفاتيح محددة من البيانات الوصفية عند استخدامها مع نموذج اللغة ونموذج embedding. وهذا تذكير مفيد بأن لنص المستند والبيانات الوصفية أدواراً مختلفة، وقد يحتاج كل منهما إلى معالجة مدروسة.
بالنسبة إلى مجموعة المستندات الخاصة بك، ابدأ باختيار مجموعة صغيرة من المستندات التمثيلية وافحص النص الذي ينتجه فعلياً المحمّل أو مسار المعالجة المسبقة الذي اخترته. تحقق من بقاء العناوين والجداول والأسماء والعلاقات المهمة بعد الاستخراج. وهذه خطوة تحقق عملية؛ إذ لا تضمن المصادر المقدّمة أن أي محلّل معين يتعامل بصورة صحيحة مع ملفات PDF أو DOCX أو HTML أو غيرها من الصيغ.
يمكن للبيانات الوصفية أن تصف سجلاً مصدرياً، بينما تتيح الاستبعادات التحكم في حقول البيانات الوصفية التي تؤخذ في الاعتبار خلال عمليات معينة للنموذج. ويسرد المثال حقولاً مستبعدة من بيانات LLM وembedding الوصفية، بما في ذلك حقول مثل المعرّفات وبيانات مرتبطة بالمراجعة. تعامل مع ذلك المصدر بوصفه مثالاً توضيحياً لا قائمة عامة: فالحقول المناسبة تعتمد على مستنداتك والاستخدام المقصود. وتجنب إرسال بيانات وصفية غير ذات صلة أو حساسة إلى نموذج قبل تحديد الحاجة إليها.
قبل فهرسة مجموعة كبيرة، اختبر عدداً قليلاً من المستندات من البداية إلى النهاية. وتأكد من أن النص والبيانات الوصفية التي يمثلها الإطار تتوافق مع توقعاتك. ثم أنشئ أسئلة تكون إجاباتها موجودة بوضوح في تلك المستندات، وافحص قدرة التطبيق على استرجاع أدلة مفيدة. ويسهّل هذا corpus الاختباري الصغير اكتشاف مشكلات الاستخراج أو الإعداد قبل توسيع النطاق.
الخطوة الرابعة: اختيار نهج الفهرسة والاستمرارية
يتضمن السياق الذي جرى التحقق منه تكامل مخزن المتجهات MongoDB مع LlamaIndex، إضافة إلى مراجع تثبيت الحزمتين llama-index-vector-stores-mongodb وpymongo. وهذا يثبت أن MongoDB أحد التكاملات الموثّقة في المثال المشار إليه. لكنه لا يقدم هنا تفاصيل كافية لمنحك تطبيقاً كاملاً للاتصال بـ MongoDB أو إنشاء الفهرس أو تنفيذ الاستعلام. اتبع الوثائق الحالية للتكامل لمعرفة هذه التفاصيل التشغيلية، بدلاً من نسخ وصفة اتصال مختلقة.
الاستمرارية قرار تصميم منفصل. وتتضمن المصادر مادة مجتمعية حول استمرارية embeddings، ودورة LlamaIndex بلغة JavaScript تذكر حفظ البيانات ضمن موضوعاتها. كما يناقش وصف الدورة بناء تطبيق RAG متكامل باستخدام JavaScript واستعمال أداة سطر الأوامر create-llama. وتدعم هذه المراجع اعتبار الاستمرارية قدرة وموضوعاً تعليمياً مهماً في RAG؛ لكنها لا تثبت أن نهج مجلد Python المحلي storage/ الوارد في المسودة، أو إجراء إعادة البناء، أو منطق الاستبدال الذري، يعمل كما هو مكتوب.
عند اختيار الاستمرارية لتطبيق فعلي، حدد المكوّن المسؤول عن المتجهات المخزنة وبيانات الفهرس المرتبطة بها، وكيف يعيد التكامل المختار تحميلها، وكيفية التعامل مع التحديثات. اختبر دورة الحياة—الإنشاء الأولي، وإعادة تشغيل العملية لاحقاً، وتحديث مستند، وإعادة البناء—مقابل إصدارات الواجهة الخلفية والإطار التي تنشرها فعلياً. واجعل هذه الفحوص اختبارات تنفيذية؛ ولا تستنتج السلوك من اسم مجلد أو من تكامل بلغة مختلفة.
الخطوة الخامسة: ابدأ بالإجابة عن الأسئلة والتلخيص
يمكن لمساعد RAG بسيط أن يبدأ بمهمتين مختلفتين للمستندات: الإجابة عن الأسئلة وتلخيص المحتوى. وتصف دورة agentic RAG الموثّقة من DeepLearning.AI بناء موجّه فوق مستند واحد يختار بين محرك استعلام للإجابة عن الأسئلة ومحرك استعلام للتلخيص. ثم توسّع الدورة هذا النمط ليشمل استدعاء الأدوات، واختيار الوسائط، والبحث متعدد الخطوات، والوكلاء الذين يتعاملون مع مستندات متعددة.
يساعد هذا التدرج على إبقاء المشروع الأولي قابلاً للإدارة. ابدأ بتحديد السلوك الذي يحتاج إليه المستخدمون. فإذا طرحوا أسئلة مباشرة حول مستند، فقيّم Q&A. وإذا طلبوا نظرة عامة، فقيّم التلخيص. وإذا كان على التطبيق الاختيار بين هذين السلوكين، فالموجّه هو النمط التالي المناسب. يثبت المصدر أن الدورة تدرّس هذا الموجّه، لكنه لا يقدم تطبيقاً كاملاً في المقتطف المتاح، لذلك لا يخترع هذا الدليل تطبيقاً من عنده.
بالنسبة إلى مساعد بحث، تصف الدورة المشار إليها وكيلاً يمكنه التفكير عبر الأدوات في خطوات متعددة، ووكيل مستندات متعددة يوسّع البحث عبر المستندات. وتعرض الدورة agentic RAG بوصفه مفيداً للطلبات المعقدة التي قد تتطلب جمع الأجزاء ذات الصلة وتركيب ما تقوله عدة أوراق بحثية. وهذا توسع مهم عن سير عمل الاسترجاع والإجابة الأساسي، لكنه ليس متطلباً مسبقاً لكل مساعد مستندات.
الخطوة السادسة: التقييم باستخدام أسئلة تمثيلية
اختبر النظام باستخدام أسئلة مرتبطة بالمستندات التي اخترتها. أدرج أسئلة مباشرة، وطلبات للتلخيص، وأسئلة تتطلب معلومات من أكثر من مستند إذا كان الاستخدام متعدد المستندات جزءاً من هدفك. راجع المواد المسترجعة والإجابة المُنشأة، بدلاً من الحكم على النظام بناءً على سلاسة الإجابة وحدها. تدعم المصادر المقدمة أنماط Q&A والتلخيص والبحث متعدد المستندات، لكنها لا تفرض مقياس تقييم محدداً أو تضمن مستوى معيناً من الدقة.
عندما تكون الإجابة ضعيفة، افصل بين الأسباب المحتملة. قد لا يتضمن النص المصدر الحقيقة المطلوبة؛ أو ربما غيّر الاستخراج المحتوى؛ أو قد لا يتناسب مسار الاسترجاع أو الاستعلام المختار مع السؤال؛ أو ربما تلقى نموذج الإجابة سياقاً غير مناسب. افحص كل مرحلة في التطبيق الذي تستخدمه. ولا تتعامل مع إجابة سلسة على أنها دليل على أن المستندات المسترجعة تدعمها.
بالنسبة إلى مسارات العمل agentic، تؤكد الدورة المشار إليها أيضاً أهمية تصحيح الوكيل وتوجيه أفعاله. ويناقش وصف الدرس تتبع ما يفعله الوكيل خطوة بخطوة، مع إمكانية تقديم التوجيه في المراحل الوسيطة. ويكتسب ذلك أهمية خاصة عندما يبحث مسار متعدد الخطوات في المستند الخطأ أو يتبع طريقاً غير مفيد. ابدأ بسير عمل أبسط عندما يلبي الحاجة، ولا تضف السلوك agentic إلا عندما تتطلبه المهمة.
الخطوة السابعة: التوسع إلى مستندات متعددة واستخدام الأدوات
بعد فهم سير العمل على مستند واحد، تصف مواد الدورة التي جرى التحقق منها توسيع وكيل البحث ليعمل مع مستندات متعددة. كما تغطي موجّهاً يختار بين محركات الاستعلام، واستدعاء الأدوات الذي يختار وظيفة ويستنتج وسيطاً، والاستدلال متعدد الخطوات مع استخدام الأدوات. وتقدم هذه المفاهيم خارطة طريق للمطورين الذين لا يمكن التعامل مع أسئلتهم جيداً عبر مسار استعلام ثابت واحد.
لا تخلط بين هذه القدرات في ادعاء واحد مفاده أن كل مساعد LlamaIndex يتصرف تلقائياً كوكيل بحث مستقل. فالدورة تعرضها على أنها أنماط يبنيها المتعلمون. ويختلف مساعد المستندات الأساسي عن الوكيل متعدد الخطوات في مستوى التعقيد. اختر أبسط نمط يخدم الأسئلة التي يطرحها المستخدمون فعلياً، ثم اختبر التوجيه الإضافي أو سلوك الأدوات باستخدام أمثلة ملموسة.
يمتلك المطورون الذين يفضلون JavaScript مساراً تعليمياً موثّقاً منفصلاً في السياق المقدّم. وتصف دورة تطبيقات RAG للويب باستخدام JavaScript وLlamaIndex الاستعلام عن البيانات الشخصية، واستخدام محرك استعلام موجّه عبر مصادر بيانات متعددة، وبناء واجهة خلفية وواجهة React، والتعرف إلى الاستمرارية والاستجابات المتدفقة. وهذه دورة ومسار تنفيذ مختلفان، ولا ينبغي الخلط بينهما وبين أمثلة Python الواردة في هذه المقالة.
أخطاء شائعة يجب تجنبها
- افتراض أن اختيار النموذج موثّق: يذكر الإعداد المشار إليه صراحةً
text-embedding-3-small، لكنه لا يذكر نموذج محادثة في استدعاءOpenAI(). تحقق من اختيار النموذج الذي تستخدمه. - الخلط بين الاستمرارية ووصفة تخزين محددة: تتناول المواد التعليمية المقدّمة الاستمرارية، لكن تنفيذ التخزين المحلي باستخدام Python في المسودة الأصلية غير موثّق فيها.
- التعامل مع كل سؤال على أنه المهمة نفسها: تميز الدورة المشار إليها بين Q&A والتلخيص، وتعلّم التوجيه بينهما.
- إضافة وكيل قبل التحقق من الأساسيات: يُعد استخدام الأدوات متعدد الخطوات والبحث في مستندات متعددة نمطين متقدمين في الدورة المشار إليها، وليسا متطلبين تلقائيين لكل تطبيقات RAG.
- نشر الشيفرة من دون تنفيذها: تتضمن المسودة الأصلية أخطاء في الأسطر الجديدة وأوامر shell. اختبر كل كتلة شيفرة في البيئة المحددة قبل النشر.
أهم النقاط
- يمكن إعداد LlamaIndex باستخدام تكامل LLM من OpenAI وتكامل embedding من OpenAI؛ ويستخدم المثال المقدّم
text-embedding-3-smallببُعد يبلغ ٢٥٦. - تغطي المواد التي جرى التحقق منها تجهيز المستندات والعُقد، وتكامل مخزن المتجهات MongoDB، والاستمرارية بوصفها موضوعاً أوسع في RAG.
- تشمل أنماط agentic RAG التي تصفها DeepLearning.AI موجّه Q&A والتلخيص، واستدعاء الأدوات، والبحث متعدد الخطوات، والوكلاء الذين يتعاملون مع مستندات متعددة.
- لا تتحقق المصادر المتاحة من تطبيق Python الكامل الوارد في المسودة الأصلية، أو سير عمل التخزين المحلي، أو الادعاءات التشغيلية الخاصة بنموذج معين.
استخدم الإعداد المشار إليه كنقطة بداية مرجعية، ثم تحقق من سلوك الإدخال والتخزين والاسترجاع والاستعلام مقابل الوثائق الحالية لتكاملات LlamaIndex التي اخترتها. ابدأ بمهمة مستندات واضحة، وافحص النتائج على مجموعة صغيرة، ولا تضف التوجيه أو سلوك الوكيل متعدد الخطوات إلا عندما تتطلبه حالة الاستخدام.