Discourse AI - التضمينات

:bookmark: يغطي هذا الموضوع إعداد وحدة تضمينات (Embeddings) الخاصة بإضافة Discourse AI. ويوضح ماهية التضمينات، وكيفية استخدامها، وكيفية إعدادها.

:person_raising_hand: مستوى المستخدم المطلوب: مسؤول (Administrator)

تُعد التضمينات مكونًا حاسمًا في إضافة Discourse AI، حيث تتيح ميزات مثل المواضيع ذات الصلة والبحث بالذكاء الاصطناعي. سيرشدك هذا الدليل خلال إعداد واستخدام التضمينات في مثيل Discourse الخاص بك.

ما هي التضمينات (Embeddings)؟

التضمينات هي تمثيلات رقمية للنص تلتقط المعنى الدلالي. في Discourse، تُستخدم لـ:

  1. إنشاء مواضيع ذات صلة في أسفل صفحات المواضيع
  2. تمكين وظيفة البحث الدلالي

إعداد التضمينات

للعملاء المستضافين (Hosted Customers)

إذا كنت عميلاً مستضافًا، فسيتم تكوين التضمينات مسبقًا. يمكنك ببساطة تمكين ميزات الذكاء الاصطناعي التي تعتمد عليها.

للتركيبات المستضافة ذاتيًا (Self-hosted Instances)

إذا كنت تستضيف بنفسك، فارجع إلى دليل Discourse AI للاستضافة الذاتية للحصول على إرشادات إعداد مفصلة.

تكوين تعريفات التضمين (Embedding Definitions)

يتم الآن تكوين نماذج التضمين كـ تعريفات للتضمين (Embedding Definitions) في واجهة المستخدم للمسؤول. انتقل إلى AdminAI plugin → علامة التبويب Embeddings. عند إضافة تعريف تضمين جديد، يمكنك الاختيار من بين الأنماط المحددة مسبقًا (presets) أو تكوين واحد يدويًا.

الأنماط المحددة مسبقًا المتاحة تشمل:

  • text-embedding-3-large (OpenAI)
  • text-embedding-3-small (OpenAI)
  • text-embedding-ada-002 (OpenAI)
  • gemini-embedding-001 (Google)
  • bge-large-en (Hugging Face)
  • bge-m3 (Hugging Face)
  • multilingual-e5-large (Hugging Face)

يتضمن كل تعريف تضمين: اسم العرض، والموفر (provider)، وعنوان URL، ومفتاح واجهة برمجة التطبيقات (API key) (أو سر الذكاء الاصطناعي (AI Secret))، والمُجزئ (tokenizer)، والأبعاد (dimensions)، ووظيفة المسافة (distance function)، والحد الأقصى لطول التسلسل (max sequence length)، وموجهات التضمين/البحث الاختيارية (optional embed/search prompts).

تكوين التضمينات

انتقل إلى AdminPluginsDiscourse AI، وتأكد من تمكين الإعدادات التالية.

  1. ai embeddings enabled: تشغيل أو إيقاف وحدة التضمينات
  2. ai embeddings selected model: تحديد تعريف التضمين الذي سيتم استخدامه لتوليد التضمينات

الإعدادات الاختيارية التي يمكن تعديلها…

  • AI embeddings generate for pms: تحديد ما إذا كان سيتم إنشاء تضمينات للرسائل الخاصة
  • AI embeddings semantic related topics enabled: تمكين أو تعطيل ميزة “المواضيع ذات الصلة”
  • AI embeddings semantic related topics: الحد الأقصى لعدد المواضيع ذات الصلة التي سيتم عرضها
  • AI embeddings semantic related include closed topics: تضمين المواضيع المغلقة في نتائج المواضيع ذات الصلة
  • AI embeddings semantic related age penalty: تطبيق عقوبة عمرية أسية على المواضيع في النتائج ذات الصلة (0.0 يعطل، والقيم الأعلى تعاقب المواضيع الأقدم أكثر)
  • AI embeddings semantic related age time scale: المقياس الزمني بالأيام لحساب عقوبة العمر (الافتراضي: 365)
  • AI embeddings semantic search enabled: تمكين البحث بالذكاء الاصطناعي في الصفحة الكاملة
  • AI embeddings semantic quick search enabled: تمكين خيار البحث الدلالي في نافذة البحث المنبثقة
  • AI embeddings semantic search use hyde: تمكين HyDE (تضمين المستند الافتراضي) للبحث الدلالي
  • AI embeddings semantic search hyde agent: وكيل الذكاء الاصطناعي المستخدم لتوسيع مصطلحات البحث عند تمكين HyDE

الموفرون (Providers)

تدعم إضافة Discourse AI العديد من موفري التضمينات:

  • OpenAI
  • Google
  • Hugging Face (للنماذج مفتوحة المصدر/الأوزان المفتوحة)
  • Cloudflare Workers AI

