AI 补全的代码用了已经废弃的 API
问题现象
让模型按现有文件的风格补一个函数,代码看起来很合理,但一运行就报错:
TypeError: client.createCompletion is not a function换一种问法、让它「再检查一遍」,它只是把同样的写法换个顺序,问题照旧。 人工翻一遍官方文档才发现,这个接口在两三个大版本之前就已经改名了。
排查过程
- 先确认本地装的到底是什么版本,而不是记忆中的版本:
npm ls openai
# 或者
pip show openai- 把官方文档里当前版本的函数签名直接贴进对话,要求按这个签名重写:
以下是当前版本的签名,请严格按它重写,不要使用其它版本的写法:
client.chat.completions.create({ model, messages })
- 让模型显式写出「它依据的是哪个版本」:
在代码注释里标明你依据的 SDK 版本号。
这一步很有用:模型一旦要写出具体版本号,就会暴露它的假设,而不是继续含糊过去。
把 package.json 里 dependencies 那几行贴进上下文,效果也类似。
根因
| 我默认的前提 | 实际情况 |
|---|---|
| 模型知道我的依赖版本 | 上下文里根本没有版本信息 |
| 训练数据里的 API 仍然有效 | 已经废弃或被重命名 |
| 让它「检查一遍」能发现问题 | 它检查的是自己的记忆,不是本地代码 |
模型不是在「猜」,它是在用训练数据里最主流的写法。问题在于主流 ≠ 我装的版本。
解决办法
- 每次让模型写代码前,先把相关依赖的版本片段贴进上下文:
当前环境:Node.js 20,openai@4.60.0
请只使用 4.x 的接口。- 在长期使用的提示词里固定一条:不确定的接口先问,不要直接写。
- 生成后立刻跑一次,把原始报错整段回贴,而不是自己转述成「报错了」。
原始报错里的函数名和堆栈信息本身就是最有效的线索。 - 涉及关键逻辑时,让模型同时给出「它认为的文档依据」,方便核对。
复盘
这个坑的本质是上下文缺失,不是模型能力问题。给它版本信息、给它报错原文, 它的表现会立刻不一样。所以遇到这类问题,先补上下文,再考虑换模型。