“改好了。”
这三个字,是 AI 编程助手(Claude Code、Cursor、Copilot 这些)说得最多、也最坑人的一句。
不是它恶意骗你——是它天生就会”预测一个成功该长什么样“,然后一脸笃定地报告给你,至于到底改没改对,它根本没去看。我用 AI 做站这段时间,被这句”改好了”坑过太多次。这篇把我踩过的坑、和总结出的一套”怎么逼它说真话”的验证法,都给你。
一、AI 不是骗你,是”一脸笃定地错”
先搞清楚为什么会这样,你才知道怎么防。
AI 编程助手的本质,是根据上下文预测”接下来最像的输出”。当它改完一段代码,它预测的下一句就是”改好了、已验证、测试通过”——因为在它见过的海量对话里,改完代码就该这么说。
但”说改好了”和”真改好了”,在它那里是两件事。它没真的去点一下、跑一下、看一眼结果。它给你的,是一个”看起来非常自信的猜测”。
而它最危险的地方,恰恰是这份自信:一个明说”我不确定”的错误,你会去查;一个”一脸笃定”的错误,你会信。它到底会在哪几个地方骗你——
图1:AI 说”改好了”的四种假象
二、”改好了”的四种假象(我全踩过)
对着上面那张图,说说这四种,都真实发生在我身上:
- 说改了,其实没生效 —— 它信誓旦旦”已修复”,我一测,行为跟改之前一模一样。(我有个页面的浏览数全站都显示同一个数 18,它给我讲了一整套原因、说改了,我一刷新——还是 18。)
- 缓存/环境挡着,它却说”好了” —— 它确实改了代码,但没清缓存、没重启服务。它看的是代码,我看的是页面,两个人对不上。(服务器 opcache 没重启,代码变了、页面没变,它却报”完成”。)
- 报错被”吞”了,它以为成功 —— 命令的错误信息进了 stderr,它只看了 stdout,没看到报错,就报告”完成”。
- 理论对、现实错 —— 它给我一套逻辑严密、听着特别对的解释,我差点信了,但它压根没在我的真实环境里验证过一次。
三、怎么逼它说真话:别信结论,要证据
一句话:永远别信”改好了”,只信”我亲眼看到它好了”。把它给你的”结论”,换成你能复现的”证据”——
图2:别信结论,要证据
落到操作,四招:
- 让它给证据,不是结论。“页面正常了”是结论;”curl 返回 200、数据库里的值从 0 变成了 2″是证据。只接受能复现的证据。
- 关键动作自己复核一遍。状态码自己 curl 一次、数据库真实值自己查一次、日志自己扫一眼。花一分钟,省一整天。
- 让 AI 自己去”验证”,而不是”确认”。改完别问它”好了吗”(它只会说好了)——让它”去 curl 这个 URL、把状态码贴出来“”去查数据库那个字段现在是多少“。逼它拿真实数据说话,很多”改好了”当场就露馅。
- 改完先清缓存、重启,再看。很多”假成功”就是缓存 / opcache 挡着。改代码 → 清缓存/重启 → 再验证,是铁律。
四、一个真实例子:它给我讲了一套理论,我一刷新就露馅
我有个页面,浏览数每个工具都显示 18。我问 AI 怎么回事,它给我讲了一整套”这个计数怎么算、缓存怎么影响、去重怎么做”的机制——逻辑严丝合缝,我差点全信。
结果我做了件最土的事:手动刷新了一下。数字纹丝不动,还是 18。
它那套理论,根本没在真实页面上验证过一次。后来一查,真相跟它讲的完全不是一回事——是显示代码读错了对象,把另一篇文章的浏览数漏到了所有页面上。
这件事教会我的:再严密的解释,也替代不了一次真实的点击。
AI 编程助手是好东西,能帮你写、帮你改、帮你查。但记住一句:它是个极其自信的实习生,不是个可靠的质检员。写代码可以交给它,验证真假,必须你自己(或逼它拿真数据)来。
如果你也在用 AI 做站、做工具,被”改好了”坑过、或压根不知道怎么验证 AI 到底做对没有——可以找我聊。这类”AI 说得好听、实际翻车”的坑,我一天能踩好几个,也总结出了怎么防。