Skip to content

Loop Engineering

循环工程:让 Agent 持续迭代直到完成或停止、终止条件与失败出口、三道预算闸、maker/checker 分离、失效模式与面试追问。

Updated View as Markdown
For humans

Loop Engineering

Loop Engineering 是设计 Agent 如何发现任务、构造上下文、执行动作、观察反馈、验证结果、迭代修复、停止或升级给人的工程方法。一句话:让 Agent 自主地、持续地、可靠地完成一个目标,不需要人全程盯着。

它和前几篇的关系是递进的。Prompt 决定每轮模型如何思考和行动,Context 决定每轮模型能看到什么,Harness 决定工具、权限、状态和预算,Loop 决定这些步骤如何重复、验证和停止。没有好的 loop 设计,前三层再好也只是单次任务的工具,不是系统。

循环的对象

裸 ReAct 循环的是“思考、行动、观察”的文本模板。Loop Engineering 把循环本身当系统治理,每一圈真正在变化的是五类变量:

  1. 上下文:每轮喂什么,不是无脑往后拼,要选、要压、要截
  2. 状态:进度、已拿到的关键结果、原始目标,独立存储,不混在对话里
  3. 预算:步数、Token、时间、成本,把预算当一等公民
  4. 工具集:按循环阶段动态收放,而不是全量暴露
  5. 终止:凭什么判断该停,不能全信模型说的“我做完了”

终止条件与失败出口

这是最容易被搞混的一对概念:

  • 终止条件管“做完了就停”。目标可验证,测试绿了、lint 干净了、指标达标
  • 失败出口管“做不完也得停”。重试到上限、预算触顶、超时

无人值守的循环两者缺一不可。只有终止条件没有失败出口,一个改不动的任务会重试到天亮,账单三位数美元。

停止条件必须可程序化验证,不是“代码质量变好”这种主观描述,而是“all tests pass and lint is clean”。判断条件是否成立的应该是独立检查器,不是干活的那个模型自己说了算。maker 和 checker 从停止条件就开始分离。

三道闸

成本控制是 Loop 的基础设施,不是省钱技巧。三道硬性防线:

防线 机制 说明
迭代上限 MAX_ITER 先跑几次看正常任务需要多少轮,设成 2 到 3 倍。设成 1000“以防万一”等于没有
无进展检测 对比相邻两轮状态 commit hash、文件 checksum、测试通过数。连续 N 轮无变化认定卡死
金额预算 每轮累计 token 成本 迭代次数是间接控制,dollar budget 是直接控制。多 Agent 场景尤其重要,并发消耗没有总量控制必失控

预算的三层:单任务重试上限、全局 token 预算、墙钟超时。任何一层触顶,循环就该优雅退出,基于已有信息给答案,而不是无限烧下去。

六组件

一个真正可用的 Loop 至少有六个组件:

Loop 的六个组件

  • Goal Contract:任务目标、非目标(不要顺手做什么)、允许范围、验收标准、风险等级、预算。防 goal drift,越改越偏离原始目标
  • Context Builder:每轮选择必要上下文,保留当前计划、最近失败输出、关键错误片段,历史只留摘要
  • Action Executor:工具、命令、编辑都受权限和沙箱控制
  • Verifier:测试、规则、模型或人。自产自检是最常见的反模式,生成器不能当自己的裁判
  • Stop Policy:success、max_steps、max_time、max_cost、no_progress、repeated_failure、risk_trigger
  • Trace Store:每轮记录输入摘要、模型输出、工具调用、观察、diff、验证结果、成本、停止原因

失效模式

失效模式 表现 防护
Token burn 一直重试没有进展 max_cost 加 no_progress
Goal drift 越改越偏离目标 Goal Contract 加 diff 审查
Self-grading Agent 自己宣布成功 外部 verifier
Test gaming 为通过测试写假实现 人类 review 加额外测试
无限兜圈 反复尝试同一失败操作 卡死检测加强制停止
成本爆炸 单轮读入超大文件导致单轮成本极高 dollar budget 加单轮 token 上限

最关键的教训:gate 可信之前不要启动 loop。一个总是回答“通过”的 verifier,会让循环快速跑完所有迭代,每轮都“成功”退出,交付一堆没经过真正检验的产出。这比不做验证更糟,因为你以为它被验证过。

成熟度分级

L0 手动 prompting,人复制错误信息继续提示。L1 单轮 Agent,能调工具但人决定下一步。L2 有限循环,有 max_steps 和测试。L3 可观测循环,有 trace、预算、失败归因、回滚。L4 调度循环,定时发现任务自动分派,高风险人工审批。L5 组织级循环,多 Agent、多队列、持续评估。

上线要渐进:从手动流程固化成带验证的脚本,跑稳了再加调度和持久状态,之后才放手无人值守。一步从手动跳到完全无人,是最大的反模式。

面试追问

  1. 终止条件和失败出口什么区别? 终止条件管“做完了就停”(测试绿了),失败出口管“做不完也得停”(重试上限、预算、超时)。无人值守时缺了后者会无限重试烧光预算
  2. Loop 比 Harness 多什么? Harness 是单轮的安全网:工具、权限、状态、预算。Loop 管跨轮:什么时候开始、每轮喂什么、怎么验证、什么时候停、失败怎么升级。还有调度节奏和跨运行的状态接力
  3. 怎么防死循环? 三道闸:迭代上限设成正常轮数的 2 到 3 倍、无进展检测(对比 commit hash 或测试数)、金额预算。重复失败检测到同类错误反复出现就升级给人
  4. verifier 为什么必须独立? 自产自检是反模式。生成器自己评估自己会“护短”,gate 不可信时循环快速“成功”退出,交付未经验证的产出。maker 和 checker 从停止条件开始就要分离
  5. 什么任务不适合 Loop? 没有可自动衡量的指标(“做好看点”)、失败代价不可控、目标本身没定义清楚、上下文太敏感不能交给自动系统。判断标准:终止条件能不能写成一段返回 0 或 1 的代码
Navigation

Type to search…

↑↓ navigate↵ selectEsc close