高级策略

循环工程

设计能够行动、验证、调整并知道何时停止的反馈循环

上下文工程决定模型能看到什么。循环工程决定系统接下来做什么

循环不再让人反复阅读答案、再动手写下一条提示词,而是把这种后续跟进工作变成一个精心设计的系统。它给 AI 一个目标,让它行动,观察真实反馈,评估结果,然后要么调整、要么停止。

一句话定义

循环工程是围绕 AI 系统设计反馈周期的实践:目标、行动、观察、评估、状态、护栏和停止规则,共同推动工作走向一个可验证的结果。

从好提示词到好循环

一条提示词可以产出出色的第一稿。但当步骤数量无法预先确定、环境可能变化、或者第一次尝试必须对照证据检验时,循环才真正派上用场。

一次性提示词

提问 → 生成 → 返回

模型给出一个答案。由人来判断它是否有效,并写出下一条提示词。

工程化循环

界定 → 行动 → 观察 → 评估 → 调整
                 ↑______________________↓

系统收集证据、记录状态,只有当再跑一轮仍有价值时才继续。

这一思想建立在更早的智能体模式之上。ReAct 论文展示了将行动与来自外部环境的观察交替进行的价值。Anthropic 的评估器-优化器模式增加了一个独立的反馈步骤,而 OpenAI 的智能体构建实用指南则把智能体的运行描述为受退出条件约束的循环。较新的术语循环工程把注意力聚焦到有意识地设计整个循环这件事上。

五个动作

1. 界定

把意图转化为目标、约束、成功标准和预算。

2. 行动

选择一个有边界的动作:搜索、编辑、计算、调用工具,或询问人类。

3. 观察

收集实际发生了什么:测试输出、API 结果、引用来源或用户反馈。

4. 评估

拿证据对照明确的标准——而不是对照模型的自信程度。

5. 调整

更新状态、修改计划、安全地重试、上报人工,或者停止。

循环的关键不在那些箭头,而在箭头之间的契约里:什么算一次行动,哪些观察值得信赖,由谁来评估,哪些状态需要保留,以及执行究竟在什么时候结束。

循环控制 / 交互式模拟器

逐步走完一个真实的反馈循环

选择一个任务,然后一次推进一个信号。注意进展是如何来自环境证据和明确的评估——而不是来自询问模型它是否觉得已经做完了。

选择一个循环

目标

修正结账总额的计算错误,同时不改变正常的折扣行为。

停止规则

针对性的回归测试通过、完整的结账测试套件通过、lint 无告警——或者三次尝试用尽后,循环上报人工。

可信证据

复现步骤、测试输出、代码 diff,以及最终的回归测试套件结果。

01

界定

重读契约

02

行动

执行一个有边界的动作

03

观察

读取外部反馈

04

评估

套用评分标准

05

调整

更新下一步行动

当前信号

修正结账总额的计算错误,同时不改变正常的折扣行为。

迭代1/3
已验证的进展0%
未决问题3

先写循环契约

在挑选模型或框架之前,先写一份小小的契约。如果这些字段含糊不清,循环只会把模糊性变成一轮又一轮的成本。

goal: "哪个可观察的状态应当变为真?"
inputs: "什么触发这个循环?"
state: "哪些事实和尝试记录要在迭代之间保留?"
actions: "系统可以使用哪些工具,拥有哪些权限?"
observations: "这些行动会返回哪些外部信号?"
evaluator: "由哪套评分标准或确定性检查来裁定结果?"
success: "什么证据能证明目标已经完成?"
failure: "哪些情况需要恢复措施或人工介入?"
budget: "轮次、时间、token、金钱或副作用的上限"
没有出口的循环本身就是一种故障模式

永远定义三个出口:证据满足目标时的成功,恢复已不再有意义时的失败,以及循环触及允许的成本或风险边界时的预算耗尽

观察必须来自真实世界

模型说一句"这看起来是对的",并不是有力的证据。有用的观察,必须由被评判的答案之外的东西产生。

任务弱观察强观察
代码修复"这个修复应该有效。"先复现原始故障,然后回归测试和完整测试套件全部通过。
研究"好几个来源都这么说。"每条论断都链接到原始来源,并记录了日期、方法和分歧。
数据提取"这段 JSON 看起来是合法的。"Schema 校验通过,且抽样记录与源数据一致。
内容创作"文案读起来挺清楚的。"通过了一套明确命名的评分标准、事实审查、链接检查和受众测试。
运维操作"请求成功了。"外部系统返回了预期状态,并且留有审计记录。

这正是工具重要的原因:测试、浏览器、数据库、校验器和人工审查,把内部的猜测变成了可观察的结果。

把生成者和检查者分开

