You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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+的库,自然会找不到对应的属性。

解决办法(推荐用新版语法)

  1. 正确初始化客户端
    旧版是直接给require('openai')返回的对象设apiKey,新版需要先实例化OpenAI类:

    const OpenAI = require('openai');
    // 创建客户端实例,传入API密钥
    const openai = new OpenAI({
      apiKey: "你的API密钥", // 替换成你的实际密钥
    });
    
  2. 修改调用逻辑(新版不再支持回调,用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();
    
  3. 关键细节提醒

    • 旧版的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:39:15