Uso máximo consecutivo de herramientas en la respuesta

Hola :wave:

Creé dos herramientas personalizadas para recopilar información de tiendas en línea. Dicha información incluye el nombre de la tienda en línea, el enlace del producto, el precio y la información de stock. Después de esta información, enumera los resultados en una tabla.

  1. Para esto, creé una herramienta de búsqueda personalizada de Google que es similar a la herramienta de búsqueda de Google integrada, pero puedo limitar el número de resultados y pude crear una búsqueda programable separada que solo utiliza esta herramienta. Esto fue necesario para que los resultados solo contuvieran tiendas en línea relevantes.

  2. La siguiente herramienta personalizada es similar a la herramienta de navegación web de Discourse, pero la optimicé específicamente para tiendas en línea. Por lo tanto, primero busca el formato schema.org basado en JSON " Offer o Product " ubicado en <script type="application/ld+json"> y se ejecuta dentro de él y busca los datos necesarios (precio, información de stock). Si esto no produce resultados, comienza a buscar lo mismo basándose en el itemtype. Si tampoco produce resultados, entonces entra en juego lo que hace la herramienta del navegador web por defecto, que es comenzar a revisar el contenido principal de la página y buscar la información necesaria. Otra cosa importante que se ha incorporado en esto es el límite de tokens. Donde puedo establecer el límite máximo de tokens al navegar. Actualmente es de 3000.

Pero la razón por la que escribo este tema es: ¿existe algún tipo de límite en el uso de herramientas? Porque noté que después de 5 usos de herramientas el proceso se interrumpe. Esta es la otra razón por la que incluí la limitación de resultados en la búsqueda personalizada. Lo establecí en 4 porque entonces la herramienta del navegador puede funcionar con éxito. Si lo establezco en 5, la herramienta del navegador fallará en el quinto uso de la herramienta. :arrow_down_small:

Por ejemplo: en una respuesta, después de 1 búsqueda en Google y 5 navegaciones web seguidas, recibo una advertencia en /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'

No sé exactamente qué causa esto, tal vez sea una limitación. Si es así, ¿hay alguna posibilidad de agregar una configuración a la persona o a la herramienta personalizada para configurar el límite de uso consecutivo de la herramienta en una respuesta?

Editar: Encontré esto que probablemente sea el límite. Sería genial tener la capacidad de anularlo con una configuración que mencioné anteriormente.

Gracias :slightly_smiling_face:

1 me gusta

¿Qué es la herramienta de navegación web de Discourse y dónde puedo encontrarla/obtenerla?

Supongo que se refiere a herramientas que una IA puede usar. Por lo tanto, estas se pueden habilitar al editar personas de IA.

1 me gusta

Aún no me he encontrado con este problema, pero si realmente es una limitación codificada, ¡sería genial poder anularla!

En las personalidades proporcionadas por el plugin por defecto está la de “Investigador”. Puedes echarle un vistazo para ver cómo funciona :slight_smile:

2 Me gusta

¿Qué LLM estás utilizando?

¿Tu LLM está devolviendo más de 5 llamadas a funciones en una sola respuesta, como si fueran llamadas a funciones paralelas?

¿Puedes compartir esa respuesta del LLM?

1 me gusta

GPT4o, GPT4o Mini, Gemini Flash 2. Sinceramente, lo he probado con muchos LLM. :grin:

Sí, esto ocurre cuando configuro Herramientas Forzadas y añado un mensaje del sistema a la Persona para que compruebe las cosas. Por ejemplo: “visita todas las páginas web encontradas en la búsqueda de Google”. Esto es necesario para un caso de uso que tengo.

Te enviaré un ejemplo por mensaje privado porque podría ser contenido inapropiado para el público. En ese ejemplo, el bot está utilizando la Búsqueda de Google y el Navegador Web con Gemini Flash 2.

Creo que veo el error aquí… generalmente max_tools estaba ahí para evitar cadenas enormes con llamadas a herramientas, pero probablemente hay 2 tipos diferentes de máximo:

  • Máximo de veces que damos vueltas con el LLM antes de responder.
  • Cantidad máxima de llamadas a herramientas (que puede ser mucho mayor).
  • Máximo de contexto que las herramientas pueden inyectar. (por ejemplo, si agotas el contexto en 3 llamadas a herramientas y luego agregas otras 2 que hacen que el modelo olvide 2 respuestas de herramientas).

Voy a pensar en esto, es solucionable.

3 Me gusta

recientemente aumenté mucho los números, ¿cómo se ve ahora?

2 Me gusta