芥末
发布于 2026-06-17 / 6 阅读
0
0

Loop Engineering:让 AI Agent 自己推进任务的循环系统

Loop Engineering 可以翻译成“循环工程”。它解决的问题很直接:当 AI Agent 已经能写代码、查资料、跑命令、改文件之后,人还要不要每一步都手动告诉它下一步做什么?

传统用法是人不断发指令:

修这个 bug。
跑一下测试。
看看哪里失败了。
再改一下。
重新跑测试。
写 PR 描述。

Loop Engineering 的做法不是继续优化单句提示词,而是把这些动作设计成一个可重复运行的系统。人不再逐句指挥 AI,而是设计一个循环,让它自己发现问题、交付结果、检查质量、记录进展,并根据结果决定下一轮要做什么。

一句话概括:

Loop Engineering 不是“提示 AI 做事”,而是“设计一个会持续提示 AI 的系统”。

它和提示词工程、上下文工程有什么区别

AI Agent 相关的“工程”概念不少,但它们并不是同一层东西。

层级 关注点 典型问题
提示词工程 单次输入怎么写 这句话怎么让模型更准确地理解任务
上下文工程 模型这次该看到什么信息 哪些文件、规则、历史记录需要放进上下文
Harness Engineering 单个 Agent 怎么运行 它能用哪些工具、能改哪些文件、失败后怎么处理
Loop Engineering 多轮 Agent 怎么自动推进 它什么时候启动、怎么验证、怎么记住状态、下一轮做什么

可以把它们理解成一层一层往外扩:

flowchart TB
    A[提示词工程<br/>写好单次指令] --> B[上下文工程<br/>组织模型可见信息]
    B --> C[Harness Engineering<br/>配置单次 Agent 运行环境]
    C --> D[Loop Engineering<br/>让 Agent 多轮自动推进任务]

提示词工程管“怎么说”。上下文工程管“给它看什么”。Harness Engineering 管“这次运行怎么跑”。Loop Engineering 管“这一轮结束后,下一轮怎么继续”。

越往上,人越少做具体操作,越多做系统设计。

一个循环由五个动作组成

Loop Engineering 听起来像一个很大的系统,其实拆开后并不复杂。一个完整循环通常包含五个动作:

  1. 发现:找出现在有什么值得处理。
  2. 交付:让 Agent 生成修复、代码、文档或其他产物。
  3. 验证:用测试、规则、审查 Agent 或人工门禁检查结果。
  4. 记录:把状态写到对话之外,避免下一轮忘记进度。
  5. 决策:根据验证结果决定继续、重试、升级给人,还是结束。

流程可以画成这样:

flowchart LR
    A[发现任务] --> B[生成交付物]
    B --> C[验证结果]
    C --> D[记录状态]
    D --> E{是否完成}
    E -- 是 --> F[结束或提交给人]
    E -- 否 --> A

关键点在于“循环”不是简单重复同一条命令。它每跑一轮,都会读取上一轮留下来的状态,并根据新结果调整下一步。

用 CI 修复任务理解 Loop Engineering

假设一个团队希望每天早上自动处理一部分 CI(持续集成)失败问题,可以设计一个这样的循环:

sequenceDiagram
    participant Scheduler as 定时器
    participant Finder as 发现模块
    participant Builder as 生成 Agent
    participant Reviewer as 验证 Agent
    participant Repo as 代码仓库
    participant Memory as 状态文件

    Scheduler->>Finder: 启动每日检查
    Finder->>Repo: 读取失败 CI、Issue、近期提交
    Finder->>Memory: 读取上次处理进展
    Finder->>Builder: 分配可处理任务
    Builder->>Repo: 在隔离工作区修改代码
    Builder->>Reviewer: 提交草稿结果
    Reviewer->>Repo: 运行测试并检查规则
    Reviewer->>Memory: 写入结果、失败原因、下一步
    Reviewer-->>Repo: 通过时创建 PR

这个系统每天可以做几件事:

  • 读取昨天失败的 CI 任务。
  • 找出适合自动修复的问题。
  • 在隔离分支或临时工作区里改代码。
  • 运行测试和检查规则。
  • 通过后创建 PR。
  • 失败时记录失败原因,下一轮继续或交给人。

它和普通定时脚本的区别在于,普通脚本通常只会按固定逻辑重复执行,而 Loop Engineering 里的 Agent 会根据当前状态选择动作。它不是“每天运行同一个脚本”,而是“每天根据仓库现状继续推进任务”。

循环系统需要哪些部件

一个可用的循环系统通常由六类部件组成。

