محرك بحث ذكي لأرشيف بحثي: استعلام طبيعي على آلاف الوثائق

مقدمة حول سير العمل

سير عمل لمراكز الأبحاث والباحثين: تحويل أرشيف PDFs و DOCX و notes (آلاف الوثائق) إلى قاعدة معرفة قابلة للسؤال بلغة طبيعية، مع citations دقيقة وتحديث آلي للأرشيف الجديد.

الهدف من سير العمل

تحويل أرشيف ثابت (50,000+ وثيقة في بعض السيناريوهات) إلى أداة بحث ذكية تجيب على أسئلة معقدة بلغة طبيعية وتشير إلى المصدر الدقيق (ملف + صفحة). تخفيض زمن البحث عن معلومة من ساعات إلى ثوانٍ.

الأدوات والتقنيات المستخدمة

تم استخدام الأدوات التالية: open-webui و ollama و qdrant و tika و n8n و tesseract

تفاصيل تنفيذ سير العمل

  • مستوى الصعوبة: متوسط
  • الوقت المتوقع للإعداد:
  • محفز التشغيل (Trigger):

خطوات العمل (الآلية)

  1. إعداد البنية: Open WebUI + Ollama + Qdrant كلها على Coolify (أو VPS مخصص بـ 32GB RAM للنماذج الكبيرة + GPU إن أمكن).
  2. تنزيل bge-m3 كـ embedding model، تكوين Open WebUI لاستخدامه (Admin → Documents → Embedding).
  3. نشر Apache Tika (docker apache/tika) للاستخراج، Tesseract OCR (tesseract-ocr-ara لتعليم العربية).
  4. إنشاء Qdrant collection باسم ‘research_archive’ مع distance metric=cosine، vector size=1024 (لـ bge-m3).
  5. Initial ingestion: workflow n8n يمر على كل ملف في الأرشيف. لكل ملف: استخراج، OCR (إن لزم)، تقسيم، embedding، تخزين في Qdrant مع metadata (filename, page, date, author, project).
  6. تنظيم Collections في Open WebUI تطابق Qdrant collections — كل مشروع بحث له collection.
  7. اختبار أولي بأسئلة بسيطة: ‘لخّص الفصل الثالث من تقرير 2023’، ‘حدد كل ذكر لـ X في مقالات 2020-2024’.
  8. ضبط Top-K (5-15) و chunk size (800-1200) حسب جودة الإجابات. وثائق كثيفة المعلومات تستفيد من chunk أصغر.
  9. إضافة prompt نظام للباحثين: ‘أنت مساعد بحثي. أجب فقط من السياق المرفق. اذكر اسم الملف ورقم الصفحة لكل ادعاء. إذا لم تجد إجابة، قل بصراحة: لم أجد معلومات كافية.’
  10. أتمتة الـ rescan: workflow n8n يفحص مجلد الأرشيف يومياً. ملف جديد → نفس pipeline الـ ingestion.
  11. إشعارات: إذا باحث محدد سجّل اهتماماً بموضوع (مثلاً: ‘النوع الاجتماعي في الحرب’)، n8n يقارن embedding الوثائق الجديدة مع query embedding المحفوظ، يرسل تنبيه عند ظهور وثائق ذات صلة.
  12. Reranker اختياري للأرشيفات الكبيرة جداً (50k+ وثيقة): استخدم bge-reranker-v2-m3 لإعادة ترتيب الـ Top-K قبل إرسالها للنموذج. يحسّن الدقة 10-20%.
  13. Dashboard إحصاءات في APITable: أكثر الأسئلة، أكثر الوثائق استعلاماً، الفجوات في الأرشيف (أسئلة لا تجد إجابة).

وصف مفصل

