Utilisation maximale consécutive d'outil dans la réponse

Bonjour :wave:

J’ai créé deux outils personnalisés pour collecter des informations sur les boutiques en ligne. Ces informations comprennent le nom de la boutique en ligne, le lien du produit, le prix et les informations sur le stock. Après ces informations, il liste les résultats dans un tableau.

  1. Pour cela, j’ai créé un outil de recherche Google personnalisé qui est similaire à l’outil de recherche Google intégré, mais je peux limiter le nombre de résultats et j’ai pu créer une recherche programmable distincte qui n’est utilisée que par cet outil. C’était nécessaire pour que les résultats ne contiennent que des boutiques en ligne pertinentes.

  2. Le prochain outil personnalisé est similaire à l’outil de navigation web Discourse, mais je l’ai optimisé spécifiquement pour les boutiques en ligne. Ainsi, tout d’abord, il recherche le format schema.org basé sur JSON « Offer ou Product » situé dans <script type="application/ld+json"> et s’exécute à l’intérieur et recherche les données nécessaires (prix, informations sur le stock). Si cela ne donne aucun résultat, il commence à rechercher la même chose en fonction de l’itemtype. Si cela ne donne pas non plus de résultats, alors ce que fait l’outil de navigation web par défaut se produit, c’est-à-dire qu’il commence à examiner le contenu principal de la page et recherche les informations nécessaires. Une autre chose importante qui a été intégrée est la limite de jetons. Où je peux définir la limite maximale de jetons lors de la navigation. Elle est actuellement de 3000.

Mais la raison pour laquelle j’écris ce sujet est qu’il existe une limite à l’utilisation des outils ? Parce que j’ai remarqué qu’après 5 utilisations d’outils, le processus est interrompu. C’est l’autre raison pour laquelle j’ai intégré la limitation des résultats dans la recherche personnalisée. Je l’ai réglée sur 4 car le navigateur peut alors fonctionner avec succès. Si je la règle sur 5, le navigateur échouera lors de la 5ème utilisation de l’outil. :arrow_down_small:

Par exemple : dans une réponse après 1 recherche Google et 5 navigateurs d’affilée, je reçois un avertissement dans /logs.

Message (3 copies signalées)

DiscourseAi: Outil introuvable : nom-outil

Trace

/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: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'

Je ne sais pas exactement ce qui cause cela, c’est peut-être une limitation. Si oui, y a-t-il une possibilité d’ajouter un paramètre à la persona ou à l’outil personnalisé pour configurer la limite d’utilisation consécutive des outils dans une réponse.

Modification : J’ai trouvé ceci qui est probablement la limite. Il serait formidable d’avoir la possibilité de remplacer par un paramètre que j’ai mentionné ci-dessus.

Merci :slightly_smiling_face:

1 « J'aime »

Qu’est-ce que l’outil de navigation Web Discourse, et où puis-je le trouver/l’obtenir ?!

Je suppose que cela fait référence aux outils qu’une IA peut utiliser. Ainsi, ceux-ci peuvent être activés lors de la modification des personas IA.

1 « J'aime »

Je n’ai pas encore rencontré ce problème, mais s’il s’agit bien d’une limitation codée en dur, ce serait vraiment génial de pouvoir la remplacer !

Dans les personas fournies par le plugin par défaut, il y a celui du « Chercheur ». Vous pouvez y jeter un œil pour voir comment il fonctionne :slight_smile:

2 « J'aime »

Quel LLM utilisez-vous ?

Votre LLM renvoie-t-il plus de 5 appels de fonction dans une seule réponse, comme s’il s’agissait d’appels de fonction parallèles ?

Pouvez-vous partager cette réponse du LLM ?

1 « J'aime »

GPT4o, GPT4o Mini, Gemini Flash 2. Honnêtement, j’ai essayé avec beaucoup de LLM. :grin:

Oui, cela se produit lorsque je définis Outils forcés et que j’ajoute un message système à la Persona pour vérifier les choses. Par exemple : « visiter tous les sites Web trouvés lors d’une recherche Google ». Ceci est nécessaire pour un cas d’utilisation que j’ai.

Je vous enverrai un exemple en message privé car cela pourrait être un contenu inapproprié pour le public. Dans cet exemple, le bot utilise la recherche Google et le navigateur Web avec Gemini Flash 2.

Je pense que je vois le bug ici… généralement, max_tools était là pour éviter d’énormes chaînes avec des appels d’outils, mais il y a probablement 2 types différents de maximum :

  • Nombre maximum d’allers-retours avec le LLM avant de répondre
  • Nombre maximum d’appels d’outils (qui peut être beaucoup plus élevé)
  • Nombre maximum de contextes que les outils peuvent injecter. (par exemple, si vous faites exploser le contexte en 3 appels d’outils et que vous en ajoutez ensuite 2 autres qui font que le modèle oublie 2 réponses d’outils)

Je vais réfléchir à cela, c’est résoluble.

3 « J'aime »

J’ai récemment augmenté les chiffres de façon spectaculaire, comment ça se présente maintenant ?

2 « J'aime »