部件 作用 没有它会怎样
自动化触发 决定循环何时启动 人还要手动启动每一轮
隔离工作区 让 Agent 安全修改代码 容易污染主分支或覆盖人的修改
技能集合 提供代码、测试、搜索、提交等能力 Agent 只能聊天,不能真正交付
外部连接器 连接 GitHub、CI、Issue、文档等系统 看不到真实任务来源和执行结果
双 Agent 结构 生成和验证分离 容易让同一个 Agent 给自己放行
持久记忆 把进展写到文件或数据库 每轮结束都像重新开始

这几个部件里,最容易被低估的是“验证”和“记忆”。

没有验证,循环会把错误越滚越大。没有记忆,循环每次启动都只知道当前上下文,看不到长期进度,复杂任务很容易断线。

生成器和评判器必须分开

Loop Engineering 里有一个非常重要的原则:

写代码的 Agent,不应该独自判断自己的代码是否合格。

原因很简单:生成者天然倾向于证明自己的结果已经完成。让同一个 Agent 既写代码又宣布“任务完成”,很容易出现假完成、漏测试、忽略边界条件等问题。

更稳的结构是把角色拆开:

flowchart LR
    A[任务目标] --> B[生成 Agent]
    B --> C[候选结果]
    C --> D[验证 Agent]
    D --> E{是否满足标准}
    E -- 满足 --> F[提交结果]
    E -- 不满足 --> G[指出问题]
    G --> B

生成 Agent 负责完成任务,验证 Agent 负责挑错。验证 Agent 不需要温和,它的任务是检查结果是否满足标准,而不是配合生成 Agent 结束工作。

验证标准越具体,循环越可靠。模糊目标会导致模糊结果。

不推荐这样写目标:

把功能开发完成。

更好的写法是:

完成用户登录功能,必须满足:
1. 支持邮箱和密码登录。
2. 密码错误时返回明确错误信息。
3. 连续 5 次失败后锁定 10 分钟。
4. 登录成功后返回有效 token。
5. 新增或更新测试,登录相关测试全部通过。

Agent 不擅长判断“好不好”,但更擅长核对清单。把主观标准拆成可检查条件,循环才知道什么时候该停。

/goal/loop 的区别

在 Claude Code 这类 Agent 工具中,/goal/loop 代表两种不同的循环方式:一种按目标推进,一种按时间运行。

命令 驱动方式 适合任务 停止条件
/goal 目标驱动 修 bug、补测试、完成验收清单 达到可验证目标
/loop 时间驱动 轮询部署、持续检查 PR、定期扫描状态 人停止或外部条件变化

/goal 的重点是“做到为止”。它适合有明确终点的任务,例如修复某个测试失败,或者完成一个功能清单。每一轮结束后,独立的验证逻辑会检查目标是否满足;如果没满足,就继续生成下一轮修改。

/loop 的重点是“按节奏运行”。它适合持续观察外部状态,例如每隔几分钟检查部署是否完成,或者定期扫描一批等待处理的 PR。

两者不要混用:

错误用法 问题
/loop 修一个有明确终点的 bug 修完后还可能继续空转,浪费 token
/goal 等同事合并 PR 条件不由 Agent 控制,可能一直无法完成
/goal 执行“让代码更好” 目标不可衡量,验证器无法稳定判断
/loop 跑没有退出策略的任务 长时间运行后成本不可控

更简单的判断方式是:

flowchart TD
    A[任务是否有明确完成标准] -->|有| B[使用 goal]
    A -->|没有| C[是否需要周期性检查外部状态]
    C -->|是| D[使用 loop]
    C -->|否| E[先重新定义任务边界]

如果一个任务能写出验收条件,就优先考虑目标驱动。如果任务是在等待外部系统变化,就更适合时间驱动。

状态不能只存在上下文里

Agent 的上下文窗口不是可靠记忆。循环跑得越久,越需要把状态写到对话之外,例如 Markdown 文件、JSON 文件、数据库、Issue 评论或 PR 描述。

一个简单的状态文件可以长这样:

# loop-state.md

## 当前目标
修复 payment 模块中失败的 3 个测试。

## 已完成
- 修复 `test_refund_when_order_cancelled`
- 增加退款金额边界测试

## 待处理
- `test_refund_idempotency` 仍然失败
- 需要检查 refund_id 的唯一约束

## 最近一次失败原因
数据库迁移没有在测试环境中创建唯一索引。

## 下一步
检查 migration 文件,并补充测试环境初始化逻辑。

状态文件的价值不只是“备忘”。它让循环能够跨轮次恢复,也让人可以随时接管。一个没有外部状态的循环,本质上只是一次很长的对话;一旦上下文丢失,系统就很难继续之前的推理链路。

Loop Engineering 的常见坑

