Codex信心满满调了个根本不存在的库?3个设置让它不再瞎编

前两天让 Codex 帮我加个文件上传功能。

它啪啪啪写了一堆代码,调用了一个叫 multer 的 Node.js 库。参数格式特别对,返回值类型也很合理。我跑了 npm install,发现装不上。

一查——multer v2.0 根本不存在。

它在假 API 的基础上写了 400 多行代码。全废了。

这种事不是我一个人碰到过。有个叫 chatgptdisaster.com 的网站整理了 160 多条用户投诉,”hallucination”(幻觉)是出现频率第二高的关键词。跟普通聊天 AI 不一样的是——Codex 的幻觉会真的执行,真的写进你的代码里。

而且它的幻觉看起来特别真。语法正确,参数格式完美,返回值类型齐全,你粗看一遍根本发现不了。不是那种乱七八糟的瞎拼,是像一个背了正确答案的学生,在考场上自信地写了一个根本不存在的解题步骤。

为什么会这样?

根本缘由是训练数据有截止点。模型学到的是某个时间点之前的世界。一个库如果在那之后更新了版本、改了 API、甚至被废弃了,它不知道。它只会按照它”记忆”中的版本去调用。

更要命的是,当它不确定某个库存不存在的时候,它不会说”我不知道”。它倾向于”补全”一个看起来合理的答案。这就是为什么它的幻觉总是那么自信——它不是在猜,它是在按照训练规律推演一个”最可能的结果”。

那怎么解决?

我试了许多方法,有三个设置调完之后,翻车率直线下降。

第一个设置:开启”调用前验证”

打开 ~/.codex/config.toml,在 [sandbox] 下面加一行:
enable_library_verification = true。

这个设置的效果是,Codex 在调用任何外部库之前,会先查询 npm 或 pip 的 registry,确认版本号真实存在。查不到的库会被标记为”不可用”,直接阻止你基于假库写代码。

听起来是个小改动,但实际效果立竿见影。以前那种”跑了半小时发现库不存在”的崩溃,基本不会再出现。

第二个设置:建立”允许使用”的库清单

在项目根目录的 AGENTS.md 文件里,把你实际用到的库和版本号列清楚。列如:

允许使用的库:express@4.18.2, multer@1.4.5-lts.1, axios@1.6.0

禁止使用的库:任何未在以上清单中的第三方库

这样 Codex 只能在白名单里选库。它再机智也不会自作机智调用你没装过的东西。

而且这个设置还有个额外好处——每次任务它能少跑几轮无效尝试,省 token 也省时间。

第三个设置:用”先规划后执行”的两步流程

在 AGENTS.md 里加一条规则:每次修改文件之前,先输出完整的修改计划,列出要改哪些文件、调用哪些库、预期结果是什么。等我确认后再执行。

这样做的好处是,你可以在它动手之前看到完整方案。如果方案里有你不认识的库,直接喊停。不用等它写了 500 行废代码再发现。

我一般会在计划确认后说一句”按计划执行”,Codex 有上下文了就不会重新分析整个项目,又省了一轮 token。

三个设置配合起来效果很明显。

我用了两周,代码翻车率从大约三成降到基本没有。而且由于减少了无效循环,额度消耗反而比之前更省。

关键是,你要理解 Codex 的幻觉不是 bug,是推理模型的固有问题。它”想太多”就会编造不存在的东西来填补空白。你不需要等 OpenAI 修好这个问题——自己设好围栏就够了。

你遇到过 Codex 调用不存在的库吗?评论区说说。

© 版权声明

相关文章

1 条评论

none
暂无评论...