OpenAI APIでの"messages"引数エラーの解決方法
問題の説明
OpenAIのgpt-3.5-turbo
モデルを使用する際に、以下のエラーが発生する場合があります:
InvalidRequestError: Unrecognized request argument supplied: messages
このエラーは、使用するAPIメソッドとモデルの組み合わせが不適切であることを示しています。具体的にはチャットモデル(gpt-3.5-turbo
、gpt-4
など)に対して、従来のCompletion.create()
メソッドを使用しようとした場合に発生します。
根本原因
OpenAI APIにはモデルタイプごとに異なるエンドポイントが存在します:
モデルタイプ | 使用すべきAPIエンドポイント | 適切なメソッド |
---|---|---|
チャットモデル | /v1/chat/completions | ChatCompletion.create() |
従来のテキストモデル | /v1/completions | Completion.create() |
チャットモデル(gpt-3.5-turbo
など)にCompletion.create()
を使用すると、messages
パラメータを認識できずエラーが発生します。
解決方法
正しいメソッドの使用
チャットモデルを使用する場合は**openai.ChatCompletion.create()
(SDK v0.28以前)またはopenai.chat.completions.create()
(SDK v1.0以降)** を使用します。
Python実装例(SDK v1.0以降)
import os
from openai import OpenAI
# クライアント初期化
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def get_chat_responses(prompts: list, model="gpt-3.5-turbo"):
responses = []
for prompt in prompts:
# チャット固有のメソッドを使用
completion = client.chat.completions.create(
model=model,
messages=[
{"role": "user", "content": prompt}
],
temperature=0,
max_tokens=20
)
responses.append(completion.choices[0].message.content)
return responses
# 使用例
prompts = ['What are your functionalities?', 'What is the best name for an ice-cream shop?']
responses = get_chat_responses(prompts)
バージョン注意
OpenAI Python SDKのバージョンによって実装が異なります:
- v0.28以前:
openai.ChatCompletion.create()
を使用 - v1.0以降:
openai.chat.completions.create()
を使用(クライアントインスタンス経由)
Node.js実装例(v4.0以降)
const { OpenAI } = require("openai");
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
async function getResponses(prompts, model = "gpt-3.5-turbo") {
const responses = [];
for (const prompt of prompts) {
const completion = await openai.chat.completions.create({
model: model,
messages: [{ role: "user", content: prompt }],
temperature: 0,
max_tokens: 20
});
responses.push(completion.choices[0].message.content);
}
return responses;
}
// 使用例
const prompts = ['What are your functionalities?', 'What is the best name for an ice-cream shop?'];
getResponses(prompts).then(responses => console.log(responses));
よくある間違いと解決策
間違ったアプローチ
以下の方法では問題は解決しません:
messages
パラメータをprompt
に変更するmessages
の定義位置を外部に移動する- 同じ関数内でチャットモデルと従来モデルを混在させる
エラーの特定方法:
404 エラー
が発生する場合、APIエンドポイントとモデルが不一致- "This is a chat model and not supported in the v1/completions endpoint" というエラーメッセージは明示的
モデルとメソッド対応表
モデル | 推奨メソッド (Python v1.0+) | 対応エンドポイント |
---|---|---|
gpt-3.5-turbo | client.chat.completions.create | /v1/chat/completions |
gpt-4 | client.chat.completions.create | /v1/chat/completions |
gpt-3.5-turbo-instruct | client.completions.create | /v1/completions |
babbage-002 | client.completions.create | /v1/completions |
最新モデルの注意
gpt-4-turbo
などの新しいモデルを使用する場合も、チャットメソッドを使用する必要があります。公式ドキュメントでモデル分類を確認しましょう: OpenAI Model Endpoint Compatibility
エラー発生時のチェックリスト
- 使用しているモデルがチャットモデルか確認
- SDKバージョンに応じた正しいメソッドを選択
- エンドポイントとモデルの互換性を確認
- APIキーが正しく設定されているか確認
- パラメータ名にスペルミスがないか確認(
message
vsmessages
など)
適切なAPIメソッドを使用することで、チャットモデルを正しく活用でき、「Unrecognized request argument」エラーを確実に回避できます。