OpenAI ChatGPT API错误:"InvalidRequestError: 未识别的请求参数:messages"

32
我目前正在尝试使用OpenAI的最新模型:gpt-3.5-turbo。我正在按照一个非常基础的教程进行操作。
我正在使用Google Collab笔记本进行工作。我必须为提示列表中的每个提示发送一个请求,为了简单起见,列表如下:
prompts = ['What are your functionalities?', 'what is the best name for an ice-cream shop?', 'who won the premier league last year?']

我定义了一个函数来实现这个功能:
import openai

# Load your API key from an environment variable or secret management service
openai.api_key = 'my_API'

def get_response(prompts: list, model = "gpt-3.5-turbo"):
  responses = []

  
  restart_sequence = "\n"

  for item in prompts:

      response = openai.Completion.create(
      model=model,
      messages=[{"role": "user", "content": prompt}],
      temperature=0,
      max_tokens=20,
      top_p=1,
      frequency_penalty=0,
      presence_penalty=0
    )

      responses.append(response['choices'][0]['message']['content'])

  return responses

然而,当我调用responses = get_response(prompts=prompts[0:3])时,我会得到以下错误:
InvalidRequestError: Unrecognized request argument supplied: messages

有什么建议吗?
messages参数替换为prompt会导致以下错误:
InvalidRequestError: [{'role': 'user', 'content': 'What are your functionalities?'}] is valid under each of {'type': 'array', 'minItems': 1, 'items': {'oneOf': [{'type': 'integer'}, {'type': 'object', 'properties': {'buffer': {'type': 'string', 'description': 'A serialized numpy buffer'}, 'shape': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Array shape'}, 'dtype': {'type': 'string', 'description': 'Stringified dtype'}, 'token': {'type': 'string'}}}]}, 'example': '[1, 1313, 451, {"buffer": "abcdefgh", "shape": [1024], "dtype": "float16"}]'}, {'type': 'array', 'minItems': 1, 'maxItems': 2048, 'items': {'oneOf': [{'type': 'string'}, {'type': 'object', 'properties': {'buffer': {'type': 'string', 'description': 'A serialized numpy buffer'}, 'shape': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Array shape'}, 'dtype': {'type': 'string', 'description': 'Stringified dtype'}, 'token': {'type': 'string'}}}], 'default': '', 'example': 'This is a test.', 'nullable': False}} - 'prompt'

messages 不是正确的参数。猜测你需要使用 prompt: [] - 0stone0
但提示只需要是你的问题:提示:项目 - 0stone0
1
好的,我自己编写了一些代码,无法重现你的问题。在我的电脑上运行良好。 - 0stone0
你确定你正在使用最新版本的openai软件包吗? - 0stone0
错误信息是 openai.NotFoundError: Error code: 404 - {'error': {'message': '这是一个聊天模型,不支持在v1/completions端点中使用。您是否想使用v1/chat/completions?', 'type': 'invalid_request_error', 'param': 'model', 'code': None}} - undefined
显示剩余2条评论
4个回答

52

问题

您使用了错误的方法名称来获取完成结果。在使用OpenAI SDK(Python或Node.js)时,您需要使用正确的方法名称。

哪个方法名称是正确的呢?这取决于您想要使用的OpenAI模型。

解决方案

下面的表格将帮助您确定给定OpenAI模型的正确方法名称。

首先,在下面的表格中找到与您想要使用的OpenAI模型兼容的API端点。

API 端点 模型组 模型名称
/v1/chat/completions • GPT-4
• GPT-3.5
gpt-4 和已发布的日期模型
gpt-4-32k 和已发布的日期模型
gpt-4-1106-preview
gpt-4-vision-preview
gpt-3.5-turbo 和已发布的日期模型
gpt-3.5-turbo-16k 和已发布的日期模型
gpt-3.5-turbo 的微调版本
/v1/completions (Legacy) • GPT-3.5
• GPT 基础
gpt-3.5-turbo-instruct
babbage-002
davinci-002
/v1/assistants 除了 gpt-3.5-turbo-0301,支持所有模型。
检索工具需要 gpt-4-1106-previewgpt-3.5-turbo-1106
/v1/audio/transcriptions Whisper whisper-1
/v1/audio/translations Whisper whisper-1
/v1/audio/speech TTS tts-1
tts-1-hd
/v1/fine_tuning/jobs • GPT-3.5
• GPT 基础
gpt-3.5-turbo
babbage-002
davinci-002
/v1/embeddings Embeddings text-embedding-ada-002
/v1/moderations Moderations text-moderation-stable
text-moderation-latest
第二步,从下表中找到您需要使用的方法名称。
注意:请留意,您必须使用与您的OpenAI SDK版本兼容的方法名称。
API 端点 Python SDK <v1
方法名
Python SDK v1
方法名
Node.js SDK v3
方法名
Node.js SDK v4
方法名
/v1/chat/completions openai.ChatCompletion.create openai.chat.completions.create openai.createChatCompletion openai.chat.completions.create
/v1/completions (Legacy) openai.Completion.create openai.completions.create openai.createCompletion openai.completions.create
/v1/assistants / openai.beta.assistants.create / openai.beta.assistants.create
/v1/audio/transcriptions openai.Audio.transcribe openai.audio.transcriptions.create openai.createTranscription openai.audio.transcriptions.create
/v1/audio/translations openai.Audio.translate openai.audio.translations.create openai.createTranslation openai.audio.translations.create
/v1/audio/speech / openai.audio.speech.create / openai.audio.speech.create
/v1/fine_tuning/jobs / openai.fine_tuning.jobs.create / openai.fineTuning.jobs.create
/v1/embeddings openai.Embedding.create openai.embeddings.create openai.createEmbedding openai.embeddings.create
/v1/moderations openai.Moderation.create openai.moderations.create openai.createModeration openai.moderations.create
Python SDK v1的工作示例,用于gpt-3.5-turbo模型(即Chat Completions API)。
如果你运行test.py,OpenAI API将返回以下完成内容:
“你好!今天我能帮你做些什么?”

