Maximale aufeinanderfolgende Tool-Nutzung in der Antwort

Hallo :wave:

Ich habe zwei benutzerdefinierte Tools zum Sammeln von Informationen aus Webshops erstellt. Solche Informationen sind der Name des Webshops, der Produktlink, der Preis und die Lagerinformationen. Danach listet es die Ergebnisse in einer Tabelle auf.

  1. Dafür habe ich ein benutzerdefiniertes Google-Suchtool erstellt, das dem integrierten Google-Suchtool ähnelt, aber ich kann die Anzahl der Ergebnisse begrenzen und eine separate programmierbare Suche erstellen, die nur von diesem Tool verwendet wird. Dies war notwendig, damit die Ergebnisse nur relevante Webshops enthalten.

  2. Das nächste benutzerdefinierte Tool ähnelt dem Discourse-Webbrowser-Tool, aber ich habe es speziell für Webshops optimiert. Zuerst sucht es nach dem JSON-basierten schema.org-Format " Offer oder Product ", das sich in <script type="application/ld+json"> befindet, und durchsucht es nach den notwendigen Daten (Preis, Lagerinformationen). Wenn dies keine Ergebnisse liefert, beginnt es mit der Suche nach demselben basierend auf dem itemtype. Wenn auch dies keine Ergebnisse liefert, kommt das, was das Webbrowser-Tool standardmäßig tut, nämlich die Überprüfung der Hauptinhalte der Seite und die Suche nach den notwendigen Informationen. Eine weitere wichtige Funktion, die hier integriert wurde, ist das Token-Limit. Hier kann ich das maximale Token-Limit beim Browsen festlegen. Es beträgt derzeit 3000.

Der Grund, warum ich dieses Thema schreibe, ist jedoch, ob es eine Art Limit für die Tool-Nutzung gibt? Denn ich habe festgestellt, dass der Prozess nach 5 Tool-Nutzungen unterbrochen wird. Das ist auch der Grund, warum ich die Begrenzung der Ergebnisse in der benutzerdefinierten Suche eingebaut habe. Ich habe sie auf 4 gesetzt, damit das Browser-Tool erfolgreich laufen kann. Wenn ich es auf 5 setze, schlägt das Browser-Tool bei der 5. Tool-Nutzung fehl. :arrow_down_small:

Zum Beispiel: In einer Antwort nach 1 Google-Suche und 5 Webbrowsern hintereinander erhalte ich eine Warnung in /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: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'

Ich weiß nicht genau, was das verursacht, vielleicht ist es eine Einschränkung. Wenn ja, gibt es eine Möglichkeit, eine Einstellung in der Persona oder im benutzerdefinierten Tool hinzuzufügen, um das Limit für die aufeinanderfolgende Nutzung von Tools in einer Antwort festzulegen.

Bearbeitung: Ich habe das hier gefunden, was wahrscheinlich das Limit ist. Es wäre großartig, die Möglichkeit zu haben, dies mit einer von mir erwähnten Einstellung zu überschreiben.

Vielen Dank :slightly_smiling_face:

1 „Gefällt mir“

Was ist das Discourse Web Browsing Tool und wo finde/bekomme ich es?!

Ich vermute, es bezieht sich auf Werkzeuge, die eine KI verwenden kann. Diese können also beim Bearbeiten von KI-Personas aktiviert werden.

1 „Gefällt mir“

Ich bin auf dieses Problem noch nicht gestoßen, aber wenn es sich tatsächlich um eine hartcodierte Einschränkung handelt, wäre es wirklich cool, sie überschreiben zu können!

In den von dem Plugin standardmäßig bereitgestellten Personas gibt es die „Forscher“-Persona. Sie können sie sich ansehen, um zu sehen, wie sie funktioniert :slight_smile:

2 „Gefällt mir“

Welches LLM verwenden Sie?

Gibt Ihr LLM mehr als 5 Funktionsaufrufe in einer einzigen Antwort zurück, wie z. B. parallele Funktionsaufrufe?

Können Sie diese LLM-Antwort teilen?

1 „Gefällt mir“

GPT4o, GPT4o Mini, Gemini Flash 2. Ehrlich gesagt, ich habe es mit vielen LLMs ausprobiert. :grin:

Ja, das passiert, wenn ich Erzwungene Tools einstelle und der Persona eine Systemnachricht hinzufüge, um Dinge zu überprüfen. Zum Beispiel: “Besuche alle auf Google gefundenen Websites”. Das ist für meinen Anwendungsfall notwendig.

Ich schicke dir ein Beispiel per PN, da dies unangemessene Inhalte für die Öffentlichkeit sein könnten. In diesem Beispiel verwendet der Bot Google Suche und Webbrowser mit Gemini Flash 2.

Ich glaube, ich sehe hier den Fehler… Im Allgemeinen war max_tools dazu da, riesige Ketten mit Tool-Aufrufen zu vermeiden, aber es gibt wahrscheinlich 2 verschiedene Arten von Maxima:

  • Maximale Anzahl von Roundtrips mit dem LLM, bevor eine Antwort gegeben wird
  • Maximale Anzahl von Tool-Aufrufen (die viel höher sein kann)
  • Maximale Menge an Kontext, die Tools injizieren können. (z. B. wenn Sie den Kontext mit 3 Tool-Aufrufen sprengen und dann weitere 2 hinzufügen, die dazu führen, dass das Modell 2 Tool-Antworten vergisst)

Ich werde darüber nachdenken, das ist lösbar.

3 „Gefällt mir“

Ich habe die Zahlen kürzlich stark erhöht, wie sieht es jetzt aus?

2 „Gefällt mir“