“再试一次”不是 Loop。真正的回环必须让环境状态发生变化、让新证据进入判断,并能解释为什么继续、为什么停止、为什么把问题交还给人。
重复生成不是 Loop,状态变化才是
最简单的 AI 使用是“一问一答”:给 Prompt,拿结果。结果不满意,再发一句“请优化”。这种做法表面有多轮,实际没有工程意义,因为系统不知道哪里失败、这次改了什么、什么证据说明变好。
一个完整 Loop 至少包含五个动作。每一步都要留下可被下一步读取的状态。
Anthropic 在“Building Effective Agents”中强调,智能体执行时必须不断从环境取得 ground truth(真实反馈)来判断进度,并设置最大迭代等停止条件。关键不是让模型“多思考”,而是让它接触到自己无法凭语言伪造的事实。
“我已经修复链接”不是证据;链接检查返回 0 个缺失才是。“页面看起来不错”不是证据;指定宽度下无溢出、标题层级正确、浏览器无错误才是。模型可以生成解释,但环境负责给结果。
五种坏 Loop:越自动,错得越稳定
Loop 会放大流程。流程正确,它复利;流程错误,它把偶发错误升级成自动化事故。
回声环
生成者同时负责判断自己是否通过,评审只是把原答案换一种说法。没有独立标准,也没有外部证据。
盲修环
收到“质量不好”就整篇重写。每轮改变太多,无法知道哪项修复有效,也无法做回归。
补丁环
每次失败就在 Prompt 末尾追加一条禁令。规则越积越多、互相打架,根因从未被修复。
僵尸环
没有停机预算,失败被藏在无限重试中。系统永远显示“进行中”,却没有任何指标改善。
震荡环
修 A 坏 B、修 B 又改回 A。同一问题在两个状态间往返,说明约束冲突或修改粒度失控。
所以我不认同“让它自己一直循环直到做好”这种常见建议。它把最关键的两件事藏掉了:谁定义“好”,谁决定“值得继续”。自动化不负责提供这两个答案,只负责忠实执行。
先判断:这件事值得进 Loop 吗
Evaluator–Optimizer(评估者–优化者)并不是所有任务的默认架构。Anthropic 给出的适用信号很务实:一是人类能清楚表达反馈,二是迭代能带来可测量的提升。缺一项,Loop 很容易变成昂贵的自我对话。
| 任务 | 是否适合 Loop | 理由 |
|---|---|---|
| 把一段准确文本改成三种长度 | 通常不需要 | 单次规格足够,失败成本低 |
| 根据明确 rubric(评分标准)打磨翻译 | 适合 | 细节可逐轮改善,标准能表达 |
| 修复代码直到测试通过 | 非常适合 | 环境给出客观反馈,状态变化明确 |
| 决定公司是否进入新市场 | 不能全自动 | 价值权衡属于人,Loop 只能整理证据 |
| “让这份方案更有洞察” | 暂不适合 | 没有可执行的评估标准 |
反直觉的判断是:任务越重要,不代表越应该让 Loop 自治。高影响、低可逆、标准含价值判断的任务,反而需要更多人类检查点。自治程度应由可验证性与可逆性决定,而不是由任务难度决定。
能否写出“本轮动作”“环境会返回什么”“怎样算更接近完成”“什么情况必须停”?四个问题都能回答,才值得进入 Loop。
真实案例:这套 AI Lab 页面如何从“完成”变成“通过”
如果只把目标写成“拆成 12 个 HTML”,第一轮生成后很容易宣布完成。但用户真正要求的还有:主页在新标签页打开、文章没有左侧目录、字体统一、前后篇导航正确、旧入口不再展示合集。文件存在只证明做了动作,不证明体验成立。
把“改好网站”翻译成机器和人都能检查的结果。内容深度属于人工判断;链接数量、文件数量、重复 ID 和控制台错误属于自动检查。
这一步控制修改面。结构任务与内容任务拆开,避免链接失败时还要判断是模板、样式还是文章重写造成的。
脚本检查 12 个文件和所有本地链接;浏览器确认实际字体、文章标题、侧栏数量、横向溢出和控制台错误。两层检查捕获不同问题。
不整站重写,不顺便换框架。每次修复对应一条失败证据,修改后重跑已经通过的链接与页面检查。
如果下一个会话看不到完成标准和检查结果,它只能重新猜测。Loop 的最后一步不是输出“完成”,而是把环境留成下一位执行者可验证、可继续的状态。
“我已经拆完了”
这是执行者的自我报告,无法证明用户点击后会发生什么。
12 / 12 / 0 / 0
12 个页面、12 个新标签入口、0 缺失链接、0 侧栏;结论由环境支持。
这个案例的重点不是网站,而是证据分层:结构正确由解析器证明,交互正确由浏览器证明,内容是否够深由人判断。一个 Grader(评分器)吃不下所有质量维度,必须组合。
Loop Contract:让循环先签合同
下面这份 Loop Contract(回环协议)适合内容、研究、代码和产品交付。它不要求特定工具,但强制每轮说明状态、证据与停止原因。
<objective> 最终可观察结果:[填写] 本轮只推进的最小目标:[填写] 不可改变的边界:[填写] </objective> <state> 当前版本 / 文件 / 环境:[填写] 已通过项:[列表] 未通过项:[列表] 上轮动作与结果:[填写] </state> <action_policy> 每轮只处理一组同根因问题 修改前记录假设;修改后必须取得新环境证据 不得用解释替代测试,不得扩大到未授权范围 </action_policy> <graders> 硬检查:[测试 / 链接 / schema / 数值阈值] 模型评审:[rubric 与必须引用的证据] 人工判断:[价值取舍、品牌、不可逆决定] 一票否决:[安全 / 合规 / 数据损坏 / 越权] </graders> <stop_conditions> 成功:所有必须项通过,且回归检查无退化 预算:最多 [N] 轮 / [时间] / [成本] 无进展:连续两轮核心指标没有改善 震荡:同一标准在通过与失败之间往返 升级:缺少权限、事实或需要人做价值判断 </stop_conditions> <iteration_log> 每轮输出:假设 → 动作 → 新证据 → 通过/失败 → 下一步 结束输出:最终状态、剩余风险、未做事项、复现方式 </iteration_log>
协议里最重要的是“每轮必须取得新环境证据”。没有新证据的下一轮,只是增加 token,不是推进状态。
生成与验收要分工,但不必迷信“换模型”
我曾经把“让模型自己检查自己”直接等同于自证。这个说法方向对,但太绝对。更准确的表述是:同一次生成后的自由式自评可信度低;独立调用、明确 rubric 和环境证据可以让同一个模型成为有效评审者。
真正需要隔离的是信息和激励,而不只是模型品牌。评审者不需要看作者的辩解,只需要产出、标准和证据;最好在独立上下文运行,避免沿用生成过程中的假设。但只换一个模型、仍然不给标准,也只是换了一个更陌生的审美。
生成者负责
- 提出方案和执行动作
- 解释修改假设
- 根据反馈做局部修复
- 留下可检查的产物
评审者负责
- 逐条应用验收标准
- 引用失败证据
- 区分必须改与可优化
- 不替业务责任人做价值决定
优先使用确定性检查捕获格式和行为;用模型 rubric 判断语义、完整性与表达;用人类判断品牌、风险和价值取舍。Anthropic 的 Agent Evals 也强调,没有任何单一评估层能捕获所有问题。
成熟的 Loop,最擅长的是停下来
很多人把自治理解成“不要打断我”。真实生产系统恰好相反:它必须知道何时不该继续。停止不是失败,而是控制面的一部分。
每次停止都应附带一份高质量上报:卡在哪条标准、已经试过什么、有哪些证据、推荐哪两个选择、谁能拍板。没有这份状态,所谓“Human in the Loop”只是把烂摊子扔回给人。
Loop 真正沉淀的,不是更多轮次
每次人工终验都应该让下一次循环更聪明:把失败变成测试样本,把反馈变成 rubric,把停机原因变成升级规则,把稳定动作变成可执行检查。否则同一种意见会被重复支付。
最强反对意见是:模型继续变强后,复杂 Loop 会成为多余脚手架。这条意见值得权衡。简单、低风险任务会越来越接近一次完成。但只要结果需要调用工具、修改真实环境、跨越多轮并承担责任,观察、验收和停机就不会消失。模型能力降低的是循环次数,不是控制需求。
一页带走:设计 Loop 前的 10 问
- 最终结果能否被环境观察,而不依赖执行者自述?
- 每一轮允许改变什么状态?
- 环境会返回什么新证据?
- 哪些标准可以硬检查,哪些需要模型或人工判断?
- 生成者与评审者是否共享了不该共享的假设?
- 修复是否只针对失败根因,而不是整包重写?
- 每次修改后会重跑哪些已通过项?
- 最大轮次、无进展与震荡条件是什么?
- 何种事实、权限和价值决定必须升级给人?
- 这次失败会如何进入 rubric、测试集或标准库?
下一篇进入 Harness Engineering:Loop 决定怎样跑,Harness 决定它能看见什么、能做什么,以及错误能否被系统接住。