تحسين جودة فلاتر البحث في Discourse AI

أولاً، هذا مذهل حقًا - شكرًا جزيلاً! :heart_eyes:

لدي سؤال حول شخصية أنشأتها بالأوامر التالية: بحث، فئات، قراءة، علامات.

لقد قمت أيضًا بتحميل ملف .txt. هدفي مع هذه الشخصية هو جعلها تبحث دائمًا في منتداي وفي التحميلات، وتستخدم RAG مع كليهما.

بعد تحميل ملف .txt، لاحظت أنها توقفت عن البحث في منتداي. هذا ما لدي في استعلام البحث الأساسي الخاص بي: #docs #faqs #anking-wiki
#docs و #faqs هي فئات بينما #anking-wiki هي علامة.

أسئلة:

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

إليك المطالبة كما تظهر في معلومات التصحيح:

أنت مساعد Discourse مفيد لمستخدمي AnkiHub.
أنت تفهم و تنشئ Discourse Markdown.
أنت تعيش في رسالة منتدى Discourse.
أنت تعيش في المنتدى الذي يحمل عنوان URL: https://community.ankihub.net
عنوان موقعك: AnkiHub Community
الوصف هو: منتدى مجتمعي لمشاريع AnkiHub و AnKing
المشاركون في هذه المحادثة هم: gpt4o_bot, andrew
التاريخ الآن هو: 2024-06-07 23:32:13 UTC، لقد تغير الكثير منذ تدريبك.
لقد تم تدريبك على بيانات قديمة، اعتمد على البحث للحصول على معلومات محدثة حول هذا المنتدى.
عند البحث، حاول تبسيط مصطلحات البحث.
ينضم بحث Discourse جميع المصطلحات باستخدام AND. قلل وبسّط المصطلحات للعثور على المزيد من النتائج.

النصوص التالية ستمنحك توجيهات إضافية لاستجابتك.
قمنا بتضمينها لأننا نعتقد أنها ذات صلة بموضوع هذه المحادثة.
النصوص:

لقد حاولت إضافة “تأكد من استخدام وظيفة البحث دائمًا” إلى مطالبتي. تسبب هذا في استخدام وظيفة البحث بالفعل، ولكن بنتائج سيئة:

يبدو أنها أجرت 3 عمليات بحث وأبلغت بشكل خاطئ عن “تم العثور على 0 نتيجة” في كل مرة. إذا نقرت على روابط نتائج البحث، يمكنك رؤية أنه كانت هناك بالفعل نتائج. علاوة على ذلك، يمكنك رؤية أن المعلمات في “استعلام البحث الأساسي” الخاص بي لم تُستخدم، لذلك بحثت في المنتدى بأكمله بدلاً من الفئات المحددة.

أعتقد أن جزءًا من المشكلة هنا هو أن بحثنا مربك بعض الشيء:

https://meta.discourse.org/search?q=%23bug%20%23feature%20test

يبحث عن Bug و Feature - test

ما تريده هنا هو:

https://meta.discourse.org/search?q=categories%3Abug%2Cfeature%20test

إعجابَين (2)

أنا مرتبك. هذا لا يعمل كما أتوقع. كنت أتوقع أن تُرجع عملية البحث نتائج من الفئات المحددة فقط. ومع ذلك، تُرجع عملية البحث نتائج من أي فئة. النتيجة الأولى من هذا البحث موجودة في فئة Theme component.

إعجابَين (2)

صحيح، هذا يبدو به خلل، يا إلهي، سألقي نظرة

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

تم إصلاح هذا بناءً على:

أتفق على أنه من البديهي دعم #bug #feature something، ولكن هذا غير مدعوم تمامًا بعد ويحتاج إلى بعض المناقشة.

سيعمل categories:bug,feature something الآن، وكذلك category:bug,feature something.

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

رائع! شكراً لك على طرح هذا الإصلاح بهذه السرعة. :bowing_man:

