开发者问题收集

OpenAI API 错误:“TypeError:无法读取未定义的属性(读取‘选择’)”

2023-10-06
4592

我研究了各种可能的解决方案:

这是我的代码:

import { config } from "dotenv"
config()

// New
import OpenAI from 'openai';
import readline from "readline"

const openai = new OpenAI({
  apiKey: 'My Key', // defaults to process.env["OPENAI_API_KEY"]
});

const userInterface = new readline.createInterface({
    input: process.stdin,
    output: process.stdout

})

userInterface.prompt()
userInterface.on("line", async input => {
    const res = await openai.chat.completions.create({
        model: 'gpt-3.5-turbo',
        messages: [{ role: 'user', content: input}],
    })
    console.log(res.data.choices[0].message.content)
    userInterface.prompt()
})

当我运行代码时,我从帖子标题中收到错误消息: TypeError:无法读取未定义的属性(读取“选择”)

我尝试了以下方法来修复该问题:

  • 使用命令重新加载窗口: Developer:Reload.Window
  • 使用不同的 OpenAI API 密钥
  • package.json OpenAI 更新为最新版本 4.11.1
  • 通常使用不同的 console.log 代码/输出和代码结构来解决问题

有人能给我指出正确的方向吗?除了用户输入之外,一切都正常。作为指导,我使用了此视频: https://www.youtube.com/watch?v=4qNwoAAfnk4 。我尽可能更新了项目。为什么用户输入不起作用?

此外,我电脑上的代码已实现可正常运行的 apiKey 。谢谢阅读!

2个回答

OpenAI NodeJS SDK v4 于 2023 年 8 月 16 日 发布 ,是 SDK 的完全重写版本。除其他外,提取消息内容的方式也发生了变化。请参阅 v3v4 迁移指南

• 如果您拥有 OpenAI NodeJS SDK v3

import { Configuration, OpenAIApi } from 'openai';

const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});

const openai = new OpenAIApi(configuration);

const chatCompletion = await openai.createChatCompletion({
  model: 'gpt-3.5-turbo',
  messages: [{ role: 'user', content: 'Hello!' }],
});

console.log(chatCompletion.data.choices[0].message);

• 如果您拥有 OpenAI NodeJS SDK v4

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});

const chatCompletion = await openai.chat.completions.create({
  model: 'gpt-3.5-turbo',
  messages: [{ role: 'user', content: 'Hello!'}],
});

console.log(chatCompletion.choices[0].message); // There's no "data" property
Rok Benko
2023-10-06

console.log(res.data.choices[0].message.content) 更改为 console.log(res.choices[0])console.log(res.choices[0].message.content) 解决了该问题并修复了正确的用户输入功能。

Dimitri Williams
2023-10-06