test.py

import os
from openai import OpenAI
client = OpenAI()
OpenAI.api_key = os.getenv('OPENAI_API_KEY')

completion = client.chat.completions.create(
  model = 'gpt-3.5-turbo',
  messages = [
    {'role': 'user', 'content': 'Hello!'}
  ],
  temperature = 0  
)

print(completion.choices[0].message.content)

Node.js SDK v4 的工作示例,适用于 gpt-3.5-turbo 模型(即,Chat Completions API

如果你运行 test.js,OpenAI API 将返回以下完成结果:

你好!今天我能如何帮助您?

test.js

const OpenAI = require("openai");
const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});
    
async function main() {
  const completion = await client.chat.completions.create({
    model: 'gpt-3.5-turbo',
    messages: [
      { role: 'user', content: 'Hello!' }
    ],
    temperature: 0,
  });

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

main();

这个:我觉得OpenAI的命名惯例有点混乱,为什么在介绍示例中会有这样的代码: openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "你是一个有帮助的助手。"}, {"role": "user", "content": "2020年世界系列赛的冠军是谁?"}, {"role": "assistant", "content": "洛杉矶道奇队在2020年赢得了世界系列赛。"}, {"role": "user", "content": "比赛是在哪里进行的?"} ] )``` - corvusMidnight
我同意,这有点令人困惑。我认为他们应该复制粘贴文档中的示例。 - Rok Benko
这是 Python 对吧?有什么 Node.js 的相等语法吗?我之前使用了 const completion = await openai.createCompletion({....}) 但是出现了错误 "This is a chat model and not supported in the v1/completions endpoint. Did you mean to use v1/chat/completions?" - matteo
1
超级有帮助!在我的情况下,我使用了错误的类,所以我使用了错误的openai.Completion.create(),而不是openai.ChatCompletion.create()。而且OpenAI恰好同时拥有ChatCompletionCompletion,这使得这个问题更难被发现。 - undefined

2
response = openai.ChatCompletion.create(
model='gpt-3.5-turbo',
  messages=[
    {"role": "user", "content": "What is openAI?"}],
max_tokens=193,
temperature=0,
)

print(response)
print(response["choices"][0]["message"]["content"])

5
这个答案如果有任何解释都会更好。仅有代码的答案很少有用,特别是随着时间的推移。 - TylerH

0

你应该在响应变量之外定义messages=[{"role": "user", "content": prompt}],并在响应变量中调用它,例如:

messages=[{"role": "user", "content": prompt}]
for item in prompts:
      response = openai.Completion.create(
      model=model,
      messages=messages,
      temperature=0,
      max_tokens=20,
      top_p=1,
      frequency_penalty=0,
      presence_penalty=0
    )

0
对于gpt4,这是对我有效的方法。
        for prompt in prompts:
            # from openai import OpenAI
            # client = OpenAI(api_key=openai.api_key)
            print(f'{self.model_name=}')
            response = openai.chat.completions.create(
            # response = client.chat.completions.create(
                model = self.model_name,
                messages = 
                [
                    # {"role": "system", "content": "You are a helpful assistant."},
                    {"role": "user", "content": prompt},
                ],
                temperature = temperature 
            )
            generated_text: str = response.choices[0].message.content.strip()
            generated_texts.append(generated_text)

当错误发生时
openai.NotFoundError: Error code: 404 - {'error': {'message': 'This is a chat model and not supported in the v1/completions endpoint. Did you mean to use v1/chat/completions?', 'type': 'invalid_request_error', 'param': 'model', 'code': None}}

出现了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接