تخطّ إلى المحتوى
AISI
𝕏
دليل إرشادي

بناء أول خط RAG إنتاجي بـ Haystack

تركيب Haystack، استيعاب PDF عربية، وبناء pipeline استجواب موثق.

18 دقائق قراءة RAGResearch

مقدمة في بناء RAG الإنتاجي

بناء نظام RAG (Retrieval-Augmented Generation) للنماذج التجريبية أمر سهل، ولكن نقله إلى بيئة إنتاجية (Production) موثوقة يتعامل مع ملفات PDF عربية ويقدم إجابات موثقة يتطلب إطار عمل معماري صلب. يبرز Haystack (من تطوير deepset) كأحد أفضل الأطر في هذا المجال بفضل مرونته العالية وتصميمه المبني على خطوط الأنابيب (Pipelines). في هذا الدليل، سنبني خط RAG متكامل يعتمد على Qdrant كقاعدة بيانات اتجاهية، و Ollama كمحرك لغوي محلي.

مكونات النظام (Tech Stack)

  • Haystack 2.x: الإطار البرمجي الأساسي بلغة Python لإدارة مسارات البيانات.
  • Qdrant: قاعدة بيانات متجهات (Vector Database) سريعة جداً وتدعم التخزين المحلي والذاكرة.
  • Ollama: لتشغيل نموذج لغوي (مثل Llama-3) محلياً بدون إرسال البيانات لخوادم خارجية.
  • PyMuPDF أو PDFToText: مكتبات مساعدة لمعالجة ملفات الـ PDF العربية واستخراج النصوص بشكل سليم.

خطوات التنفيذ البرمجي

1. استيعاب الوثائق (Indexing Pipeline)

خط الأنابيب الأول هو المسؤول عن أخذ ملفات الـ PDF، قراءتها، تقطيعها، تحويلها لمتجهات، وحفظها في Qdrant. في Haystack، نقوم بتعريف الـ Components التالية وتوصيلها ببعضها:

  1. PyMuPDFToDocument: لقراءة ملفات الـ PDF. بالنسبة للغة العربية، قد تحتاج لتمرير معلمات خاصة للتعامل مع اتجاه النص (RTL).
  2. DocumentSplitter: لتقسيم النص إلى قطع (Chunks). يُنصح بتقسيم النص بناءً على الكلمات (مثلاً 250 كلمة لكل قطعة) مع وجود تداخل (Overlap) بنسبة 10%.
  3. SentenceTransformersDocumentEmbedder: لتحويل النص إلى أشعة (Vectors). استخدم نموذجاً يدعم العربية مثل paraphrase-multilingual-mpnet-base-v2.
  4. QdrantDocumentStore: العقدة الأخيرة التي تحفظ المتجهات الوثائقية والـ Metadata المرفقة.

يتم تشغيل هذا الـ Pipeline مرة واحدة أو عند إضافة ملفات جديدة للأرشيف.

2. بناء خط الاستجواب (Query Pipeline)

خط الأنابيب الثاني هو الذي يعمل عندما يطرح المستخدم سؤالاً. يتكون من العقد التالية:

  1. SentenceTransformersTextEmbedder: يحول سؤال المستخدم (العربي) إلى متجه باستخدام نفس نموذج التضمين السابق.
  2. QdrantEmbeddingRetriever: يبحث في قاعدة البيانات عن أقرب القطع النصية لموجه السؤال (استرجاع أفضل 5 نتائج مثلاً).
  3. PromptBuilder: يأخذ القطع المسترجعة ويقوم بتمريرها في قالب نصي مع السؤال. مثلاً: “بناءً على المستندات التالية فقط: {documents}، أجب عن السؤال التالي بدقة: {query}”.
  4. OllamaGenerator: يرسل الـ Prompt النهائي إلى نموذج Ollama المدمج لينتج الإجابة النهائية باللغة العربية.

3. الربط والتشغيل (Execution)

باستخدام واجهة Haystack البرمجية، نقوم بتعريف الـ Pipeline وربط هذه العقد (Components). عند التشغيل pipeline.run()، سيتدفق سؤال المستخدم عبر هذه العقد، ليعود في النهاية بنتيجة نصية مُحكمة ومُدعمة بالمستندات الأصلية كمراجع.

نصائح لبيئة الإنتاج (Production Tips)

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

الخلاصة

بناء نظام RAG إنتاجي يتطلب أكثر من مجرد كود بسيط؛ يتطلب معمارية خطوط أنابيب (Pipelines) مرنة. باستخدام Haystack، أنت لا تبني أداة تجريبية، بل نظاماً برمجياً يمكن اختباره، توسيعه، وتحديث أجزائه (مثل تغيير قاعدة Qdrant إلى Elasticsearch لاحقاً) دون إعادة كتابة النظام بالكامل.