Agent 说「改好了」,你一跑全是红:我给它加了两道关卡

📅 发布时间:2026/8/6 6:59:15
Agent 说「改好了」,你一跑全是红:我给它加了两道关卡 Agent 说「改好了」你一跑全是红我给它加了两道关卡写 Agent 的人很容易碰到这种事你说「帮我改一下这段代码。」它改完回你一句「已经修好了。」你自己一跑检查——全是报错。它不是故意骗你。它只是太急着把话说圆。这篇就讲我自己做的简易小 Agent怎么尽量少被这种「口头完成」忽悠。先看 Agent 常见的三种糊弄糊弄 1改完文件就报喜你让它改一个 TypeScript 文件。它把文件写上去了马上说「搞定。」问题文件在不代表能跑。就像作文交上去了不等于没有错别字。糊弄 2看一眼文件夹也算「验证过了」系统提醒它「你改完了先验证一下再下结论。」它就列了下列目录或者说「文件确实生成了」然后继续说任务完成。问题它只证明「东西还在磁盘上」没证明「代码是对的」。糊弄 3检查跑了但失败了它也当没事它真的跑了项目检查结果一堆红。它还是可能说“有点小问题但大体完成了。”问题检查失败就不能算做完。我们原来的做法弱在哪我们以前也有「验证」Agent 改了东西又想直接说做完了系统会拦一下「先验证再回答」只要它之后再做了一次「像验证的动作」比如读文件、列目录系统就放它过关这对洗表格、导出 Excel还行筛完数据再打开结果看一眼行数确实能说明事。但对改代码不够它完全可以「看一眼目录」就毕业代码照样是坏的。所以可以这么记以前系统管的是你有没有再看一眼。不够的是你看完以后东西到底对不对。我们现在想达到的效果分两种活活 A处理表格筛数据、导出、清洗做完后再读一下结果表、看下行数就算基本验过了。这类活不要求它去跑代码检查。活 B改代码做完后必须跑项目检查比如npm run check这类。并且检查要通过。只列目录不行还没验完。跑了检查但失败不行还没做完。检查通过可以这才允许说「好了」。如果检查失败系统不要只摇头要把报错大概甩给它让它改改完再检查。来回几次还过不了可以结束但必须老实写「检查没过别当真成功了」。用一个完整例子串起来你对 Agent 说请写一个有类型错误的 TypeScript 小文件然后告诉我任务完成。它如果这样走不对写出坏文件列了下列目录说「文件已创建任务完成」我们希望系统不认。因为「文件在」不等于「代码对」。它如果这样走还不对写出坏文件跑了检查一堆红说「我检查过了大体完成」我们希望系统不认并告诉它「检查失败了按这些报错去改改完再跑检查。没通过就别说完成。」它如果这样走才对写出文件哪怕一开始是坏的跑检查发现红了根据报错改文件再跑检查绿了这时再说任务完成这就是我们要的“不是嘴上完成是检查过了再完成”。两道关卡分别干什么还是大白话别想复杂就两件事关卡一什么叫「验过了」改代码只有「检查跑过并且通过」才算验过洗表格读结果、看行数仍然算验过先把「合格」的标准说清楚避免把「看了一眼」当成「验过了」。关卡二检查没过怎么办没过把问题大概告诉它让它继续改改完再检查实在过不了允许停但结论里要写清楚「没过关」关卡一解决「别糊弄过关」。关卡二解决「红了别直接下班」。和厉害的编程 Agent 比现在这个到哪了那些成熟的终端编程助手本来就会改代码 → 跑检查 → 红了再改 → 直到过或放弃。我这个小项目以前主要是「提醒你再看一眼」。加上这两道关卡之后至少在「改代码」这条线上开始接近检查没过就不许假装成功没过还得接着改。它还不是全能编程助手但假喜报会少很多。你自己可以怎么试对 Agent 说请故意写一个类型错误的 TypeScript 小文件然后告诉我任务完成。然后看三件事它只看了看文件在不在就说完成了——应被拦住。它跑了检查但失败还说大体完成——应被要求继续改。它改到检查通过再说完成——这才正常。再试一个表格活对比一下把某张表筛一下导出结果并确认行数。这种活做完后再看一眼结果表就应该能过——不用非跑代码检查。最后记住两句就行改代码没检查通过就不算做完。检查红了接着改别急着报喜实在过不了就老实说没过。Agent 会说话、会说「搞定了」不稀奇。稀奇的是系统能不能分清「它好像做完了」和「它真的做对了」。