低风险的工作可以让同一个模型起草并自查。重要的工作则要用一个职责不同、权限受限的检查者。

生成者

提出修改方案,调用行动类工具,并说明应当收集哪些证据。

检查者

接收目标、产出物和证据;套用评分标准;不能悄悄改写自己正在评判的工作。

检查者不一定非得是另一个 AI。优先选择手头最具确定性的评估器:

  1. 精确检查 — 类型、schema、约束、权限、哈希值
  2. 可执行检查 — 测试、linter、模拟、链接校验
  3. 评分标准检查 — 使用明确标准的独立模型或人类
  4. 结果检查 — 真实的用户行为,或长期的生产环境指标
自信不等于证据

由制造产出物的同一个模型生成的置信度分数,依然只是模型输出。把它当作路由提示,而不是证明。

状态是循环的脊梁

上下文是模型这一轮看到的东西。状态则是一份精简的记录,让下一轮得以继续,而不必重复工作,也不会遗忘进展。

有用的循环状态0/6

存储简明的决策和证据——而不是模型私有的思维链。好的状态体量小、可审查、可以安全地恢复运行。

常见的循环形态

修复循环

复现 → 只改一处 → 运行检查 → 诊断 → 重复或停止

最适合代码、配置、数据清理,以及任何有可执行反馈的任务。

评估器-优化器循环

生成 → 按评分标准打分 → 返回针对性反馈 → 修改

最适合写作、翻译、设计评审,以及那些通过清晰表述的反馈就能提升质量的产出。

研究循环

搜索 → 检视来源 → 找出缺口或矛盾 → 再次搜索 → 综合归纳

最适合完整性无法预先知晓的场景。停止规则应当衡量证据覆盖度,而不是搜索结果的数量。

人工把关循环

准备 → 自动验证 → 在高风险动作前暂停 → 人工批准或调整方向

最适合付款、发布、删除、权限变更、医疗或法律决策,以及其他后果重大的行动。

需要在设计中排除的故障模式

故障发生了什么工程上的应对
无限重试循环没有可衡量的成功出口,也没有预算出口。添加明确的终止状态和硬性的迭代上限。
自我表扬生成者在没有证据的情况下就接受了自己那个看似合理的答案。使用确定性检查或独立的检查者。
上下文滚雪球每次迭代都往上下文里追加所有内容,直到模型丢失信号。持久化结构化状态,每轮只重建相关的上下文。
来回摇摆循环在两个修复方案之间来回切换。检测重复出现的状态,强制换用不同策略或上报人工。
目标漂移局部优化悄悄取代了最初的目标。每个周期都重读那份不可变更的目标和验收标准。
不安全的重复一个本可挽回的错误,在反复发生后变得有害。限制权限、副作用、频率、开销和影响范围。

一个最小实现

let state = initialize(goal, acceptanceCriteria, budget);

while (state.budget.remaining > 0) {
  const context = assembleRelevantContext(state);
  const proposedAction = await maker.chooseAction(context);
  const observation = await tools.executeWithinPolicy(proposedAction);
  const verdict = await evaluator.check({ goal, observation, state });

  state = recordIteration(state, { proposedAction, observation, verdict });

  if (verdict.status === "passed") return complete(state);
  if (verdict.status === "unsafe" || verdict.status === "blocked") {
    return escalateToHuman(state);
  }

  state = adaptPlan(state, verdict.feedback);
}

return stopWithBudgetReport(state);

代码是最容易的部分。真正难的是领域问题:哪个测试能证明 bug 已经消失?哪个来源是权威的?哪个动作是可逆的?谁有权批准最后一步?这些决定才是循环工程的真正工作。

练习:设计一个循环

起草一份循环契约

把变量替换成你自己工作中反复出现的任务。让 AI 挑战薄弱的证据和含糊的停止规则。

为下面这个任务设计一个有边界的 AI 工作循环:

任务:${task:每天早上对新的客户支持工单进行分级}

请定义:
1. 可观察的目标
2. 触发条件和所需输入
3. 允许的行动和工具权限
4. 来自外部环境的可信观察
5. 评估器及其评分标准
6. 在迭代之间保留的状态
7. 成功、失败和预算耗尽三种出口
8. 高风险行动的人工审批关卡
9. 一种让每次迭代都可审计的追踪记录格式

然后指出你的设计中最可能出现的三种故障模式,并修改循环来预防它们。

一个智能体编辑了代码、重读了 diff,然后声称 bug 已经修复。这个循环最重要的缺失环节是什么?

延伸阅读

小结

构建反馈机制,而不只是提示词

一个可靠的循环拥有可衡量的目标、有边界的行动、可信的观察、明确的评估器、精简的状态、安全的出口,以及在后果重大之处保留的人类判断。模型在循环之内;对循环负责的始终是工程师。