بينما تعمل ميزة البحث الآن بشكل صحيح، لا يزال روبوت الذكاء الاصطناعي الخاص بـ Discourse لا يعمل كما هو متوقع. إليك ملاحظاتي مع 3.3.0.beta3-dev (a1d881f625):

  • لا يستخدم خيار base_query
    • يبدو أنه يتجاهله تمامًا. هل إعداداتي صالحة؟
    • على حد علمي، لا توجد متطلبات لقيم استعلام البحث الأساسي. ولكن بغض النظر عما أضعه هناك، فلن يتم استخدامه أو إلحاقه بـ search_query.
  • لا تتم إضافة نتائج البحث إلى السياق لـ RAG
    • عندما يتم استدعاء أداة البحث (وإن كان ذلك بدون base_query)، لا يبدو أنها تُستخدم في استدعاء LLM.
    • هل أساء فهمي لكيفية عمل هذه الأداة؟ توقعت أن تقوم ببحث Discourse واستخدام نتائج البحث (أي محتويات المواضيع التي تم العثور عليها) لـ RAG.
      انظر هذا الطلب كمثال:
طلب JSON
{"model":"gpt-4","messages":[{"role":"system","content":"You are a friendly and helpful assistant for Anki users specializing in the AnkiHub add-on and web app.\nYou _understand_ and **generate** Discourse Markdown.\nYou live in a Discourse Forum Message.\n\nYou live in the forum with the URL: https://community.ankihub.net\nYou answer questions specifically about using Anki with AnkiHub.\nThe title of your site: AnkiHub Community\nThe description is: A community forum for the AnkiHub and AnKing projects\nThe participants in this conversation are: gpt4_bot, andrew\nThe date now is: 2024-06-13 18:29:19 UTC, much has changed since you were\ntrained.\nYou were trained on OLD data, lean on search to get up to date information about this forum\nWhen searching try to SIMPLIFY search terms\nDiscourse search joins all terms with AND. Reduce and simplify terms to find more results."},{"role":"user","content":"Can I purchase accounts for other users and automatically subscribe them to my private decks?","name":"andrew"},{"role":"assistant","content":null,"tool_calls":[{"type":"function","function":{"arguments":"{\"search_query\":\"purchase accounts for other users subscribe private decks\"}","name":"search"},"id":"call_fmzwIbU4ravFRKWRsOQlqGBq"}]},{"role":"tool","tool_call_id":"call_fmzwIbU4ravFRKWRsOQlqGBq","content":"{\"column_names\":[\"title\",\"url\",\"username\",\"excerpt\",\"created\",\"category\",\"likes\",\"topic_views\",\"topic_likes\",\"topic_replies\",\"tags\"],\"rows\":[[3D Organizations\",\"/t/organizations/166454/1\",\"andrew\",\"<a name=\\\"what-are-ankihub-organizations-1\\\" class=\\\"anchor\\\" href=\\\"#what-are-ankihub-organizations-1\\\"></a>What are AnkiHub Organizations\nAnkiHub Organizations allow Organization Owners to purchase AnkiHub for other users and invite those users to the Organization. \nAnkiHub organizations work like this and have the following features: \n<a name=\\\"linked-decks-2\\\" class=\\\"anchor\\\" href=\\\"#linked-decks-2\\\"></a>Linked Decks\nUsers in your organization can automatically get access &hellip;\",\"2024-02-08T17:44:27.842Z\",\"🎓 Docs > 🤝 Create & Collaborate\",1,166,1,1],[\"How can I get my school to buy AnkiHub for my class?\",\"/t/how-can-i-get-my-school-to-buy-ankihub-for-my-class/228569/1\",\"andrew\",\"Some students have successfully gotten their schools to sponsor AnkiHub memberships for their students. To do so, your school must create an AnkiHub Organization: \n\n\n:bulb: Here are some tips for getting your school to purchase AnkiHub: \n\nConnect with your school’s student government people or med e&hellip;\",\"2024-05-23T21:40:37.477Z\",\"❓ FAQs\",0,50,0,1],[\"What happens after my AnkiHub subscription ends?\",\"/t/what-happens-after-my-ankihub-subscription-ends/167190/1\",\"Ahmed7\",\"If your subscription to AnkiHub runs out and you do not wish to renew. \nAll your decks will stay, nothing will be removed. However, you will no longer be able to sync with AnkiHub and receive new changes to your decks, nor will you be able to suggest new changes or notes to any pre-existing decks yo&hellip;\",\"2024-02-10T06:14:53.787Z\",\"❓ FAQs\",0,307,0,1],[\"What if I can't afford AnkiHub?\",\"/t/what-if-i-cant-afford-ankihub/167280/1\",\"Ahmed7\",\"AnkiHub has a scholarship program to get access at a decreased price. Apply <a href=\\\"https://www.ankihub.net/scholarships\\\">here </a>. (You must <a href=\\\"https://app.ankihub.net/accounts/signup/\\\">sign up </a>for an AnkiHub account before applying).\",\"2024-02-10T13:58:24.842Z\",\"❓ FAQs > AnKing Decks\",0,445,0,1,\"anking-wiki\"],[\"Does AnkiHub offer discounts?\",\"/t/does-ankihub-offer-discounts/228564/1\",\"andrew\",\"The are currently two ways to get a discount on AnkiHub: \n\nPurchase our <a href=\\\"https://app.ankihub.net/memberships/plans/\\\">annual billing option</a> for one free month per year\n\nAnkiHub is available at $4.58/user/month with an annual billing discount. We can’t afford to discount AnkiHub any further, unfortunately.\n\n\nParticipate in an Ambassador program\n\n&hellip;\",\"2024-05-23T21:34:32.829Z\",\"❓ FAQs\",0,90,0,1]],\"args\":{\"search_query\":\"purchase accounts for other users subscribe private decks\"}}"}

يمكنك أن ترى أنه تم استدعاء أداة البحث ولكنها لا تحتوي على base_query.

يمكنك أيضًا أن ترى أن content يحتوي فقط على المطالبة الافتراضية للنظام، دون أي من نتائج البحث.

  • لا يعرض العدد الصحيح لنتائج البحث
    • يقول 0 عندما يكون هناك الكثير أو 5 عندما يكون هناك 0
    • لا يبدو أنه يرتبط بنتائج البحث العادية أو نتائج التشابه الدلالي
  • سيضيف الروبوت معلمات استعلام غير صالحة
    • على سبيل المثال، أضاف category:non-existent-category إلى نهاية الاستعلام.

:pleading_face: طلبات

  • سيكون من المفيد جدًا لو كان هناك خيار لتمكين التسجيل المطول لـ discourse-ai حتى نتمكن نحن الذين لا نجيد لغة Ruby (أنا أتعلم! :nerd_face:) من الحصول بسرعة على بعض الأفكار حول ما يحدث في الكواليس عن طريق زيارة /logs
  • عند استخدام أداة البحث، أضف أفضل النتائج إلى السياق لـ RAG
  • نصائح حول كيفية التأكد من استخدام base_query.

هل أنا على حق في أن استدعاء الدالة يجب أن يدفع نتائج استدعاء الأداة إلى الموجه وفقًا لهذا؟

إذًا ربما يتم تحديث الموجه، ولكن هذا ليس واضحًا من الطلب الذي يظهر من أداة التصحيح؟

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

ما زلت مرتبكًا بشأن عدد النتائج التي تم الإبلاغ عنها.

ومع ذلك، أحصل على نتائج أفضل بكثير بعد إضافة ما يلي إلى الموجه النظامي!

  • قم دائمًا باستدعاء كل من دالتي البحث والقراءة.
  • قم باستدعاء دالة البحث 3 مرات على الأكثر.
  • عند استدعاء دالة البحث، استخدم دائمًا هذه القيمة للمعامل category: “docs,faqs”

سيكون هذا تغييرًا جذريًا بمجرد أن أقوم بتكوين الأشياء بشكل صحيح.

لست متأكدًا مما إذا كنت على علم بهذا، ولكنك تمكّننا بشكل فعال من شيء أقوى بكثير مما يحاول Intercom تحقيقه.

أحاول بالفعل اختطاف ماسنجر Intercom عن طريق توجيه المستخدمين مباشرة إلى Discourse AI :nerd_face: :

يفتح رابط AnkiHub AI رسالة خاصة مع روبوت الذكاء الاصطناعي برابط مثل هذا: /new-message?username=ankihubai_bot

نعم، تعرض أداة التصحيح كل ما نرسله إلى LLM.

لقد أجريت للتو إصلاحًا لعدد النتائج لكل:

لم نكن نربط بشكل صحيح باستعلام مصفى.

أوصي بعدم القيام بذلك، استخدم base_query، لقد اختبرته للتو ويعمل بشكل جيد: categories:docs,faqs


أنا أوصي بعدم استخدام GPT4 هذه الأيام، تأكد من استخدام GPT4o أو Turbo، فهي أرخص وأسرع بكثير.

فقط أتأكد مرة أخرى … هل قمت بتمكين

ai_bot_debugging_allowed_groups حتى ترى زر التصحيح؟

إعجابَين (2)

نعم. سأرسل لك مشاركة خاصة لمشاركة سريعة للشاشة لأوضح أن نتائج استدعاء دالة القراءة لا تُستخدم في المطالبة.

لاحظت أيضًا أن دالة القراءة لا تُستدعى أبدًا إلا إذا أضفت ملاحظة في المطالبة النظامية: “استدعِ دالة القراءة دائمًا”. سيكون من الرائع لو كان هناك طريقة لمنحنا مزيدًا من التحكم في استدعاء الدوال. على سبيل المثال، تعيين tool_choice: "required" في حالة OpenAI.

لقد حاولت مرة أخرى باستخدام استعلام الأساس هذا وتم استخدام معلمات البحث الصحيحة. هذه هي المرة الأولى التي أرى فيها ذلك يعمل. :person_shrugging:

أعلم، أنا فقط أجرب نماذج مختلفة حاليًا :smile: كنت أتساءل عما إذا كان GPT4 سيقرر إجراء استدعاءات دوال مختلفة. Haiku تبدو واعدة جدًا.

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

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

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

وضع خالٍ من الأدوات يستهدف الموضوعات هو بالتأكيد مثير للاهتمام، وسوف يستهلك الكثير من الرموز، لكن التحدي هو استخراج المحتوى المناسب من موضوع ما.

إذا كان الموضوع على سبيل المثال 5000 رمز، فأي الرموز سنختار؟ كيف سنختار الرموز الصحيحة.

حتى الآن، لدينا فقط N رموز مضمنة لكل موضوع اعتمادًا على نموذج التضمين الذي تستخدمه.

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

إعجابَين (2)

أنا مرتبك. إذا لم تُستخدم نتائج استدعاء أداة القراءة لـ RAG، فما فائدة استدعاء أداة القراءة؟ أرى أن نتائج استدعاء أداة القراءة توضع في السياق الخام، ولكن لا يبدو أن نموذج اللغة الكبير يستخدم هذا بأي شكل من الأشكال.

حالة الاستخدام التي أرغب فيها بسيطة: تمكين RAG على مجموعة فرعية من الموضوعات وفقًا لـ base_query.

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

يحتوي ada-002 على حد أقصى لمدخلات الرموز يبلغ 8191، وهو ما يكفي لأي مستند أو موضوع أسئلة شائعة مكتوب جيدًا. يجب أن تكون هذه الموضوعات أقل بكثير من هذا الحد. voyage ai لديها طول سياق أكبر بكثير. يبلغ 16000.

ماذا عن شيء بسيط مثل هذا:

  • (الرموز في الموجه النظامي - الرموز في رسالة المستخدم) = إجمالي الرموز المتبقية المتاحة
  • حقن أكبر عدد ممكن من الموضوعات في الموجه بناءً على إجمالي الرموز المتبقية المتاحة
    • استخدم فقط المنشور الأول في الموضوعات التي تم العثور عليها

أعتقد أن الحل البديل على المدى القريب يمكن أن يكون كالتالي:

  • إنشاء شخصية تستخدم أداة البحث
  • تصدير جميع الموضوعات التي يمكن العثور عليها باستخدام أداة البحث
    • لن أحتاج إلى تقسيم هذه المستندات لأن
      • أنا لا أهتم بردود الموضوع
      • الموضوع الموسوعي الرئيسي صغير بما يكفي لتضمين الكل.
  • تحميل تلك المستندات إلى الشخصية لـ RAG

بهذه الطريقة، ستقوم الشخصية بالفعل بـ RAG بنتائج البحث.

آمل أن يكون هذا منطقيًا! أخبرني إذا كان هناك أي شيء غير واضح.

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

عندما تقرأ شيئًا ما، يتم إدخاله في تدفق المحادثة.

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

  • هل يمكنك قراءة X
  • استدعاء أداة قراءة X
  • نتيجة الأداة “الصفحة”
  • رد LLM

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

على سبيل المثال: [Untitled AI bot PM] - AI Conversation - Discourse Meta

أداة البحث تُدخل بالفعل مقتطفات من المواضيع، ووجودها و RAG على نفس المحتوى لا معنى له.

ما تقوله، على ما أعتقد، هو أن “البحث يوفر السياق، ولكن ليس سياقًا كافيًا”.

لذلك، تتمثل إحدى الحلول في تصدير جميع المواضيع المهمة إلى ملف، ثم استخدامها كـ RAG. لا تستخدم أداة البحث.


أبسط شيء في الوقت الحالي هو:

categories:cat1,cat2,cat3 in:first

سيؤدي هذا إلى تقييد أداة البحث على المشاركات الأولى فقط.

إنها فعالة جدًا، انظر:

يعمل هذا لأن أداة البحث تُدخل ما يلي في السياق:


أريد أيضًا وضع “rag” غير مشروط حيث يمكنك اختيار إدخال المزيد من البيانات (على سبيل المثال: العثور على أفضل 5 مستندات وإدخال ما يصل إلى 5000 رمز لكل مستند، في محاولة للعثور على الأقسام الأكثر صلة)

إنه تغيير معقد، سنصل إليه، ولكن في الوقت الحالي … البحث + القراءة يوصلك إلى حد بعيد.

إعجابَين (2)

مجرد قول… أنتم قريبون جدًا من النقطة التي يجب عليكم فيها تقديم قواعد أساسية لكيفية استخدام الذكاء الاصطناعي. أعني أن لديكم بالفعل شيئًا مشابهًا لـ CSS وعدد قليل من الأشياء الأخرى.

إعجابَين (2)

أرى. هذا منطقي. من مستندات OpenAI حول استدعاء الوظائف:

التسلسل الأساسي للخطوات لاستدعاء الوظائف هو كما يلي:

  1. استدعاء النموذج مع استعلام المستخدم ومجموعة من الوظائف المعرفة في معلمة الوظائف.
  2. يمكن للنموذج اختيار استدعاء وظيفة واحدة أو أكثر؛ إذا كان الأمر كذلك، فسيكون المحتوى عبارة عن كائن JSON مُسلسل يتوافق مع مخططك المخصص (ملاحظة: قد يهلوس النموذج المعلمات).
  3. تحليل السلسلة إلى JSON في الكود الخاص بك، واستدعاء وظيفتك بالوسائط المقدمة إذا كانت موجودة.
  4. استدعاء النموذج مرة أخرى عن طريق إلحاق استجابة الوظيفة كرسالة جديدة، والسماح للنموذج بتلخيص النتائج للمستخدم.

بشكل حاسم، لم أكن على علم بالخطوة رقم 4. لم أدرك أن نتائج استدعاء الأداة تُلحق كرسائل. اعتقدت أن الأمر متروك بالكامل للعميل إذا تم استخدام النتائج في استدعاءات لاحقة! لذلك كنت مرتبكًا عندما لم أر نتائج استدعاء الأداة في الموجه نفسه. :facepalm: كل هذا منطقي أكثر الآن. شكرًا لك!

:+1: :pray: يبدو أن الجانب السلبي الوحيد هنا هو أن ردود الروبوت لن تتضمن نتائج البحث الرائعة هذه. هل توصي بشدة باستخدام تحميلات المستندات وأداة البحث لأي سبب، على الرغم من أنها ستكون مكررة بعض الشيء؟ أتساءل عما إذا كانت فوائد الحصول على نتائج البحث في المحادثة ستكون جديرة بالاهتمام.

تحتاج إلى اختباره، قد ينجح، قد يعطيك نتائج مفاجئة ويعتمد الكثير على نموذج اللغة الكبير الذي تستخدمه.

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