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

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

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

ما هي التضمينات؟

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

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

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

للعملاء المستضافين

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

للمثيلات المستضافة ذاتيًا

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

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

انتقل إلى AdminSettingsDiscourse 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 search enabled: تمكين البحث بالذكاء الاصطناعي على كامل الصفحة
  • AI embeddings semantic search hyde model: النموذج المستخدم لتوسيع الكلمات الرئيسية للحصول على نتائج أفضل أثناء البحث الدلالي

المزودون

ضمن إعدادات المسؤول، انتقل إلى علامة التبويب AI plugin → Embeddings لتكوين أي إعدادات متعلقة بالمزود مثل مفاتيح API.

يدعم Discourse AI العديد من مزودي التضمينات:

  • تضمينات Discourse المستضافة (موصى بها والافتراضية)
  • OpenAI
  • Google
  • نماذج مفتوحة المصدر عبر Hugging Face
  • خيارات مخصصة

الميزات

المواضيع ذات الصلة

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

البحث بالذكاء الاصطناعي

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

يعتمد البحث الدلالي على HyDE (Hypothetical Document Embedding). نقوم بتوسيع مصطلح البحث باستخدام نموذج لغوي كبير توفره. بمجرد التوسيع، نقوم بتحويل البحث الموسع إلى متجه والبحث عن مواضيع مشابهة. تضيف هذه التقنية بعض التأخير إلى البحث وتحسن النتائج.

عند تحديد نموذج لـ hyde عبر ai embeddings semantic search hyde model، تأكد من اختيار نموذج سريع مثل Gemini Flash أو Claude Haiku أو GPT4o Mini أو أحدث النماذج المتاحة.

إنشاء التضمينات

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

  1. يتم إنشاء التضمينات عند عرض صفحة إذا كانت مفقودة
  2. سيقوم Discourse تلقائيًا بإعادة ملء التضمينات للمواضيع القديمة.

الأسئلة الشائعة

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

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

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

موارد إضافية

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) المستخدمة؟ نحن نستخدم واجهة برمجة التطبيقات فقط لتجهيز المشاركات بالمتجهات، وليس لحساب المسافات بين المتجهات، صحيح؟ لذا، يعتمد عدد الرموز المستخدمة على مقدار المحتوى الذي لدينا، صحيح؟

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