شخصية Discourse AI، دعم التحميل

يمكنك الآن تضمين أجزاء كبيرة من النصوص في شخصيات الذكاء الاصطناعي الخاصة بك!

يقدم هذا فوائد متعددة:

  1. يمكنك تقديم أجزاء كبيرة من النصوص إلى روبوتات الذكاء الاصطناعي المخصصة الخاصة بك والتي لا توجد في تدريب النماذج. (على سبيل المثال: وثائق التدريب الداخلية، التقارير الداخلية)

  2. يمكنك تأريض الشخصية بشكل أفضل ببيانات ملموسة (حتى لو كانت موجودة في مجموعة تدريب النموذج) مما يمكن أن يساعد النموذج في الاستشهاد بالمعلومات المحددة بشكل صحيح وزيادة جودة النتائج.

لإضافة تحميلات:

  1. قم بإنشاء شخصية جديدة باستخدام الواجهة /admin/plugins/discourse-ai/ai-personas/.

  2. قم بتحميل ملفات النصوص التي ترغب في تضمينها في شخصيتك

:information_source: قبل تحميل الملفات، يرجى إضافة الامتدادات ذات الصلة ( .md و .txt) عبر إعداد الموقع authorized extensions حتى يمكن استخدامها بواسطة الشخصية

  1. قم بضبط خيارات الفهرسة حسب ما تراه مناسبًا

المتطلبات الأساسية

لكي تعمل الميزة، ستحتاج إلى تمكين ai_embeddings_enabled وتكوين ai_embeddings_model.

يدعم Discourse AI عددًا كبيرًا جدًا من نماذج التضمين.

يحصل عملاؤنا المستضافون على وصول مجاني إلى نموذج bge-large-en المتطور.

يمكن للمستضيفين الذاتيين أو الأشخاص الذين يرغبون في المزيد من الخيارات استضافة نموذج تضمين ذاتيًا أو استخدام نماذج من OpenAI و Google (Gemini) والمزيد.

هل هذا RAG؟

إن تنفيذ دعم التحميل الخاص بنا هو بالفعل توليد معزز بالاسترجاع.

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

شرح خيارات الفهرسة المختلفة

ما هو الرمز المميز (token)؟ الرموز المميزة هي وحدات أولية تستخدمها نماذج اللغة الكبيرة لتقسيم النص. شرح مرئي رائع متاح على: https://platform.openai.com/tokenizer

يأتي تنفيذ تحميل Discourse AI مع المفاتيح التالية:

Upload Chunk Tokens: بعد تحميل الملفات، نقوم بتقسيمها إلى أجزاء. يتيح لك هذا التحكم في حجم الأجزاء. إذا كان الجزء كبيرًا جدًا بالنسبة لنموذج التضمين الخاص بك، فسيتم اقتطاع التضمين (سيتم التعامل مع جزء فقط من الرموز المميزة).

Upload Chunk Overlap Tokens: هذا هو عدد الرموز المميزة المضمنة من الجزء السابق في الجزء الحالي. كلما زاد هذا العدد، زادت المعلومات المكررة التي سيتم تخزينها في الفهرس الخاص بك.

Search Conversation Chunks: يتحكم هذا في عدد “الأجزاء” من الرموز المميزة التي سيتم تضمينها بشكل غير مشروط بناءً على الصلة في موجه الإكمال. كلما زاد العدد، زاد السياق الذي سيتم توفيره لـ LLM (وزادت تكلفة الاستدعاءات). على سبيل المثال: إذا تم تعيين هذا على 10 وكان Upload Chunk Tokens معينًا على 200، فسيكون لكل إكمال عبء إضافي قدره 2000 رمز مميز.

كيف يقوم Discourse AI بتقسيم أجزاء النصوص؟

يستخدم Discourse أداة تقسيم النصوص بالحروف التكرارية، والتي تحاول الاحتفاظ بالفقرات، ثم الأسطر، وأخيرًا الكلمات معًا عند التقسيم.

بالإضافة إلى ذلك، يمنحك Discourse تحكمًا إضافيًا في كيفية تقسيم النص الخاص بك.

يمكن استخدام الفاصل [[metadata YOUR METADATA HERE]] لتقسيم أجزاء كبيرة من النصوص وتمييز ما تغطيه كل قسم بشكل صحيح.

على سبيل المثال:

[[metadata about cats]]
a long story about cats
[[metadata about dogs]]
a long story about dogs

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

يبدو الأمر معقدًا، كيف يمكنني تصحيح الأخطاء؟

يأتي Discourse AI مع إعداد الموقع ai bot debugging enabled groups، والمستخدمون في هذه المجموعة لديهم وصول إلى تصحيح أخطاء الذكاء الاصطناعي:

يمكن لشاشات تصحيح أخطاء الذكاء الاصطناعي مساعدتك في الحصول على نافذة على المعلومات التي نرسلها إلى الذكاء الاصطناعي.

:warning: مدخلات سيئة - مخرجات سيئة إذا قدمت معلومات غير مفيدة أو غامضة لنموذج لغوي كبير، فلا يمكنه تحويلها بشكل سحري إلى معلومات مفيدة

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

