logo
Desarrollo
Buscar
Motor de bucle del Agent

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)
                      
                      AgentEngine
    │
    ├── OpenAIAdapter
    │   ├── Responses API(增量状态管理)
    │   └── Chat Completions API(全量上下文)
    │
    └── AnthropicAdapter
        └── Messages API(原生 streaming + thinking
                    
Este bloque de código en una ventana flotante

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) │ │ - 有工具调用 → 继续下一轮 │ │ │ └──────────────────────────────────────────────────────────┘
                      
                      ┌─ 预检验证 ──────────────────────────────────────────────┐
│ 拒绝超过输入预算 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)          │
│     - 有工具调用 → 继续下一轮                             │
│                                                          │
└──────────────────────────────────────────────────────────┘

                    
Este bloque de código en una ventana flotante

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