用白话理解 AGENT 闭环
Loop Engineering 入门
好的 Agent Loop 不是让 AI 永远干下去,而是让一个有边界的系统知道目标、一次做好一小步、读取真实证据、记住进度,并因正确的理由停止。
系统全貌
从逐轮催促 Agent,转向设计整个系统
没有工程化 Loop 时,人要不断在目标、Agent、测试结果和下一条 Prompt 之间搬运信息。AI 也许很能干,但每次前进仍依赖人看到结果、判断问题,再亲手决定下一步。
Loop Engineering 把这些重复协调外化成系统:触发工作、装配一次有限尝试、读取证据、保存状态,再选择安全路线。人移到更外层,负责定义合同、批准高风险后果,并在循环失败时改进系统。
先记住三件事
- 自动化不等于没人管
人离开的是重复路由,不是责任。
- Loop 包在模型外面
Prompt 和工具调用只是更大运行系统里的部件。
- 停止本身也要设计
成功、阻塞、升级和预算耗尽都是合理终点。
设计动作 01
先看懂最小可用闭环
Loop 最简单的含义是:一次观察会改变下一步。Agent 读取当前状态、采取动作、观察环境、调整计划,最后做出一次路线判断。
真正的工程工作发生在这条循环周围:让目标可观察、让每个动作有边界、把高信号反馈带回来,并防止返回箭头退化成无限重试。
最小结构只有三件关键事
- 目标
必须是能对照的结果,而不是“继续优化”这种活动描述。
- 真实反馈
环境需要返回能改变下一次行动的事实。
- 路线
每一圈都要落到重试、停止、阻塞、升级或取消。
设计动作 02
把意图变成可执行契约
“把结账体验做得更好”给了 Agent 很多自由,却没有给控制器足够的判断依据。第一次尝试之前,先把意图变成系统能够读取的字段。
一份好用的运行合同需要写清目标、范围、非目标、允许的工具、验收证据、预算、停止条件和升级负责人。它不必像法律文件,但必须精确到系统不用临时发明规则也能决定下一条路线。
防止漂移的合同字段
- 范围与非目标
同时说明可以改什么,以及必须保持不动的东西。
- 证据与权限
说明什么能证明成功,以及允许触碰哪些真实系统。
- 预算与升级
限制尝试、时间、Token 和并行度,并指定谁来接手。
设计动作 03
让一次尝试只完成一个有限任务
长时间运行的 Loop 不应该要求一个上下文窗口解决整个项目。一次尝试只调查一个窄假设,做一个小而最好可逆的改动,运行声明过的检查,再记录学到了什么。
尝试失败时,有价值的产物不只是代码。失败测试、日志、被否定的假设、成本与剩余不确定性,都会变成下一次尝试更好的输入。Loop 正是这样收敛,而不是机械重复。
有限尝试保护什么
- 上下文质量
任务足够小,模型才有空间理解真正相关的事实。
- 可逆性
小 diff 更容易检查、撤销,也更容易与证据对照。
- 学习价值
只要证据被保存,失败的尝试也能推动系统前进。
设计动作 04
让“完成”成为裁决,而不是感觉
语言模型可以给出逻辑自洽、语气自信的解释,却仍然错误理解了真实环境。所以执行者说“做完了”只能算一项主张,不能直接当作完成信号。
独立证据既可以是确定性的,例如测试或数据库不变量;也可以是判断性的,例如另一位审查者按 Rubric 评价。强 Loop 会组合多层信号:便宜检查自动跑,真实 E2E 观察用户行为,而品味、意图与重大后果交给人。
证据需要分层
- 确定性检查
测试、类型、不变量和策略规则快速且可重复。
- 真实场景观察
浏览器、CI、日志、截图和用户路径能发现环境差异。
- 人的判断
意图、品味、取舍与不可逆后果仍然属于人的领域。
设计动作 05
把记忆移出对话窗口
上下文窗口是工作记忆,不是数据库。长对话会被压缩,Agent 会重启,文件会变化,早期假设也会过期。如果进度只存在聊天里,新尝试就可能重复旧调查,甚至推翻已经正确的修复。
持久状态要保存恢复所需的事实:当前目标、允许范围、工作队列、试过的方案、测试输出、重要决策、剩余阻塞、成本,以及上一次为什么停止。Git、进度文件、任务系统或数据库都可以承担这个角色。
持久状态不是聊天全文
- 事实优先
保存当前代码、检查、决策和阻塞,而不是所有思维过程。
- 每轮刷新
每次尝试重新读取当前现实,而不是迷信旧记忆。
- 可恢复交接
不同 Agent 或人无需重建整段对话也能继续。
设计动作 06
设计多种正确的停止方式
不安全的 Loop 只认识一个终点:成功。其他一切都会自动变成下一次重试。可靠控制器会把停止看成路由问题,并在运行前就命名所有终态。
PASS 表示声明过的证据已满足;BLOCKED 表示外部依赖阻止推进;ESCALATE 表示系统缺少权限或判断力;BUDGET EXHAUSTED 表示实验已经触顶;CANCELLED 表示人或策略主动结束。它们都不应该被伪装成无声失败。
停止控制器要问四个问题
- 证据通过了吗?
通过就打包证据并停止,不再重复同一任务。
- 失败能教会下一轮吗?
只有出现新且可行动的信息、预算仍够时才重试。
- 需要人来决定吗?
遇到模糊、高风险、权限不足或预算耗尽就升级。
设计动作 07
拿掉一个部件,看 Loop 怎样坏掉
可靠行为来自多个部件协同,而不是某个模型单独足够聪明。缺少证据、记忆、权限边界、隔离空间或停止控制器时,再强的模型也无法长期补偿。
理解 Loop Engineering 最快的方法,是故意把机器拆坏。每个缺失部件都会产生可识别的故障模式,系统应该能监测这些信号并修复对应层。
每种故障都有特征
- 观察症状
重复尝试、过早完成、diff 冲突和审查积压都是系统信号。
- 修对应层
不要把每次失败都归因于 Prompt 不够长或模型不够大。
- 从 Trace 改进
把重复事故固化为测试、Skill、Hook、Grader 或更窄权限。
设计动作 08
看清 Loop Engineering 里的五层循环
人们会在不同时间尺度上使用“Loop”。最内层是模型在一次运行中调用工具;外一层由验证器推动重试;更宽的运营 Loop 发现工作并跨会话保存;改进 Loop 根据 Trace 修改 Harness;最外层的人类 Loop 负责目标、权限、风险和后果。
这些层是嵌套关系,不是相互替代。更好的 Prompt 仍然重要,上下文仍然要策划,Harness 仍然提供工具和护栏。Loop Engineering 追问的是:这些部件怎样在时间中反复与现实互动。
每一层回答不同问题
- Agent 能行动吗?
执行循环把模型决策连接到工具和环境反馈。
- 工作能收敛吗?
验证与运营把多次尝试变成持续、证据驱动的进展。
- 系统能负责吗?
改进与人类 Loop 管理学习、权限和真实世界后果。
设计动作 09
走一遍真实的 CI 修复 Loop
实用 Loop 可以远小于“软件工厂”。想象一个只响应结账测试失败的 Routine:CI 是触发器,合同把修改限制在结账模块,Agent 在隔离分支里工作,独立检查决定下一条路线。
关键产物不只是补丁。一份好运行应该交付证据包:什么触发了工作、改了什么、跑了哪些检查、还不确定什么、用了多少预算、为什么停止,以及是否仍需要人工批准。
适合第一次部署的形状
- 稳定信号
选择触发与验收都明确的工作,例如可复现的 CI 失败。
- 最窄权限
只给任务确实需要的权限与最小可写范围。
- 可审查交付
以小 diff、证据、停止原因、成本和已知缺口收尾。
开始搭第一个 LOOP
自动化下一轮之前,先回答七个问题
当任务会重复、环境能够返回有意义证据,并且下一步可以被限制时,Loop Engineering 才最有价值。如果工作是确定性的、很容易写成脚本,那就直接用脚本;如果成功无法判断,或后果无法安全隔离,就让人继续留在执行路径里。
从一个工作流、低权限、可见 Trace 和很小的尝试上限开始。密切审查前几次运行。只有当系统能解释它看到了什么、改了什么、为什么停止、还不确定什么时,才逐步扩大自治。
第一个 Loop 检查表
- 什么可观察结果代表工作结束?
- Agent 可以改什么,哪些内容明确不在范围内?
- 哪些证据来自环境,而不是 Agent 自己的报告?
- 一次有限尝试做什么;尝试、时间、Token 和并行度预算是多少?
- 进度、证据、决策与阻塞保存在哪里,怎样跨越对话?
- 哪些结果会重试、停止、阻塞、取消或升级给哪位负责人?
- 重复失败怎样变成测试、Skill、Hook、Grader、工具或更安全策略?
不要混淆这些设计尺度
- Prompt这条指令怎样表达?
一次尝试中的一个控制输入。
- Context模型此刻应该看到什么?
为一次推理选择的高信号信息。
- Harness这个 Agent 能安全地做什么?
模型周围的工具、权限、沙箱、Hook、记忆和恢复。
- Loop工作怎样持续推进并停止?
触发、合同、尝试、证据、状态、路由和人工边界。
- Factory大量 Loop 怎样规模化组织?
队列、隔离、审查容量、治理与组合层学习。
Loop Engineering 不是让 AI 一直做,而是设计系统怎样知道下一步、怎样证明做对、怎样在该停时停下,并把失败变成下一次更好的运行。
术语说明:“Loop Engineering”是正在形成中的 AI Agent 实践标签,不是单一正式标准。本指南综合了 2024–2026 年 Anthropic / Claude、Addy Osmani、OpenAI、LangChain 与 IBM 的公开工程资料,不宣称某个个人是绝对首创者。