Motor de bucle del Agent
Descripción general
El motor de bucle del Agent (Agent Loop) es el mecanismo de ejecución central del módulo Work del espacio de trabajo. Impulsa al AI Agent para que realice un bucle autónomo de razonamiento-ejecución: analiza la tarea → selecciona la herramienta → ejecuta la operación → evalúa el resultado → continúa razonando, hasta que la tarea se completa o se activa una condición de salida.
El motor adopta una arquitectura provider-agnostic y admite múltiples proveedores de modelos mediante una interfaz unificada de LLM Adapter.
Arquitectura
Adaptador de LLM
AgentEngine
│
├── OpenAIAdapter
│ ├── Responses API(增量状态管理)
│ └── Chat Completions API(全量上下文)
│
└── AnthropicAdapter
└── Messages API(原生 streaming + thinking)
El adaptador procesa automáticamente:
- Conversión del formato de mensajes (OpenAI ↔ Anthropic)
- Conversión de las definiciones de herramientas
- Procesamiento de Think Tag (elimina automáticamente las etiquetas
<think>de modelos como DeepSeek)
Flujo del bucle
┌─ 预检验证 ──────────────────────────────────────────────┐
│ 拒绝超过输入预算 60% 的提示词,防止静默截断 │
└──────────────────────────┬──────────────────────────────┘
▼
┌─ 主循环(Round 0 → maxTurns-1)─────────────────────────┐
│ │
│ ① 上下文管理 │
│ - 预防性工具结果截断(Layer 1) │
│ - 检查是否需要压实(shouldPreemptiveCompact) │
│ │
│ ② LLM 调用 │
│ - 流式推理(text_delta + thinking + tool_use) │
│ - 事件实时推送到 UI │
│ │
│ ③ 工具执行 │
│ - validateToolCalls → 验证合法性 │
│ - 并发分区 → 按 concurrency 元数据分组 │
│ - 并行执行 → 结果归一化 │
│ │
│ ④ 退出判断 │
│ - 无工具调用 → 退出(end_turn) │
│ - 达到限制 → 退出(max_rounds/max_budget/deadline) │
│ - 异常 → 退出(circuit_breaker/fatal_error) │
│ - 有工具调用 → 继续下一轮 │
│ │
└──────────────────────────────────────────────────────────┘
Parámetros del bucle
| Parámetro | Valor predeterminado | Descripción |
|---|---|---|
maxTurns |
25 | Número máximo de rondas del bucle |
maxErrors |
— | Umbral de errores consecutivos de herramientas |
maxBudgetInputTokens |
— | Límite máximo del presupuesto de tokens de entrada |
maxExecutionMs |
— | Límite de tiempo de ejecución (milisegundos) |
snapshotStrategy |
every_tool_round |
Estrategia de guardado de instantáneas |
resumeSessionId |
— | ID para reanudar una sesión interrumpida |
8 condiciones de salida
| Motivo de salida | Condición de activación |
|---|---|
| end_turn | El Agent completa la tarea, sin más llamadas a herramientas |
| max_rounds | Se alcanza el límite de maxTurns (25 rondas por defecto) |
| circuit_breaker | 5 fallos consecutivos en llamadas al LLM |
| no_tool_calls | La respuesta del LLM no contiene solicitudes de llamada a herramientas |
| user_cancel | El usuario aborta manualmente |
| context_overflow | El contexto sigue desbordándose tras la compresión |
| fatal_error | Error irrecuperable (fallo de autenticación, problema de facturación, etc.) |
| compaction_exhausted | Se agotan los reintentos de compresión (máximo 5 veces) |
Mecanismo de disyuntor
Evita que los fallos consecutivos del LLM provoquen reintentos infinitos:
| Parámetro | Valor | Descripción |
|---|---|---|
CIRCUIT_OPEN_THRESHOLD |
5 | 5 fallos consecutivos activan el disyuntor |
CIRCUIT_OPEN_WAIT_MS |
60,000 | Enfriamiento de 60 segundos tras la apertura del disyuntor |
Clasificación de errores y estrategia de reintento:
| Tipo de error | Estrategia |
|---|---|
rate_limit |
Retroceso exponencial + reintento con jitter aleatorio |
timeout / overloaded |
Reintento inmediato |
context_overflow |
Activa la compresión de contexto |
auth / billing / model_not_found |
Se lanza directamente (sin reintento) |
Eventos de streaming
El proceso de ejecución del Agent notifica a la UI en tiempo real mediante eventos de streaming:
| Tipo de evento | Datos | Descripción |
|---|---|---|
text_delta |
Fragmento de texto | Envío incremental de la salida de texto del Agent |
thinking |
Fragmento de pensamiento | Contenido nativo de la cadena de pensamiento (modelos Anthropic thinking) |
tool_use_start |
Nombre de la herramienta + parámetros | Inicio de la llamada a la herramienta |
tool_result |
Resultado de la ejecución | Ejecución de la herramienta completada |
error |
Información del error | Error durante el proceso de ejecución |
done |
Motivo de salida | Fin de la ronda actual del bucle |
Los eventos de los subagentes se transmiten a la interfaz de UI del Agent padre.
Calibración de tokens EMA
El motor utiliza la media móvil exponencial (EMA) para calibrar dinámicamente la precisión de la estimación de tokens:
| Parámetro | Valor | Descripción |
|---|---|---|
| Valor inicial | 3.0 chars/token | Estimación conservadora (adaptada a escenarios mixtos de chino + código) |
| Primeras 3 veces | Convergencia de la media | Aproximación rápida al valor real |
| Posteriores | EMA α=0.15 | Seguimiento suavizado del consumo real |
| Filtrado | 0.5 < observed < 8 | Exclusión de valores atípicos |
Después de cada llamada al LLM, el factor de calibración se actualiza con el consumo real de tokens, garantizando que la estimación del presupuesto de contexto sea cada vez más precisa.
Instantáneas de sesión
Admite la persistencia del estado de la sesión para evitar la pérdida de progreso ante interrupciones inesperadas:
| Estrategia | Momento de activación |
|---|---|
every_tool_round (predeterminada) |
Tras completarse cada llamada a herramienta |
every_round |
Tras cada interacción con el LLM |
manual |
Solo activación manual |
Las instantáneas se almacenan como archivos JSON y usan escritura atómica (.tmp + rename) para evitar la corrupción de archivos. Mediante resumeSessionId se puede reanudar una sesión interrumpida.
Qué significa para el usuario
Agent Loop es la capacidad de sentir que "el Agent está trabajando de forma continua". Cuando dices "ayúdame a refactorizar la estructura del código de este proyecto", el Agent no se detiene tras darte una sola sugerencia: navega automáticamente por los archivos, analiza la estructura, los modifica uno a uno y ejecuta pruebas, hasta completar la tarea.
Fenómenos que puedes observar:
- El Agent llama a varias herramientas de forma consecutiva (listar archivos → leer archivos → modificar archivos → ejecutar pruebas), y las llamadas a herramientas aparecen una tras otra en la interfaz
- Si el Agent falla 5 veces seguidas (por ejemplo, por un timeout de la API), se detendrá 60 segundos en lugar de reintentar infinitamente: verás una pausa tras la cual el Agent te informará de que ha encontrado un problema
- Por defecto ejecuta como máximo 25 rondas; las tareas extremadamente complejas pueden detenerse tras 25 rondas e informarte de que "se ha alcanzado el número máximo de rondas"
Qué puedes hacer:
- Pulsar el botón Detener en cualquier momento para abortar la ejecución del Agent
- Si el Agent se desvía de la dirección correcta, abórtalo y dale instrucciones más precisas
- Para tareas especialmente complejas, puedes pedir al Agent que primero elabore un plan antes de ejecutar ("elabora primero un plan y ejecútalo después de que yo lo confirme")
Documentos relacionados
- Estrategia de compresión de contexto en 5 capas — Explicación detallada de la gestión de contexto
- Sistema de memoria tridimensional — Inyección y consulta de memoria
- Interacción conversacional de Work — Experiencia del Agent Loop en la interfaz de usuario
