“再试一次”不是 Loop。真正的回环必须让环境状态发生变化、让新证据进入判断,并能解释为什么继续、为什么停止、为什么把问题交还给人。

我的定义是:Loop Engineering = 把目标、动作、环境反馈、评估与停机条件连成一个可控状态机。循环的价值不是多跑几轮,而是让每一轮都减少可观察的不确定性。

重复生成不是 Loop,状态变化才是

最简单的 AI 使用是“一问一答”:给 Prompt,拿结果。结果不满意,再发一句“请优化”。这种做法表面有多轮,实际没有工程意义,因为系统不知道哪里失败、这次改了什么、什么证据说明变好。

一个完整 Loop 至少包含五个动作。每一步都要留下可被下一步读取的状态。

01Plan根据目标与当前状态,选择本轮最小动作;不是一次规划完所有未来。
02Act生成内容、调用工具或修改环境,让世界发生可观察变化。
03Observe读取环境反馈:测试、页面、文件、日志、数据,而不是模型对自己的感受。
04Evaluate用事先定义的标准判断通过、失败、缺证据或需要人决策。
05Update记录状态、修复范围与剩余问题,然后继续、停止或升级。

Anthropic 在“Building Effective Agents”中强调,智能体执行时必须不断从环境取得 ground truth(真实反馈)来判断进度,并设置最大迭代等停止条件。关键不是让模型“多思考”,而是让它接触到自己无法凭语言伪造的事实。

什么叫 Ground Truth

“我已经修复链接”不是证据;链接检查返回 0 个缺失才是。“页面看起来不错”不是证据;指定宽度下无溢出、标题层级正确、浏览器无错误才是。模型可以生成解释,但环境负责给结果。

五种坏 Loop:越自动,错得越稳定

Loop 会放大流程。流程正确,它复利;流程错误,它把偶发错误升级成自动化事故。

FAILURE 01

回声环

生成者同时负责判断自己是否通过,评审只是把原答案换一种说法。没有独立标准,也没有外部证据。

FAILURE 02

盲修环

收到“质量不好”就整篇重写。每轮改变太多,无法知道哪项修复有效,也无法做回归。

FAILURE 03

补丁环

每次失败就在 Prompt 末尾追加一条禁令。规则越积越多、互相打架,根因从未被修复。

FAILURE 04

僵尸环

没有停机预算,失败被藏在无限重试中。系统永远显示“进行中”,却没有任何指标改善。

FAILURE 05

震荡环

修 A 坏 B、修 B 又改回 A。同一问题在两个状态间往返,说明约束冲突或修改粒度失控。

所以我不认同“让它自己一直循环直到做好”这种常见建议。它把最关键的两件事藏掉了:谁定义“好”,谁决定“值得继续”。自动化不负责提供这两个答案,只负责忠实执行。

先判断:这件事值得进 Loop 吗

Evaluator–Optimizer(评估者–优化者)并不是所有任务的默认架构。Anthropic 给出的适用信号很务实:一是人类能清楚表达反馈,二是迭代能带来可测量的提升。缺一项,Loop 很容易变成昂贵的自我对话。

任务是否适合 Loop理由
把一段准确文本改成三种长度通常不需要单次规格足够,失败成本低
根据明确 rubric(评分标准)打磨翻译适合细节可逐轮改善,标准能表达
修复代码直到测试通过非常适合环境给出客观反馈,状态变化明确
决定公司是否进入新市场不能全自动价值权衡属于人,Loop 只能整理证据
“让这份方案更有洞察”暂不适合没有可执行的评估标准

反直觉的判断是:任务越重要,不代表越应该让 Loop 自治。高影响、低可逆、标准含价值判断的任务,反而需要更多人类检查点。自治程度应由可验证性与可逆性决定,而不是由任务难度决定。

一个简洁的准入门槛

能否写出“本轮动作”“环境会返回什么”“怎样算更接近完成”“什么情况必须停”?四个问题都能回答,才值得进入 Loop。

真实案例:这套 AI Lab 页面如何从“完成”变成“通过”

任务:把 12 篇 AI Lab 从合集拆成独立网页这是你正在阅读的网站实际发生过的工作;不包含客户资料,也不需要虚构结果。

如果只把目标写成“拆成 12 个 HTML”,第一轮生成后很容易宣布完成。但用户真正要求的还有:主页在新标签页打开、文章没有左侧目录、字体统一、前后篇导航正确、旧入口不再展示合集。文件存在只证明做了动作,不证明体验成立。

01
定义可观察的完成12 文件、12 入口、0 缺失链接、0 侧栏残留、导航首尾闭合
DoD

把“改好网站”翻译成机器和人都能检查的结果。内容深度属于人工判断;链接数量、文件数量、重复 ID 和控制台错误属于自动检查。

02
生成最小变更共享一份样式,先拆结构,不同时重写 12 篇内容
Act

这一步控制修改面。结构任务与内容任务拆开,避免链接失败时还要判断是模板、样式还是文章重写造成的。

03
从环境取证解析 HTML、检查路径,再用真实浏览器读取 DOM 与控制台
Observe

脚本检查 12 个文件和所有本地链接;浏览器确认实际字体、文章标题、侧栏数量、横向溢出和控制台错误。两层检查捕获不同问题。

04
只修被证据点名的部分旧地址仍显示合集 → 改为兼容跳转;RLHF 写“十一篇” → 修为“十二篇”
Repair

不整站重写,不顺便换框架。每次修复对应一条失败证据,修改后重跑已经通过的链接与页面检查。

05
留下状态与证据验收结果进入 Verification,当前进展进入 Handoff
Update

如果下一个会话看不到完成标准和检查结果,它只能重新猜测。Loop 的最后一步不是输出“完成”,而是把环境留成下一位执行者可验证、可继续的状态。