Loop Engineering 的风险不在于 Agent 会不会运行,而在于它会不会在没人注意的时候持续做错事。

风险 表现 应对方式
验证债 循环不断产出未经可靠检查的结果 引入测试、审查 Agent、清晰验收条件
理解断层 仓库变化太快,人不知道 Agent 改了什么 要求生成变更摘要,限制单轮改动范围
token 失控 循环次数和上下文规模不可预测 设置预算、轮次上限、超时和人工确认点
假完成 Agent 宣称完成,但关键条件没满足 让验证器按清单检查,不接受笼统结论
过度依赖 人把判断权完全交给循环 关键路径保留人工门禁和代码审查

其中最危险的是验证债。一个没有测试、没有审查、没有退出条件的循环,不是自动化工程,而是自动化放大器。它能放大正确流程,也能放大错误判断。

适合使用 Loop Engineering 的场景

Loop Engineering 适合任务边界清楚、反馈信号明确、可以拆成多轮推进的工作。

适合 原因
修复 CI 失败 有明确失败信号和测试反馈
批量处理小型 Issue 可拆分、可验证、可逐个提交
代码迁移和重构 能用测试、类型检查和规则约束结果
定期检查部署状态 外部状态需要持续轮询
自动整理 PR 反馈 评论、测试、修改可以形成闭环

不适合的场景也要避开:

不适合 原因
需求还没想清楚的功能 Agent 无法替人定义产品边界
缺少测试的大规模重构 验证信号太弱,容易改坏
高风险生产操作 错误代价高,需要人工确认
依赖他人决策的任务 Agent 无法控制外部审批
纯主观质量判断 “更好”“更优雅”很难稳定验证

判断一个任务能不能交给循环,可以问三个问题:

1. 目标能不能写成清单?
2. 每一轮结果能不能被测试或规则验证?
3. 出错时能不能安全回滚或交给人?

三个问题都能回答清楚,才适合让循环自动推进。

搭建第一个循环的最小方案

不需要一开始就做复杂平台。一个最小可用的 Loop Engineering 系统可以只包含四个文件和一个执行入口:

agent-loop/
├── goal.md          # 目标和验收标准
├── loop-state.md    # 当前进展和下一步
├── rules.md         # 代码规范、限制、禁止事项
└── run-loop.sh      # 启动脚本

goal.md 负责定义终点:

# 目标

修复订单模块的退款测试失败。

# 验收标准

- 退款成功路径测试通过
- 重复退款不会产生第二笔退款记录
- 退款金额不能超过订单实付金额
- 所有 order 相关测试通过

rules.md 负责限制 Agent 的行为:

# 规则

- 只能修改 `src/order` 和 `tests/order`
- 不允许修改数据库连接配置
- 不允许跳过或删除现有测试
- 每轮结束必须更新 `loop-state.md`

循环每轮执行时,可以按固定顺序工作:

flowchart TD
    A[读取 goal.md] --> B[读取 rules.md]
    B --> C[读取 loop-state.md]
    C --> D[执行一轮修改]
    D --> E[运行测试]
    E --> F[更新 loop-state.md]
    F --> G{验收标准是否满足}
    G -- 是 --> H[停止并输出结果]
    G -- 否 --> I{是否达到轮次或预算上限}
    I -- 否 --> A
    I -- 是 --> J[停止并交给人]

这个最小方案已经具备循环工程的关键特征:有目标、有规则、有验证、有状态、有停止条件。复杂系统只是把这些能力接到更多工具上,例如 GitHub、CI、任务系统、日志平台和权限系统。

设计循环时要给它边界

一个可靠的循环必须有边界。边界不是束缚 Agent,而是防止它在不该自动化的地方继续扩张。

至少要设置四类边界:

边界 示例
范围边界 只允许修改指定目录或指定文件类型
成本边界 最多运行 5 轮,或 token 预算达到上限后停止
风险边界 涉及数据库迁移、权限变更、生产配置时必须人工确认
质量边界 测试失败、类型检查失败、验收清单不满足时不能提交

边界越明确,循环越像工程系统;边界越模糊,循环越像一次失控的长对话。

核心结论

Loop Engineering 的重点不是让 AI Agent 更“自主”,而是让它在可控的结构里持续推进任务。真正有价值的循环,必须同时满足四个条件:

  • 能发现任务,而不是只执行固定命令。
  • 能交付结果,而不是只给建议。
  • 能独立验证,而不是让生成者自我批准。
  • 能记录状态,并根据状态决定下一步。

人仍然需要负责目标、边界、验证标准和关键决策。Agent 适合在这个框架里反复执行、修正和推进。设计得好,它能减少重复指挥;设计得差,它只会把错误更快地跑完。


评论