ENΒ·ESΒ·DEΒ·PTΒ·FR
⌘K

Bucle del Agente y Recuperacion de Errores

El bucle agentico principal: recibir mensaje, llamar al LLM, ejecutar herramientas, iterar, responder.

Flujo del Bucle del Agente

  1. Persistir mensaje del usuario β€” almacenado con puntuacion de importancia
  2. Auto-enrutar modelo β€” clasificar complejidad de la consulta (si no ha sido anulado)
  3. Construir system prompt β€” prompt base + skills coincidentes + hechos conocidos
  4. Recuperar contexto β€” recuperacion tri-hibrida de memoria
  5. Iterar (hasta max_iterations):
    • Recopilar memorias antiguas fijadas + mensajes recientes (deduplicados)
    • Construir lista de mensajes en formato OpenAI
    • Llamar al LLM con recuperacion clasificada de errores
    • Si hay llamadas a herramientas β†’ ejecutar cada una, persistir resultados, continuar bucle
    • Si no hay llamadas a herramientas O es la iteracion final β†’ devolver respuesta de texto
  6. Maximo de iteraciones alcanzado β†’ devolver mensaje de timeout

Presupuesto Dinamico de Iteraciones

El agente tiene una herramienta integrada request_more_iterations que extiende el presupuesto del bucle cuando el limite actual es insuficiente:

  • Extiende el presupuesto en 10 iteraciones por llamada
  • Un limite maximo previene la extension ilimitada (tipicamente 25 en total)
  • Requiere un parametro reason explicando lo que queda por hacer
  • Se usa cuando el agente tiene un plan claro pero se quedaria sin iteraciones a mitad de tarea

Estrategia de Recuperacion de Errores

El metodo call_llm_with_recovery clasifica errores y responde en consecuencia:

Tipo de ErrorEstrategia
Auth / BillingDevolver inmediatamente al usuario β€” sin reintento
Rate LimitEsperar retry_after_secs (maximo 60s), reintentar una vez
Timeout / Red / Error del ServidorEsperar 2s, reintentar una vez; si falla, recurrir al modelo anterior
Not Found (modelo incorrecto)Cambiar inmediatamente al modelo de respaldo
DesconocidoPropagar como error
Ultimo Conocido Funcional
Despues de cada llamada exitosa al LLM, la configuracion actual se guarda como config.toml.lastgood. Esto permite la recuperacion automatica de cambios incorrectos en la configuracion.

Correccion del Orden de Mensajes

Para satisfacer las restricciones de los proveedores Gemini, Anthropic y OpenAI, aidaemon ejecuta una correccion de tres pasadas en el historial de mensajes antes de cada llamada al LLM:

  1. Pasada 1: Fusionar mensajes consecutivos del mismo rol (combina arrays de tool_calls)
  2. Pasada 2: Eliminar resultados de herramientas huerfanos (sin tool_call de asistente correspondiente) y eliminar tool_calls huerfanos (sin resultado de herramienta correspondiente)
  3. Pasada 3: Fusionar nuevamente despues de que la eliminacion de huerfanos pueda crear nuevos mensajes consecutivos del mismo rol

Ejecucion de Herramientas

Durante el bucle, cada llamada a herramienta recibe:

  • _session_id β€” inyectado automaticamente para seguimiento de sesion
  • _untrusted_source β€” flag establecido para sesiones originadas por disparadores

Deteccion de Estancamiento y Repeticion

El bucle del agente incluye salvaguardas contra quedarse atascado:

  • Deteccion de estancamiento — si la misma herramienta se llama 3+ veces consecutivas con argumentos similares, el bucle se interrumpe
  • Deteccion de repeticion — detecta texto de respuesta repetido y fuerza una interrupcion
  • Limite maximo de iteraciones — 10 por defecto, extensible a 25 via request_more_iterations

Tipos de Sesion

Tipo de SesionFormatoTrusted
Chat de TelegramChat ID como stringSi
Canal de Slackslack:{channel_id} o slack:{channel_id}:{thread_ts}Si
Canal de Discorddiscord:{channel_id}Si
Disparador de emailemail_triggerNo
Disparador de eventoevent_{uuid}No
Sub-agentesub-{depth}-{uuid}Heredado