مساعد معرفة Nextcloud: AI يجيب من ملفات الشركة بدون رفعها للخارج
سير عمل يحوّل Nextcloud من مساحة تخزين ملفات إلى قاعدة معرفة ذكية: كل ملف يُرفع يُفهرس تلقائياً، يمكن للفريق سؤال 'أين معلومة X؟' أو 'لخّص المستند Y' من تطبيق Nextcloud نفسه.
الهدف من مسار العمل
تفعيل البحث الذكي عبر ملفات الفريق المخزّنة في Nextcloud دون الحاجة لرفعها لأي خدمة سحابية. الفريق يستخدم Nextcloud كالعادة، الـ AI يعمل في الخلفية ويُجيب عند الطلب.
مخطط البنية والربط الهندسي
خطوات التشغيل التفصيلية
الخطوات
التفاصيل البرمجية والتهيئة
## المشكلة فرق تستخدم Nextcloud لتخزين ومشاركة الملفات. مع نمو المحتوى (آلاف الملفات على عدة سنوات)، البحث عن معلومة يصبح صعباً. Nextcloud Search يعمل على أسماء الملفات والنصوص الحرفية، لكن لا يفهم استعلامات بلغة طبيعية مثل 'ما الميزانية المخصصة للمشروع X في تقارير 2023؟'. ## المُدخلات - Nextcloud instance مُعَدّ ويُستخدم من الفريق - Apache Tika لاستخراج النصوص - Ollama: qwen2.5:14b محلياً - embedding model: bge-m3 - Qdrant أو Chroma للـ vector storage - n8n لـ pipeline الفهرسة والاستعلام - Webhook من Nextcloud عند رفع/تعديل ملف ## المُخرجات - Vector index متزامن مع محتوى Nextcloud الفعلي - Chat interface (Open WebUI أو Nextcloud Talk bot) للأسئلة على المحتوى - إجابات مع citations: اسم الملف، المسار في Nextcloud، رابط مباشر - تنبيهات للفريق عند إضافة ملفات بمواضيع ذات اهتمام ## مخطط Mermaid ```mermaid graph TD A[User uploads file to Nextcloud] --> B[Nextcloud Flow webhook] B --> C[n8n receives event] C --> D{File type?} D -->|PDF/DOCX/MD/TXT| E[Tika extract text] D -->|Other| F[Skip] E --> G[Chunk 800 tokens] G --> H[bge-m3 embedding] H --> I[(Qdrant - upsert with file_id)] J[User question in Open WebUI/Talk bot] --> K[Embed query] K --> I I -->|Top-K| L[Ollama qwen2.5] L -->|Answer + Nextcloud links| J M[File deleted] -.event.-> C C -->|Delete from Qdrant| I ``` ## نقاط الفشل - Nextcloud Flow لا يدعم كل أنواع الأحداث المطلوبة: قد تحتاج external script يفحص دورياً. - ملفات كبيرة جداً (>50MB): Tika قد يفشل أو يأخذ وقتاً طويلاً. الحل: حد أقصى للحجم، إشعار للمستخدم. - ملفات بصلاحيات حساسة: الـ pipeline يجب أن يحترم صلاحيات Nextcloud — لا يفهرس ملفات لا يستطيع المستخدم العادي رؤيتها. وإلا تسريب. - تكرار الفهرسة: ملف يُعَدَّل 10 مرات في دقيقة يُعاد فهرسته 10 مرات. الحل: debounce في n8n (انتظار 5 دقائق بعد آخر تعديل قبل الفهرسة). - Qdrant out-of-sync: ملف حُذِف لكن Qdrant لم يُحدَّث. الحل: cron job أسبوعي يفحص الـ consistency. - Encoding في metadata: أسماء ملفات عربية قد تظهر مشوّهة. تأكد من UTF-8 في كل الـ pipeline. - الاستعلام يرجع ملفاً قديم النسخة: تحقق من last_updated قبل تقديم الإجابة. ## نقاط المراجعة البشرية - الإجابات تحوي روابط لملفات Nextcloud — المستخدم يفتح الملف ويتحقق - النموذج يفهرس ولا يفسّر السياسات: لا يقرر بل يرشد إلى الوثيقة - للملفات الحساسة (HR، مالي)، صلاحيات الـ index يجب أن تطابق صلاحيات Nextcloud بدقة - مراجعة دورية للـ logs: هل يصل المستخدمون لمعلومات لا يحق لهم؟ إذا نعم، خلل في الصلاحيات - إجابات بـ confidence منخفض تُمَيَّز للمستخدم: 'لم أجد إجابة قاطعة، الملفات التالية قد تساعد...' ## اعتبارات الخصوصية البنية كلها على بنية المنظمة. لا يخرج شيء. تحديات: • الصلاحيات: يجب أن تحترم Qdrant صلاحيات Nextcloud. حلان: filtering عند الاستعلام بناء على هوية المستخدم، أو collections منفصلة لكل مجموعة صلاحيات. • Audit: من سأل ماذا — يحفظ. • الملفات الحساسة (مالية، طبية، HR): قد ترغب في استبعادها من الفهرسة بالكامل عبر tag أو folder. • embedding model يعالج كل النص محلياً، لا يخرج. • نسخ احتياطي لـ Qdrant بنفس مستوى أمان Nextcloud. ## ملاحظات الصيانة إعادة فهرسة كاملة سنوياً (embedding model قد يتطور). مراقبة حجم Qdrant — مع نمو Nextcloud، Qdrant ينمو خطياً. تنظيف دوري للنقاط الـ orphaned (ملفات حُذِفت لكن Qdrant لم يلاحظ). اختبار permissions كل ربع سنة بمحاكاة مستخدم بصلاحيات محدودة.