بالنسبة للعملاء المستضافين، توفر Discourse تعريفات تضمين مُعدة مسبقًا (مُبذورة) تعمل فورًا.

الميزات

المواضيع ذات الصلة (Related Topics)

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

البحث بالذكاء الاصطناعي (AI Search)

تُشغّل التضمينات خيار البحث الدلالي في واجهة البحث بالصفحة الكاملة.

يمكن للبحث الدلالي استخدام HyDE اختياريًا (تضمين المستند الافتراضي). عند التمكين عبر ai embeddings semantic search use hyde، يتم توسيع مصطلح البحث باستخدام وكيل الذكاء الاصطناعي المكوّن في ai embeddings semantic search hyde agent. ثم يتم تحويل البحث الموسع إلى متجه ويُستخدم للعثور على مواضيع مشابهة. تضيف هذه التقنية بعض التأخير إلى البحث ولكنها يمكن أن تحسن النتائج.

عند اختيار وكيل لـ HyDE، اختر نموذجًا سريعًا مثل Gemini Flash أو Claude Haiku أو GPT-4o Mini أو أحدث النماذج المتاحة.

توليد التضمينات

يتم إنشاء التضمينات تلقائيًا للمشاركات الجديدة. لتوليد تضمينات للمحتوى الموجود:

  1. سيقوم Discourse تلقائيًا بملء التضمينات للمواضيع القديمة عبر وظيفة مجدولة تعمل كل 5 دقائق
  2. تقوم عملية الملء الخلفي بمعالجة المواضيع بترتيب النشاط الحديث أولاً

الأسئلة الشائعة (FAQs)

س: كيف يتم تحديد المواضيع ذات الصلة؟
ج: تعتمد المواضيع ذات الصلة فقط على التضمينات، والتي تشمل العنوان والفئة والعلامات ومحتوى المشاركات

س: هل يمكنني استبعاد مواضيع معينة من المواضيع ذات الصلة؟
ج: نعم، يوجد إعداد للموقع لإزالة المواضيع المغلقة من النتائج

س: هل تعمل التضمينات للمشاركات التاريخية؟
ج: نعم، سيقوم النظام تلقائيًا بملء التضمينات لجميع المحتويات الخاصة بك

موارد إضافية

17 إعجابًا

عمل رائع، شكراً جزيلاً أولاً، ولكن لا يمكنني رؤية مواضيع مشابهة تحت المواضيع، بطريقة ما، إعداداتي هكذا، لقد أضفت مفتاح openai. البحث الدلالي يعمل، ولكن كيف يمكنني عرض مقالات مشابهة تحت المواضيع؟

إذا كنت ترغب في استخدام OpenAI لإنشاء التضمينات، فيجب عليك تعيين ai embeddings model على text-embedding-ada-002.

3 إعجابات

كيف يتم جدولة الوظائف لإنشاء التضمينات؟ من الكود، يبدو أن التضمينات يتم إنشاؤها فقط عند عرض الصفحة وتكون التضمينات مفقودة. هل هناك طريقة لإنشاء تضمينات للموقع بأكمله عند تشغيل الميزة؟

إعجابَين (2)

يمكنك أيضًا تشغيل rake ai:embeddings:backfill لإنشاء تضمينات لجميع المواضيع بحماس.

8 إعجابات

اقتراح

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


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

بينما أعرف ما يعنيه RAG في هذا المنشور الافتتاحي، كم عدد الأشخاص الذين يعرفون ذلك حقًا؟

ما هو RAG (انقر فوق المثلث للتوسيع)

كيف تعمل روبوتات الدردشة المتخصصة في المجال؟ نظرة عامة على الاسترجاع المعزز بالتوليد (RAG)


ملاحظة: لم أكن أعرف الموضوع الذي يجب نشره فيه، ولكن نظرًا لأنه يحتاج إلى تضمينات للعمل، فقد نشرته هنا. يرجى نقل هذا إذا كان منطقيًا في مكان آخر أو مع تغير مكون Discourse AI الإضافي.

إعجاب واحد (1)

هل التضمينات هي المتغير الوحيد عند تحديد “المواضيع ذات الصلة”؟ أم أن هناك عوامل أخرى تؤخذ في الاعتبار (مثل المؤلف، درجة الموضوع، عمر الموضوع، الفئة، إلخ)؟

3 إعجابات

فقط التضمينات، ولكنها تحتوي على العنوان والفئة والعلامات والمشاركات. يوجد إعداد للموقع لإزالة المواضيع المغلقة من النتائج أيضًا.

5 إعجابات

تم تقسيم 7 مشاركات إلى موضوع جديد: هل البحث الدلالي للصفحات الكاملة باللغة الإنجليزية فقط؟

تم تقسيم منشورين إلى موضوع جديد: الاختلافات في زمن استجابة البحث بين البحث الدلالي بالذكاء الاصطناعي والبحث بالكلمات المفتاحية

