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
- Persistir mensaje del usuario β almacenado con puntuacion de importancia
- Auto-enrutar modelo β clasificar complejidad de la consulta (si no ha sido anulado)
- Construir system prompt β prompt base + skills coincidentes + hechos conocidos
- Recuperar contexto β recuperacion tri-hibrida de memoria
- 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
- 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
reasonexplicando 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 Error | Estrategia |
|---|---|
| Auth / Billing | Devolver inmediatamente al usuario β sin reintento |
| Rate Limit | Esperar retry_after_secs (maximo 60s), reintentar una vez |
| Timeout / Red / Error del Servidor | Esperar 2s, reintentar una vez; si falla, recurrir al modelo anterior |
| Not Found (modelo incorrecto) | Cambiar inmediatamente al modelo de respaldo |
| Desconocido | Propagar 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:
- Pasada 1: Fusionar mensajes consecutivos del mismo rol (combina arrays de tool_calls)
- Pasada 2: Eliminar resultados de herramientas huerfanos (sin tool_call de asistente correspondiente) y eliminar tool_calls huerfanos (sin resultado de herramienta correspondiente)
- 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 Sesion | Formato | Trusted |
|---|---|---|
| Chat de Telegram | Chat ID como string | Si |
| Canal de Slack | slack:{channel_id} o slack:{channel_id}:{thread_ts} | Si |
| Canal de Discord | discord:{channel_id} | Si |
| Disparador de email | email_trigger | No |
| Disparador de evento | event_{uuid} | No |
| Sub-agente | sub-{depth}-{uuid} | Heredado |