OpenAI与JavaScript报错:TypeError: Cannot read properties of undefined (reading 'create') 求助
OpenAI与JavaScript报错:TypeError: Cannot read properties of undefined (reading 'create') 求助
别担心,这个问题我之前帮朋友排查过,本质是你装了最新版的OpenAI Node.js库,但用的是旧版的调用语法,新版库的API结构和旧版完全不一样了,所以才会出现找不到create方法的错误。我给你一步步说怎么改:
问题根源
OpenAI的Node.js库在v4版本做了大更新,旧版(v3及以下)的初始化和调用方式全部被调整了,你现在的代码是v3的写法,但装了v4+的库,自然会找不到对应的属性。
解决办法(推荐用新版语法)
正确初始化客户端
旧版是直接给require('openai')返回的对象设apiKey,新版需要先实例化OpenAI类:const OpenAI = require('openai'); // 创建客户端实例,传入API密钥 const openai = new OpenAI({ apiKey: "你的API密钥", // 替换成你的实际密钥 });修改调用逻辑(新版不再支持回调,用async/await)
新版库的接口都是基于Promise的,不能再用回调函数了,改成async函数的写法更清晰:async function getCapitalAnswer() { try { const response = await openai.completions.create({ model: "text-davinci-003", // 注意:旧版的engine参数换成了model,而且要写完整的模型ID prompt: "What is the capital of France?", max_tokens: 2048, n: 1, stop: '.', temperature: 0.5, }); // 打印结果 console.log(response.choices[0].text.trim()); } catch (error) { // 捕获错误 console.error('请求出错:', error); } } // 调用函数 getCapitalAnswer();关键细节提醒
- 旧版的
engine参数在新版里要改成model,并且必须填写完整的模型名称(比如text-davinci-003,不能只写davinci) - 新版完全移除了回调支持,必须用
async/await或者.then()的Promise语法
- 旧版的
如果你非要用旧版语法(不推荐)
如果暂时不想改代码,可以卸载新版库,安装v3.3.0版本(最后一个稳定的旧版):
npm uninstall openai npm install openai@3.3.0
这样你的原有代码就能正常运行了,但还是建议逐步迁移到新版,因为旧版后续不会再维护。
备注:内容来源于stack exchange,提问作者stagingserver8
相关产品推荐
相关产品推荐