أتمنى لو كنت قد عثرت على هذا قبل بضعة أشهر. لقد أنشأت بالفعل تضمينات باستخدام bge-small-en-v1.5 واستضفتها في قاعدة بيانات خارجية.

سأرى ما إذا كان يمكن دمجها في هذا الإعداد “القياسي”!

أجد خطأً بسيطًا في الإصدار الأخير أدى إلى فشل rake ai:embeddings:backfill:

root@nbg-webxj:/var/www/discourse# rake ai:embeddings:backfill
rake aborted!
NameError: uninitialized constant Parallel (NameError)

  Parallel.each(topics.all, in_processes: args[:concurrency].to_i, progress: "Topics") do |t|
  ^^^^^^^^
/var/www/discourse/plugins/discourse-ai/lib/tasks/modules/embeddings/database.rake:27:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => ai:embeddings:backfill
(See full trace by running task with --trace)

أشتبه في أن السبب هو أن gem parallel غير مثبت في هذا المكون الإضافي، ولا في نواة Discourse (أجد واحدًا فقط في الكتلة if ENV[\"IMPORT\"] == \"1\": gem "parallel", require: false).

أجد أن gem ruby-progressbar مطلوب أيضًا لتنفيذ rake ai:embeddings:backfill.

لقد قمت بإنشاء PR بسيط على Github:

إعجابَين (2)

ملاحظة للآخرين بأن طريقة rake هذه تبدو وكأنها تم تخفيض رتبتها/إهمالها جزئيًا وفقًا لـ Falco على GitHub:

شكرًا على طلب السحب @fokx، لكنني تركتها عن غير قصد حيث سقطت مهمة rake من الاستخدام ويجب استخدامها فقط في مناسبات نادرة من قبل مشغلين ذوي خبرة يمكنهم بسهولة تثبيتها خارج النطاق.

هل لم يعد خيار البحث الدلالي يظهر في تلك القائمة المنسدلة وبدلاً من ذلك يتم فهمه أو تمكينه من خلال تبديل الذكاء الاصطناعي؟

إعجاب واحد (1)

هل يمكنك تأكيد ما إذا كانت التضمينات ستعمل فقط على المنشورات بعد التثبيت أم أنها ستسمح لنا أيضًا بالبحث الدلالي في جميع المنشورات التاريخية؟ آمل أن يكون الأخير! شكرًا.

إعجاب واحد (1)

إنه لاحقًا، حيث سيقوم تلقائيًا بملء التضمينات لجميع المحتوى الخاص بك.

4 إعجابات

أحاول إعداد تضمينات الذكاء الاصطناعي باستخدام Gemini Flash ولكني لا أستطيع جعله يعمل. لا يمكنني العثور على أوصاف/أمثلة جيدة لجميع حقول الإعدادات، لذلك ربما فاتني واحد أو اثنان مهمان. لا أعرف ما إذا كان إعداد ‘ai_embeddings_model’ مطلوبًا، ولكن إذا قمت بتعيينه على ‘gemini’ أحصل على الخطأ التالي…

لم أتمكن من العثور على الإعداد ‘ai_gemini_api_key’. لدي Gemini Flash معد كنموذج لغوي كبير مع مفتاح API وهذا يعمل في أماكن أخرى، على سبيل المثال، التلخيص، ولكنني أفترض أن هذا يطلب إدخال مفتاح API في مكان آخر؟

أفترض أن هذا سيعمل مع OpenAI أيضًا، أليس كذلك؟

سيكون من الرائع إذا كان بإمكانه دعم واجهة برمجة تطبيقات الدُفعات الخاصة بهم (خصم 50%)

نعم، ولكن في الوقت الحاضر نقوم بإعادة التعبئة تلقائيًا في الخلفية، لذا فهذا ليس إلزاميًا.

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

إعجاب واحد (1)

شكرًا. هل أفهم بشكل صحيح أن “backfill” هو عندما يحدث التجهيز بالمتجهات (vectorization)؟ عند التبديل بين النماذج، هل تحتاج المتجهات إلى إعادة حساب (هل هي “خاصة”)؟ أفترض ذلك.

سيكون من المفيد معرفة كيف تتناسب تكاليف استخدام مكدس واجهة برمجة تطبيقات OpenAI مع الاستثمار في خادم يعمل بوحدة معالجة الرسومات (GPU) مع حل مفتوح المصدر. هل هناك صيغة أو أي طريقة لتقدير عدد الرموز (tokens) المستخدمة؟ نحن نستخدم واجهة برمجة التطبيقات فقط لتجهيز المشاركات بالمتجهات، وليس لحساب المسافات بين المتجهات، صحيح؟ لذا، يعتمد عدد الرموز المستخدمة على مقدار المحتوى الذي لدينا، صحيح؟

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