NodeJS OpenAI GPT-3 API错误:“无效URL(POST /v1/chat/completions)”

jjjwad0x  于 2023-04-05  发布在  Node.js
关注(0)|答案(2)|浏览(1726)

下面是我的代码片段:

const { Configuration, OpenAI, OpenAIApi } = require ("openai");
const configuration = new Configuration({
    apiKey: 'MY KEY'
})

const openai = new OpenAIApi(configuration)

async function start() {
    const response = await openai.createChatCompletion({
        model:"text-davinci-003",
        prompt: "Write a 90 word essay about Family Guy",
        temperature: 0,
        max_tokens: 1000
    })

    console.log(response.data.choices[0].text)
}

start()

当我运行时:node index
我遇到了这个问题:

data: {
      error: {
        message: 'Invalid URL (POST /v1/chat/completions)',
        type: 'invalid_request_error',
        param: null,
        code: null
      }
    }
  },
  isAxiosError: true,
  toJSON: [Function: toJSON]
}

节点. js版本18.15.0
我已经在互联网上找遍了,尝试了一些解决方案,但似乎没有任何工作。请帮助!
当我在网上查找这个问题时,通常其他人都有一些链接附在他们的代码上。我是这个问题的初学者,所以任何帮助都非常感谢

c6ubokkw

c6ubokkw1#

TL;DR将text-davinci-003作为GPT-3模型处理,参见OPTION 1下的代码。

简介

乍一看,作为过去几个月一直在使用OpenAI API的人,我认为如果你阅读OpenAI官方文档,答案是直接而简单的。好吧,我再次阅读了文档,现在我明白了为什么你会感到困惑。

困惑1

您想使用text-davinci-003模型。此模型最初来自GPT-3模型家族。但如果您查看OpenAI models overview并单击GPT-3,您将不会发现text-davinci-003列为GPT-3模型。这是意料之外的。

困惑二

此外,text-davinci-003被列为GPT-3.5型号。

困惑三

如果这还不够令人困惑,如果你看一下OpenAI model endpoint compatibility,你会发现text-davinci-003列在/v1/completions端点下。这个API端点用于GPT-3模型家族。

等等,什么?

text-davinci-003未列出GPT-3型号,列出GPT-3.5型号,但兼容GPT-3 API端点,这没有任何意义。

测试

text-davinci-003可以被视为GPT-3模型或GPT-3.5模型,或者两者都可以?让我们做一个测试。

选项1:将text-davinci-003视为GPT-3型号--〉IT WORKS ✓

如果你把text-davinci-003当作GPT-3模型,那么运行test-1.js,OpenAI将返回以下完成:
这的确是一个考验

test-1.js

const { Configuration, OpenAIApi } = require('openai');

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

const openai = new OpenAIApi(configuration);

async function getCompletionFromOpenAI() {
  const completion = await openai.createCompletion({
    model: 'text-davinci-003',
    prompt: 'Say this is a test',
    max_tokens: 7,
    temperature: 0,
  });

  console.log(completion.data.choices[0].text);
}

getCompletionFromOpenAI();
选项二:将text-davinci-003视为GPT-3.5型号--〉它无法工作

如果你把text-davinci-003当作GPT-3.5模型,然后运行test-2.js,OpenAI会返回以下错误:

data: {
  error: {
    message: 'Invalid URL (POST /v1/chat/completions)',
    type: 'invalid_request_error',
    param: null,
    code: null
  }
}

test-2.js

const { Configuration, OpenAIApi } = require('openai');

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

const openai = new OpenAIApi(configuration);

async function getCompletionFromOpenAI() {
  const completion = await openai.createChatCompletion({
    model: 'text-davinci-003',
    messages: [{ role: 'user', content: 'Hello!' }],
    temperature: 0,
  });

  console.log(completion.data.choices[0].message.content);
}

getCompletionFromOpenAI();

结论

text-davinci-003视为GPT-3模型。参见OPTION 1下的代码。

qcbq4gxm

qcbq4gxm2#

您正在混合OpenAI API的两种功能。
您可以从提示创建一次性完成,他们称之为Completions,或者您可以从代理和用户之间的讨论创建完成,他们称之为ChatCompletion
根据您要使用的参数不同,参数也会有所不同。
在第一种情况下应该是

const response = await openai. createCompletion({
        model:"text-davinci-003",
        prompt: "Write a 90 word essay about Family Guy",
        temperature: 0,
        max_tokens: 1000
    })

在另一种情况下,您需要指定消息和角色。

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

查看API文档,了解两种不同API之间的差异。

相关问题