أقصى عدد متتالٍ من استخدام الأدوات في الإجابة

أهلاً :wave:

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

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

  2. الأداة المخصصة التالية تشبه أداة تصفح الويب Discourse، لكنني قمت بتحسينها خصيصًا لمتاجر الويب. لذا، أولاً وقبل كل شيء، تبحث عن تنسيق schema.org المستند إلى JSON " Offer أو Product " الموجود في <script type="application/ld+json"> وتعمل بداخله وتبحث عن البيانات اللازمة (السعر، معلومات المخزون). إذا لم تسفر هذه عن نتائج، فإنها تبدأ في البحث عن نفس الشيء بناءً على itemtype. إذا لم تسفر هذه عن نتائج أيضًا، فإن ما تفعله أداة المتصفح افتراضيًا يأتي، وهو البدء في مراجعة المحتويات الرئيسية للصفحة والبحث عن المعلومات اللازمة. شيء آخر مهم تم بناؤه في هذا هو حد الرمز (token limit). حيث يمكنني تعيين الحد الأقصى لعدد الرموز أثناء التصفح. وهو حاليًا 3000.

لكن سبب كتابتي لهذا الموضوع هو، هل هناك أي نوع من الحدود في استخدام الأدوات؟ لأنني لاحظت أنه بعد 5 استخدامات للأداة، تتوقف العملية. هذا هو السبب الآخر الذي جعلني أقوم بوضع حد للنتائج في البحث المخصص. قمت بتعيينه على 4 لأنه بعد ذلك يمكن لأداة المتصفح أن تعمل بنجاح. إذا قمت بتعيينه على 5، ستفشل أداة المتصفح في الاستخدام الخامس للأداة. :arrow_down_small:

على سبيل المثال: في إجابة بعد بحث واحد على Google و 5 متصفحات ويب متتالية، أتلقى تحذيرًا في /logs.

Message (3 copies reported)

DiscourseAi: Tool not found: tool-name

Backtrace

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in `block in warn'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in `warn'
/var/www/discourse/plugins/discourse-ai/lib/ai_bot/bot.rb:158:in `block in reply'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:190:in `block (5 levels) in perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:190:in `each'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:190:in `block (4 levels) in perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:178:in `each'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:178:in `block (3 levels) in perform_completion!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:535:in `call_block'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:526:in `<'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:162:in `read'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http/response.rb:631:in `read_chunked'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http/response.rb:595:in `block in read_body_0'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http/response.rb:588:in `inflater'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http/response.rb:593:in `read_body_0'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http/response.rb:363:in `read_body'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:173:in `block (2 levels) in perform_completion!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:2433:in `block in transport_request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http/response.rb:320:in `reading_body'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:2430:in `transport_request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:2384:in `request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-3.3.1/lib/patches/net_patches.rb:19:in `block in request_with_mini_profiler'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-3.3.1/lib/mini_profiler/profiling_methods.rb:50:in `step'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-3.3.1/lib/patches/net_patches.rb:18:in `request_with_mini_profiler'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:116:in `block in perform_completion!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:1632:in `start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:1070:in `start'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:99:in `perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/open_ai.rb:40:in `perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:279:in `generate'
/var/www/discourse/plugins/discourse-ai/lib/ai_bot/bot.rb:115:in `reply'
/var/www/discourse/plugins/discourse-ai/lib/ai_bot/playground.rb:477:in `reply_to'
/var/www/discourse/plugins/discourse-ai/app/jobs/regular/create_ai_reply.rb:18:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread'

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

تعديل: لقد وجدت هذا الذي ربما يكون الحد. سيكون من الرائع أن تكون هناك إمكانية لتجاوز ذلك بإعداد ذكرته أعلاه.

شكرا لك :slightly_smiling_face:

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

ما هي أداة تصفح الويب Discourse، وأين يمكنني العثور عليها/الحصول عليها؟!

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

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

لم أواجه هذه المشكلة بعد، ولكن إذا كانت بالفعل قيودًا مبرمجة بشكل ثابت، فسيكون من الرائع حقًا أن نتمكن من تجاوزها!

في الشخصيات التي يوفرها المكون الإضافي افتراضيًا، توجد شخصية “الباحث”. يمكنك التحقق منها لمعرفة كيفية عملها :slight_smile:

إعجابَين (2)

ما هو نموذج اللغة الكبير (LLM) الذي تستخدمه؟

هل يعيد نموذج اللغة الكبير الخاص بك أكثر من 5 استدعاءات للدالة في استجابة واحدة، كما هو الحال في استدعاءات الدوال المتوازية؟

هل يمكنك مشاركة استجابة نموذج اللغة الكبير هذه؟

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

GPT4o، و GPT4o Mini، و Gemini Flash 2. بصراحة، لقد جربته مع العديد من نماذج اللغة الكبيرة. :grin:

نعم، يحدث هذا عندما أقوم بتعيين أدوات قسرية وأضيف رسالة نظام إلى الشخصية للتحقق من الأشياء. على سبيل المثال: “قم بزيارة جميع المواقع التي تم العثور عليها في بحث Google”. هذا ضروري لحالة استخدام لدي.

سأرسل لك مثالاً عبر رسالة خاصة لأن هذا قد يكون محتوى غير لائق للعامة. في هذا المثال، يستخدم الروبوت بحث Google ومتصفح الويب مع Gemini Flash 2.

أعتقد أنني أرى الخطأ هنا… بشكل عام، كان max_tools موجودًا لتجنب السلاسل الضخمة مع استدعاءات الأدوات، ولكن من المحتمل أن يكون هناك نوعان مختلفان من الحد الأقصى:

  • الحد الأقصى للمرات التي نذهب فيها ذهابًا وإيابًا مع النموذج اللغوي الكبير قبل الرد
  • الحد الأقصى لمقدار استدعاء الأدوات (والذي يمكن أن يكون أعلى بكثير)
  • الحد الأقصى للسياق الذي يمكن للأدوات حقنه. (على سبيل المثال، إذا تجاوزت السياق في 3 استدعاءات أدوات ثم أضفت 2 آخرين مما يتسبب في نسيان النموذج لردين من الأدوات)

سأفكر في هذا، يمكن حله.

3 إعجابات

مؤخرًا قمت بزيادة الأرقام بشكل كبير، كيف يبدو الوضع الآن؟

إعجابَين (2)