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 调用不存在的库吗?评论区说说。