هل هذا يعمل حقًا؟

مثال واقعي هو تقسيم وثائق HAProxy وتغذيتها في شخصية:

System Prompt:

أنت روبوت متخصص في الإجابة على الأسئلة حول HAProxy.

أنت تعيش على منتدى Discourse و تعرض تنسيق Markdown الخاص بـ Discourse.

عند تقديم الإجابات، حاول دائمًا تضمين روابط مرة أخرى إلى وثائق HAProxy.

على سبيل المثال، هذه هي الطريقة التي ستربط بها بالقسم 10.1.1. ضع في اعتبارك أنه يمكنك الارتباط بقسم أو خيار داخله.

[fcgi-app](https://www.haproxy.com/documentation/haproxy-configuration-manual/latest/#10.1.1-fcgi-app)

كن كريمًا في الروابط، فهي مفيدة جدًا.

محتويات التحميل:
processed-haproxy-2.txt (1.2 ميجابايت)

والذي تم إنشاؤه باستخدام البرنامج النصي التالي:

file_content = File.read("configuration.txt")

title = nil
body = nil
last_line = nil

sections = []

file_content.each_line do |line|
  if line.strip.match?(/^[-]+$/)
    section_number, title = title.to_s.split(" ", 2)
    sections << {
      section_number: section_number,
      title: title,
      body: body.to_s.strip
    }

    title = last_line
    body = nil
    last_line = nil
  else
    body = body.to_s + last_line.to_s
    last_line = line
  end
end

section_number, title = title.to_s.split(" ", 2)
sections << { section_number: section_number, title: title, body: body }

section_names =
  sections.map { |section| [section[:section_number], section[:title]] }.to_h

sections[4..-1].each do |section|
  title = []
  current = +" "
  section_number = section[:section_number]
  section_number
    .split(".")
    .each do |number|
      current << number
      current << "."
      title << section_names[current].to_s.strip
    end
  title = title.join(" - ")

  body = section[:body]

  next if body.strip.empty?
  puts "[[metadata section=\"#{section_number}\" title=\"#{title.strip}\"]]"
  puts body
end

يمكن لكل من Claude Opus و GPT-4 أن يفشلا بشكل كبير مع الأسئلة المعقدة. هذا أمر مفهوم لأنهما يتغذيان على جميع الرموز المميزة على الإنترنت، لذا فإن 50 نسخة مختلفة من وثائق HAProxy وجميع المناقشات حولها تدخل في الدماغ، مما قد يجعله مرتبكًا جدًا:

أمثلة على GPT-4 و Claude 3 Opus مرتبكين

كلاهما ليسا جيدين تقريبًا مثل الإجابة المضبوطة التي يوفرها Discourse RAG:

أمثلة على GPT-4 و Claude Opus أقل ارتباكًا

المستقبل

نتطلع إلى تلقي ملاحظات حول بعض الأفكار للمستقبل والتي يمكن أن تشمل:

  • دعم PDF/DOCX/XLS وما إلى ذلك، حتى لا تحتاج إلى التحويل إلى نص
  • تقسيم أكثر ذكاءً للكود المصدري / HTML
  • تحويلات ذكية للبيانات الواردة قبل الفهرسة

أخبرنا برأيك!

شكر كبير لـ @Roman على إطلاق هذه الميزة :hugs:

24 إعجابًا

هل سيكون من الممكن، بالإضافة إلى النصوص التي تم تحميلها يدويًا، تضمين منشورات المنتدى التي تتطابق مع معايير محددة؟

مثل:

  • في فئة معينة
  • لها علامة معينة (أو، ليس لها)
  • جزء من موضوع تم وضع علامة عليه كحل (بدلاً من ذلك، هو منشور حل على وجه التحديد)
  • هو الموضوع الأصلي، وليس ردًا
  • تم نشره بواسطة مستخدم في مجموعة معينة
  • قبل أو بعد تاريخ معين

أو ربما بدلاً من مربعات الاختيار بهذه الأشياء، ببساطة “هو أحد أفضل N موضوعات للبحث في منتدى معين”؟

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

كل هذا قابل للتنفيذ اليوم باستخدام أمر بحث مخصص:

  • يمكن تحديد الفئة المعطاة في المرشح
  • الوسم
  • تم الحل
  • المشغل فقط (أعتقد أنه قابل للتنفيذ)
  • المجموعة المعطاة
  • قبل وبعد التاريخ

:hugs:

5 إعجابات

هممم، ربما أساء فهمي. هل إتاحة ذلك للشخصية تفعل الشيء نفسه؟

لقد حاولت، وفي الغالب أحصل فقط على ميسترال لتختلق عناوين مواضيع وتربط بأرقام مشاركات عشوائية تمامًا. :slight_smile:

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

هل Mistral جيدة بما يكفي لهذه المهام؟ أعتقد أن هذا قد يسبب الهلوسة. سام على حق، من خلال تغيير الاستعلام الأساسي يمكنك القيام بكل الأشياء التي ذكرتها في المنشور الأصلي.

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

وأيضًا، لقد نشرت قبل أن أكمل أفكاري. كان السؤال: هل توفير أمر البحث والمعلمات يقوم بنفس الشيء بشكل فعال مثل توفير الملفات التي تم تحميلها؟

لكن نعم، قد لا تكون ميسترال جيدة بما يكفي.

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

للتوسع هنا قليلاً:

https://chat.lmsys.org/?leaderboard

يأتي ميسترال بنكهات عديدة… هناك ميسترال 7b، وميكسترال 8x7b (الذي لديك)، والجديد تمامًا mistralai/Mixtral-8x22B-Instruct-v0.1 · Hugging Face - هذا وخمسة/ستة نماذج أخرى يطلقونها بما في ذلك بعض النماذج المغلقة المصدر.

يجب توخي الحذر مع عبارة “ميسترال ليس جيدًا بما فيه الكفاية” وتوضيحها دائمًا.

أود أن أقول إن ميكسترال-8x7b ببساطة ليس مناسبًا لدعم الأدوات، فهو ينحرف كثيرًا.

أود أن أقول إنه:

  1. جيد جدًا لدعم “التحميل”
  2. جيد جدًا في دعم الشخصيات المخصصة
  3. ضعيف في دعم الأدوات

نحن نحاول معرفة ما إذا كان بإمكاننا الترقية إلى 8x22b (فهو يأتي مع دعم جيد للأدوات)، المشكلة هي أن متطلبات الذاكرة عالية جدًا وسنحتاج إلى تكميم النموذج ليناسب خوادمنا بشكل جيد.

ولكن حقًا… إذا كان لديك اتفاقية خصوصية بيانات مع أمازون، فسأوصي بشدة بـ Bedrock الذي سيتيح لك الوصول إلى Claude 3 Opus و Haiku.

أتفهم التوتر بين النماذج مفتوحة المصدر مقابل النماذج مغلقة المصدر. الأمر صعب، فالنماذج مغلقة المصدر متقدمة جدًا في الوقت الحالي.

إعجابَين (2)

أنت على حق، كان يجب أن أصيغ الأمر بشكل أفضل. كنت بالفعل أشير إلى أن النماذج ذات المصادر المغلقة أفضل بشكل عام.

إعجابَين (2)

تتعطل عملية تحميل ملفات .txt متعددة دفعة واحدة: تظهر بسرعة، ولكن بعد ذلك يظهر ملف واحد فقط، وبعد ذلك لا يستجيب زر إضافة ملف بعد ذلك.

أعتقد أيضًا أن دعم ملفات .md سيكون إضافة رائعة.

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

يا إلهي … صيد جيد يا @Roman سألقي نظرة.

يجب أن يعمل هذا بشكل جيد، فهو مدعوم بالفعل وتحتاج فقط إلى تمكين الامتداد.

3 إعجابات

لقد دفعت إصلاحًا لخلل الملفات المتعددة:

4 إعجابات

تم تقسيم منشورين إلى موضوع جديد: تحسين جودة عوامل تصفية البحث في Discourse AI

مرحباً سام، أتساءل كيف يعمل هذا بالضبط. سيخبر الذكاء الاصطناعي أن هذه بيانات عن القطط أو الكلاب، ولكن كيف سيؤثر ذلك على الأجزاء إذا تم تعيينها بالفعل لعدد محدد من الرموز (لنقل 2000). هل سيقطع جزءًا عندما يرى سطرًا مثل [[metadata about dogs]] ويبدأ جزءًا جديدًا؟

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

نعم، سينقطع مبكرًا

إعجابَين (2)

أوه يا إلهي، كنت أستخدم تنسيق <meta content=meta> الذي يعمل مع معظم نماذج LLM، هل هناك سبب لاختيارك طريقة [[الأقواس]]؟ هل لا تزال <tags> تعمل أم من الأفضل استخدام طريقة الأقواس في Discourse؟

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

لم يتم استهلاك هذا على الإطلاق بواسطة نموذج اللغة الكبير (نقوم بتحليل واستهلاك البيانات الوصفية) أردنا فاصلًا من غير المرجح ظهوره في البيانات المفهرسة

إعجابَين (2)

تمت إضافة هذا الجزء إلى النسخة

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

هل هذه التضمينات التي تم إنشاؤها لشخصيات الذكاء الاصطناعي موجودة في نفس قاعدة بيانات المتجهات؟ وفي الواقع، هل تم إنشاء جميع التضمينات الخاصة بالخطاب وتخزينها في نفس قاعدة بيانات المتجهات؟

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

كل شيء في Postgres باستخدام نفس قاعدة البيانات

إعجابَين (2)

هل يمكن لأحد أن يخبرني ماذا يحدث لملفات النص التي تم تحميلها في الشخصيات إذا تم حذفها من قائمة الملفات التي تم تحميلها؟ أفهم أنها تُستخدم لـ RAG ولكن إذا قمت بحذف الملف، فهل سيتم حذفه مما تمت فهرسته؟ أتساءل عما إذا كان من الممكن تعديل ما تمت فهرسته عن طريق حذف ملف نصي، وإجراء التعديل الخاص بك وإعادة تحميله؟

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