循环工程(Loop Engineering)
Loop Engineering 设计一个 Agent 如何反复“读取状态 → 决策 → 行动 → 观察 → 更新状态”,以及如何可靠停止。
“Loop Engineering”是新兴工程术语;循环本身则是工具调用 Agent 的成熟结构。Anthropic 将 Agent 简化为“LLM 自主地在循环中使用工具”,OpenAI 的 Agent 指南也把 run 描述为持续到退出条件的循环。
当一个 Action 需要用循环、分支、过滤或聚合组合多个工具时,可以把程序作为动作语言,详见程序化工具编排:CodeAct 与 PTC。
Workflow 与 Agent
固定的“查库存 → 判断 → 下单 → 通知”不需要开放式 Agent;而“调查线上故障并选择下一条诊断命令”更适合有边界的 Loop。
最小状态机
每轮都要产生可持久化的状态,而不是只向一段巨大字符串追加聊天记录。
一次 Loop 必须有的边界
轮数、时间、token、费用和并发
只设 max_steps 不够。工具可能一次运行十分钟,模型也可能在单轮消耗大量 token。至少需要:
max_steps:最多模型决策次数;deadline:端到端墙钟时间;max_input_tokens/max_output_tokens;max_cost:按租户或任务限制;max_parallel_tools:防止扇出失控;max_tool_result_bytes:防止 Observation 淹没上下文。
停止原因
不要只记录 failed=true,否则无法评估和恢复。
使用 Agents SDK 运行有界工具循环
下面代码基于 Context7 核验的 OpenAI Agents SDK 0.7.x。工具数据是明确标注的本地模拟值;Agent 的模型调用需要配置 OPENAI_API_KEY。
SDK 管理模型调用与工具结果回传,但业务系统仍要在工具内部实施权限、幂等、超时与审计。
重试要分层
重试必须增加新信息或等待瞬时故障恢复。相同输入、相同状态、相同错误的无限重试只会增加成本。
无进展检测
可以组合确定性信号:
- 连续调用相同工具与相同参数;
- 状态摘要的哈希多轮不变;
- 验收失败原因没有变化;
- 新 Observation 与已有内容完全重复;
- 剩余计划没有缩短;
- 同一解析错误超过阈值。
Loop 可观测性
一次 trace 应能重建:每轮输入摘要、模型/Prompt 版本、工具选择、参数摘要、Observation ID、状态变更、token、延迟、重试、停止原因和最终验收结果。私有推理全文既不是必要的审计字段,也可能包含敏感信息;记录可解释的决策摘要和外部动作即可。