## المشكلة مركز أبحاث متراكم لديه أرشيف عمره عقود: مقالات أكاديمية مُحمَّلة، تقارير حقوقية، وثائق ميدانية، محاضر اجتماعات، مقابلات مفرغة. البحث بـ Ctrl+F داخل كل ملف غير عملي. Google Drive search سطحي. متطلبات الباحث: “ما المنهجيات المستخدمة في دراسات عام 2020 حول موضوع X؟” — سؤال لا يجيب عنه أي محرك بحث تقليدي. ## المُدخلات – أرشيف وثائق متعدد الصيغ (PDF نصية، PDF ممسوحة، DOCX, MD, TXT) – Apache Tika أو Unstructured للاستخراج – Tesseract OCR للـ PDFs الممسوحة – embedding model: bge-m3 للعربية والإنجليزية – vector DB: Qdrant أو Chroma (Qdrant أنسب للحجم 50k+) – Ollama: qwen2.5:14b أو 32b كـ generator – Open WebUI كـ frontend للسؤال – n8n للأتمتة (rescan دوري، إضافة وثائق جديدة) ## المُخرجات – Vector index قابل للاستعلام بآلاف الوثائق – إجابات بلغة طبيعية مع citations (اسم الملف، رقم الصفحة، الفقرة) – تنبيهات للباحثين عن مواضيع يتابعونها (عند إضافة وثائق جديدة لها صلة) – تقارير دورية: أكثر الأسئلة طُرحت، أكثر الوثائق رُجِع إليها ## مخطط Mermaid “`mermaid graph LR subgraph Ingest A[Documents Folder] –> B[Tika – text extract] B –> C[Tesseract OCR if scanned] C –> D[Chunking 800 tokens] D –> E[bge-m3 embeddings] E –> F[(Qdrant Vector DB)] end subgraph Query G[Researcher in Open WebUI] –>|Question| H[Open WebUI] H –> I[Embed query] I –> F F –>|Top-K chunks| J[Ollama qwen2.5] J –>|Answer + citations| H H –> G end K[New documents] -.daily scan.-> A “` ## نقاط الفشل – OCR على نصوص عربية رديئة: تشوّه في النص. الحل: Tesseract مع نموذج عربي حديث + بشكل أمثل تدريب نموذج OCR على نمط الوثائق المحدد للمنظمة. – النموذج يجيب من ذاكرته لا من الوثائق: prompt النظام يجب أن يكون صارماً + temperature منخفض (0.2-0.3). – Hallucination في citations: النموذج يخترع أرقام صفحات. الحل: تحقق automated — استخراج citations من الجواب، التأكد أنها تطابق metadata الـ chunks المسترجعة. – البحث على وثائق بلغات متعددة (عربي + إنجليزي مختلطين): bge-m3 multi-lingual لكن النتائج قد تتذبذب. الحل: collections منفصلة لكل لغة، أو cross-lingual reranker. – حجم الأرشيف يتجاوز Qdrant memory: الحل: Qdrant على disk-based storage مع caching، أو scaling أفقي. – وثائق محمية بكلمة مرور: Tika يفشل. الحل: قائمة استثناءات يدوية، أو فك الحماية يدوياً قبل الـ ingestion. ## نقاط المراجعة البشرية – كل إجابة من النموذج تذكر مصادر — الباحث يتحقق من المصدر قبل الاستشهاد – النموذج لا يستبدل القراءة الأكاديمية — هو أداة دلالة على وثائق ذات صلة – نتائج الـ rerank الآلي لا تُعتمد كنهائية للأبحاث الجدية — مراجعة بشرية للوثائق المرتبة – تنبيهات الاهتمام للباحثين هي اقتراحات — هم يقررون ما إذا كانت الوثيقة فعلاً ذات صلة – Glossary أكاديمي يبنيه الفريق ويُغذّى في prompt النظام لضمان دقة المصطلحات ## اعتبارات الخصوصية الأرشيف البحثي قد يحوي: • وثائق غير منشورة (مسودات، مقالات قيد المراجعة). • بيانات مشاركين في دراسات (مقابلات، شهادات). • مراسلات داخلية حساسة. الحماية: • كل البنية محلية. لا يخرج شيء. • صلاحيات Open WebUI الدقيقة: كل باحث يرى Collections المخوّل لها. • audit logs لكل استعلام: من سأل ماذا، متى. مهم للمشاريع التي تشترط ذلك. • Backups مشفّرة، رحلة آمنة. • للوثائق التي تحوي PII (بيانات مشاركين)، فكّر في تشخيرها (pseudonymization) قبل الـ ingestion — استبدل الأسماء بـ معرّفات. ## ملاحظات الصيانة إعادة فهرسة دورية: مع تطور embedding models، النموذج الجديد قد يعطي نتائج أفضل. خطّط لـ re-embedding سنوياً. مراقبة جودة الإجابات شهرياً (samples). تحديث Glossary الأكاديمي مع نمو الأرشيف. أرشفة الوثائق القديمة جداً إلى collection منفصل (ليست في الـ default search لتسريع الاستعلامات الأخدث).