2026年10月16日 1 分钟阅读

AI 编码 Agent 真做对了吗?把隐藏验收、失败演练和成本一起纳入验证

tinyash 0 条评论

AI 编码 Agent 最容易让团队放松警惕的时刻,往往是它回复“已完成”之后:命令跑过了,界面看起来正常,代码也能编译,但边界条件可能仍然错了。开源项目 The Second Time Is a Bug 试图把这种不确定性变成可重复的工程练习。它既有一个小型开票应用,也提供 Agent 防护脚本、故障演练和实验方案,让开发者能检查“护栏有没有拦住错误”,而不只依赖模型的自我报告。

项目仓库使用 MIT 许可证,要求 Node.js 22.18 或更高版本;依赖主要是开发工具,运行时没有依赖。它不是一个神奇的 Agent 插件,而是一套可以阅读、执行和改造的工作簿式代码材料。

先看它把验证拆成了什么

仓库的例子是一款 Invoicer 开票应用。guards/ 目录里每个脚本对应一种防护,gate.ts 汇总门控;drills/ 则让开发者在临时副本中触发 Agent 常见错误,再观察防护是否发现问题。另有一个约二十多行的玩具 Agent 循环、可复制的模板,以及实验目录。

这种结构让“可靠性”变成可观察的流程:先有任务和代码,再引入一次特定错误,最后看检查器是否失败。它比只读一张“最佳实践”清单更容易暴露漏洞,因为你可以验证门控对某种失败是否真的敏感。

项目提供以下基础命令:

npm install
npm test
npm run typecheck
npm run gate
npm run drill D06

README 还列出 npm run drills 执行整组演练;浏览器相关的 D13、D14 需要额外安装 Chromium。若未安装,演练 runner 会明确报出缺少环境并以非零状态结束,不应把“部分演练通过”误当成整套验证通过。对于本机版本要求,可先运行 node --version,确认版本至少为 22.18。

把“完成”改成可检查的条件

实验协议提出三种条件:不提供 harness、只提供 AGENTS.md 规则、以及规则加上 pre-commit gate、破坏性命令钩子和 stop hook。每个任务有隐藏验收测试,测试不交给 Agent;Agent 表示完成后,由操作者单独运行验收。若失败,只反馈失败测试名称并让 Agent 重试,最多三轮。

这个设计的价值在于把“Agent 说完成”与“变更通过验收”分离。隐藏测试能降低 Agent 直接迎合可见测试的机会;而失败后只给测试名称,则模拟了真实开发中常见的有限反馈。不过它并非自动证明所有代码正确:验收测试覆盖范围仍由任务设计者决定,隐藏测试只验证已定义的行为。

更重要的是,协议要求每个条件、每项任务至少运行五次,并交错执行不同条件。原因很实际:Agent 输出具有随机性,单次成功不足以得出“护栏有效”的结论;交错执行也能减少时段、服务限流或模型更新造成的偏差。每次记录模型版本、token、耗时、成本、首次通过与返工轮数,失败的运行也要保留。

数字要附带实验边界

仓库的 experiment/results/ 保存作者在 2026 年 10 月 13、14 日进行的 270 次无人值守运行记录,覆盖七项任务和不同条件。这里的数字是该实验设置下的记录,不是对所有代码库或所有 Agent 的普遍结论。协议也明确提醒:小型应用上的少量任务不能直接推广到你的生产代码库,模型版本变化后结果也会过期。

因此,团队采用时可以先替换成自己的高风险任务,例如金额精度、权限边界或不可逆迁移;为每项任务写独立验收,再分别比较“规则”和“规则加门控”。实验要报告分布和失败案例,不只挑一个平均值或成功截图。成本也要连同失败运行一起统计,才能看见返工是否抵消了护栏的收益。

适合做团队内的验证起点

这个仓库适合想把 Agent 约束落到脚本、测试和可复现实验里的开发团队。它的优势是材料透明、演练可执行,而且把规则、门控、隐藏验收和成本测量放进同一套流程;限制则是示例应用和预设任务仍需按团队自己的技术栈、威胁模型与质量标准改造。

可以从一个常见失误开始:选一项曾经发生过的 Agent 回归,写一个能稳定复现的 drill,再补上独立验收。只有在这些检查能真实拦住错误之后,才把它纳入日常 gate。这样,“Agent 已完成”就不再是最终证据,而是验证流程的起点。

相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。