Node.js模块访问OpenAI的completions属性报错求助
解决OpenAI SDK中
chat.completions.create调用时的Cannot read properties of undefined (reading 'completions')错误 问题原因
你遇到的核心问题是OpenAI Node.js SDK的版本不兼容:你使用了v3版本的初始化写法,但调用了v4版本才引入的chat.completions.createAPI结构,导致openai.chat对象未定义,进而触发报错。
解决方案
根据你的需求选择以下两种方案之一:
方案1:升级到SDK v4(推荐)
如果你的项目没有依赖旧版本的限制,建议直接使用最新的v4版本:
- 重装SDK到最新版:
npm uninstall openai npm install openai@latest
- 修改初始化代码为v4的实例化方式:
const OpenAI = require("openai"); const openAiApiKey = "sk-API-KEY"; const openai = new OpenAI({ apiKey: openAiApiKey, });
- 保持原有的聊天补全调用代码不变(v4的API结构就是
chat.completions.create):
const stream = await openai.chat.completions.create({ model: "gpt-3.5-turbo", messages: [{"role": "user", "content": "Hello!"}], stream: true, }); for await (const part of stream) { console.log(part.choices[0].delta); }
方案2:继续使用SDK v3版本
如果你需要保留v3版本,需适配旧版的API调用方式:
- 确认安装v3版本:
npm install openai@^3
- 初始化代码保持你原来的写法:
const openai = require("openai"); const openAiApiKey = "sk-API-KEY"; openai.apiKey = openAiApiKey;
- 修改聊天补全的调用代码,v3中对应的方法是
openai.createChatCompletion:
const stream = await openai.createChatCompletion({ model: "gpt-3.5-turbo", messages: [{"role": "user", "content": "Hello!"}], stream: true, }); stream.on('data', (chunk) => { const lines = chunk.toString().split('\n').filter(line => line.trim() !== ''); for (const line of lines) { const data = JSON.parse(line.replace(/^data: /, '')); if (data.choices[0].delta?.content) { console.log(data.choices[0].delta.content); } } });
内容的提问来源于stack exchange,提问作者eugene_prg
相关产品推荐
相关产品推荐

