2026年10月15日 1 分钟阅读

AI 编码 Agent 的错误如何复现?用失败演练把防护变成可验证的工程

tinyash 0 条评论

AI 编码 Agent 的问题常常不是“代码没通过测试”,而是它误删测试、跳过验证,最后却报告任务已经完成。单靠一份写着“请谨慎操作”的提示词,很难证明仓库真的能抵御这些失误。一个新近公开的开源配套项目 The Second Time Is a Bug,把这个问题改造成可重复的失败演练:在临时副本中重现 Agent 常见错误,再检查防护是否拦得住。

项目的伴随仓库 second-time-is-a-bug-book/book-companion 使用 TypeScript,README 标明 MIT 许可;它将示例组织为 Guards(防护检查)、Drills(错误演练)、toy-agent(玩具 Agent)、模板和实验工具。演练可由脚本化假模型驱动,不需要 API key、真实模型或网络,因此适合在本地或 CI 中复现,而不是把生产代码当试验场。

先把“防护有效”变成一次可重跑的检查

快速开始需要 Node.js 22.18 或更高版本,以及 Git。仓库 README 给出的主要命令如下:

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

其中 npm test 运行单元测试和 legacy golden master;npm run typecheck 执行 TypeScript 类型检查;npm run gate 按顺序运行防护检查,任何失败都会阻止通过。npm run drill D06 则单独运行 D06 演练,README 将它描述为针对 parseFloat 的浮点金额防护案例。需要注意:这些命令属于该仓库自身的脚本,不应直接假定为任何 Node 项目的通用命令。

完整演练集可以用 npm run drills 执行。项目列出 26 个演练,覆盖删除或跳过测试、空洞断言、危险命令、秘密泄露、不可逆迁移、依赖漂移、遗留代码重构,以及“虚报完成”等问题。D13、D14 两个浏览器演练需要先安装 Playwright Chromium:

npx playwright install chromium
npm run drills

没有 Chromium 时,README 明确说明 D13、D14 不会运行,整体演练会以非零状态结束,因为结果不完整。这一点很关键:CI 不能把“有些检查没跑”误记成通过。

它能帮团队做什么,不能替团队保证什么

演练的价值是让团队在代码变更前验证自己的工程护栏:比如 Agent 是否能删掉关键测试而不被发现、危险命令是否会被阻断、计划与实际改动是否偏离预期。仓库提供的模板也可以作为 AGENTS.md、计划文件、事件记录和 Hook 的起点,团队可以按实际项目裁剪,而不是原样照搬一整套规则。

但这些检查不是形式化证明,也不等于 Agent 永不出错。项目 README 提醒,npm run gate 会比较工作树与 HEAD;不在 Git 仓库里时,依赖 diff 的检查会报告 skipped,而不是猜测。因此在 CI 中需要设置 GUARD_BASE=origin/main,让检查明确针对分支差异。团队还应检查每个 skipped 项,确认它是有意跳过,而非环境配置遗漏。

推荐的落地方式是先挑一个高风险场景,把它写成可重现的演练;然后将对应检查放进提交前或 CI gate;最后记录误报、漏报和执行成本。项目还包含实验工具,用于测量防护是否值得投入。与其追求“Agent 从不犯错”,不如让失败可复现、可观察、可阻断,并确保测试缺失时系统明确失败。

适合谁先试

如果团队正把 AI 编码 Agent 接入真实仓库,且已经遇到测试被删、命令越权或“已完成”但证据不足等情况,这套演练可以作为安全测试的起点。先在隔离分支运行 npm test、npm run gate 和单项 drill,再评估哪些模板适合自己的项目。它提供的是工程化验证思路与可运行示例,而不是开箱即用的通用 Agent 防火墙。

来源与进一步阅读

发表评论

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