《AI 渐进编程》之十二:海狮做对了喂小鱼,Agent 做对了喂什么?

📅 2026/7/19 17:52:07 👁️ 阅读次数 📝 编程学习
《AI 渐进编程》之十二:海狮做对了喂小鱼,Agent 做对了喂什么?

前一篇讲的是open_issues.md

把暂时不能解决、但又不能忘掉的问题留下来。

这一篇讨论另一个问题:

当 Agent 做对了一轮任务,系统怎样确认“这次已经通过”?

海狮做对动作以后,训练员会喂它一条小鱼。

那么,Agent 做对以后,应该“喂”什么?

不是一句“做得不错”,也不是让模型因为受到表扬而变聪明。

Agent 真正需要的是一个明确的通过信号

  • 验收条件已经满足;
  • 当前结果可以保留;
  • 修改不需要继续扩大;
  • 项目可以进入下一状态;
  • 已验证的结果可以成为后续工作的依据。

1. 为什么需要通过信号?

AI 编程中经常出现两种问题。

改对了还继续改

问题已经解决,但因为没有明确的结束条件,Agent 继续重构附近代码、增加无关功能,甚至把已经正确的部分重新改坏。

只改对一部分就宣布完成

页面不报错了,不代表后端没有错误副作用;一个测试通过了,也不代表正常路径没有被破坏。

所以,一轮任务不能靠“看起来差不多”结束。

系统需要明确判断:

当前结果能不能保留,这轮任务能不能结束。


2. Agent 得到的“鱼”是什么?

Agent 得到的不是情绪鼓励,而是一组工程信号:

  • 测试通过;
  • 编译成功;
  • 关键路径验证完成;
  • 没有产生错误副作用;
  • 修改范围没有越界;
  • 剩余风险已经记录;
  • 当前任务被标记为完成。

这里说的 reward,并不会直接重新训练模型或修改模型参数。

它主要完成三件事:

  1. 判断结果是否可以接受;
  2. 决定修改循环是否结束;
  3. 把已验证结果写回项目。

因此,更准确地说,验收提供的是:

工作流中的通过信号和状态转移条件。


3. 购物车程序怎样验收?

假设任务是:

修复空购物车结算时的异常行为。

验收不能只看页面是否报错,还要检查:

  • 空购物车是否返回安全错误;
  • 是否阻止支付和下单;
  • 正常购物车是否仍然可以结算;
  • 是否没有创建错误订单;
  • 是否只修改了允许修改的文件;
  • 剩余问题是否写入open_issues.md

只有这些条件都满足,系统才能确认:

当前结果可以保留,这轮任务可以结束。

这就是 Agent 得到的“鱼”。


4. 验收条件要提前写

验收不能等任务结束以后再临时决定。

它应该在任务开始时写进current_task.md

## Task Fix the empty-cart checkout path. ## Allowed - `checkout/service.py` - `tests/test_checkout.py` - `revision_log.md` - `open_issues.md` ## Acceptance 1. Empty-cart checkout returns a safe error. 2. Normal checkout still passes. 3. No payment request is sent. 4. No order is created. 5. Only allowed files are changed. 6. Remaining risks are recorded.

这份文件提前规定了:

  • 什么叫正确;
  • 什么叫越界;
  • 什么必须验证;
  • 什么情况才算完成。

因此,验收既是终点,也是方向。


5. 测试通过不等于任务通过

测试只能检查已经写入测试的条件。

Agent 可能让测试通过,却同时:

  • 写死返回结果;
  • 破坏正常业务路径;
  • 产生未被测试覆盖的副作用;
  • 修改范围外文件;
  • 忘记更新项目状态。

所以,完整验收通常包括:

代码测试 + 业务语义 + 副作用检查 + 修改边界 + 状态回写 = 本轮任务通过

All tests passed只能证明已有测试通过,不能自动证明整个任务完成。


6. 通过以后还要回写状态

验收完成后,需要把结果写回项目:

  • revision_log.md:记录修改原因、验证方法和结果;
  • open_issues.md:关闭已解决问题,保留剩余风险;
  • state.md:更新当前状态和下一步;
  • current_task.md:结束当前任务。

这一步把一次性的通过结果,变成下一轮可以继续使用的项目事实。

否则,下一个 Agent 仍然不知道:

  • 哪条路径已经验证;
  • 哪些问题已经解决;
  • 为什么代码现在这样;
  • 哪些风险仍然存在。

7. 本章小结

海狮做对了,训练员会喂它一条小鱼。

Agent 做对了,得到的是一组明确的通过信号:

  • 目标已经完成;
  • 关键路径已经验证;
  • 正常行为没有被破坏;
  • 修改范围没有越界;
  • 剩余风险已经记录;
  • 当前结果可以保留;
  • 项目可以进入下一状态。

验收不是让 Agent 感到被表扬,而是在决定:

这一轮修改能不能停止,当前结果能不能进入项目历史。

前一篇用open_issues.md保存尚未解决的问题。

这一篇用验收保存已经验证的结果。

一个防止问题被忘记,一个防止正确结果再次被破坏。

两者共同推动项目一轮一轮地收敛。

下一章,我会继续讲:程序项目里的工作台应该怎么搭,才能把代码、状态和人类视图分开。