GENERATION

“我已经拆完了”

这是执行者的自我报告,无法证明用户点击后会发生什么。

ACCEPTANCE

12 / 12 / 0 / 0

12 个页面、12 个新标签入口、0 缺失链接、0 侧栏;结论由环境支持。

这个案例的重点不是网站,而是证据分层:结构正确由解析器证明,交互正确由浏览器证明,内容是否够深由人判断。一个 Grader(评分器)吃不下所有质量维度,必须组合。

Loop Contract:让循环先签合同

下面这份 Loop Contract(回环协议)适合内容、研究、代码和产品交付。它不要求特定工具,但强制每轮说明状态、证据与停止原因。

CONTROLLED LOOP / REUSABLEv1.0
<objective>
最终可观察结果:[填写]
本轮只推进的最小目标:[填写]
不可改变的边界:[填写]
</objective>

<state>
当前版本 / 文件 / 环境:[填写]
已通过项:[列表]
未通过项:[列表]
上轮动作与结果:[填写]
</state>

<action_policy>
每轮只处理一组同根因问题
修改前记录假设;修改后必须取得新环境证据
不得用解释替代测试,不得扩大到未授权范围
</action_policy>

<graders>
硬检查:[测试 / 链接 / schema / 数值阈值]
模型评审:[rubric 与必须引用的证据]
人工判断:[价值取舍、品牌、不可逆决定]
一票否决:[安全 / 合规 / 数据损坏 / 越权]
</graders>

<stop_conditions>
成功:所有必须项通过,且回归检查无退化
预算:最多 [N] 轮 / [时间] / [成本]
无进展:连续两轮核心指标没有改善
震荡:同一标准在通过与失败之间往返
升级:缺少权限、事实或需要人做价值判断
</stop_conditions>

<iteration_log>
每轮输出:假设 → 动作 → 新证据 → 通过/失败 → 下一步
结束输出:最终状态、剩余风险、未做事项、复现方式
</iteration_log>

协议里最重要的是“每轮必须取得新环境证据”。没有新证据的下一轮,只是增加 token,不是推进状态。

生成与验收要分工,但不必迷信“换模型”

我曾经把“让模型自己检查自己”直接等同于自证。这个说法方向对,但太绝对。更准确的表述是:同一次生成后的自由式自评可信度低;独立调用、明确 rubric 和环境证据可以让同一个模型成为有效评审者。

真正需要隔离的是信息和激励,而不只是模型品牌。评审者不需要看作者的辩解,只需要产出、标准和证据;最好在独立上下文运行,避免沿用生成过程中的假设。但只换一个模型、仍然不给标准,也只是换了一个更陌生的审美。

生成者负责

  • 提出方案和执行动作
  • 解释修改假设
  • 根据反馈做局部修复
  • 留下可检查的产物

评审者负责

  • 逐条应用验收标准
  • 引用失败证据
  • 区分必须改与可优化
  • 不替业务责任人做价值决定
三层 Grader,而不是一把尺

优先使用确定性检查捕获格式和行为;用模型 rubric 判断语义、完整性与表达;用人类判断品牌、风险和价值取舍。Anthropic 的 Agent Evals 也强调,没有任何单一评估层能捕获所有问题。

成熟的 Loop,最擅长的是停下来

很多人把自治理解成“不要打断我”。真实生产系统恰好相反:它必须知道何时不该继续。停止不是失败,而是控制面的一部分。

Success stop必须项全部通过,回归没有退化;不是“看起来已经很好”。
Budget stop达到轮次、时间、token 或金额上限;把剩余问题显式交还。
No-progress stop连续两轮关键指标无改善,说明当前动作策略失效。
Oscillation stop同一条标准反复通过又失败;优先检查约束冲突和修改粒度。
Authority stop需要补事实、扩大权限、承担不可逆风险或做价值选择时,必须问人。

每次停止都应附带一份高质量上报:卡在哪条标准、已经试过什么、有哪些证据、推荐哪两个选择、谁能拍板。没有这份状态,所谓“Human in the Loop”只是把烂摊子扔回给人。

Loop 真正沉淀的,不是更多轮次

每次人工终验都应该让下一次循环更聪明:把失败变成测试样本,把反馈变成 rubric,把停机原因变成升级规则,把稳定动作变成可执行检查。否则同一种意见会被重复支付。

Rubrics人类对“好”的明确语言
Test cases正常、边界与失败样本
Traces每轮状态、动作与证据
Escalations系统何时必须把权力交还

最强反对意见是:模型继续变强后,复杂 Loop 会成为多余脚手架。这条意见值得权衡。简单、低风险任务会越来越接近一次完成。但只要结果需要调用工具、修改真实环境、跨越多轮并承担责任,观察、验收和停机就不会消失。模型能力降低的是循环次数,不是控制需求。

Loop Engineering 的成熟标志,不是系统可以永远运行,而是它能用证据说明:我为什么继续、我为什么完成、我为什么现在必须停。

一页带走:设计 Loop 前的 10 问

  1. 最终结果能否被环境观察,而不依赖执行者自述?
  2. 每一轮允许改变什么状态?
  3. 环境会返回什么新证据?
  4. 哪些标准可以硬检查,哪些需要模型或人工判断?
  5. 生成者与评审者是否共享了不该共享的假设?
  6. 修复是否只针对失败根因,而不是整包重写?
  7. 每次修改后会重跑哪些已通过项?
  8. 最大轮次、无进展与震荡条件是什么?
  9. 何种事实、权限和价值决定必须升级给人?
  10. 这次失败会如何进入 rubric、测试集或标准库?

下一篇进入 Harness Engineering:Loop 决定怎样跑,Harness 决定它能看见什么、能做什么,以及错误能否被系统接住。