Skip to content

OpenAI APIでの"messages"引数エラーの解決方法

問題の説明

OpenAIのgpt-3.5-turboモデルを使用する際に、以下のエラーが発生する場合があります:

InvalidRequestError: Unrecognized request argument supplied: messages

このエラーは、使用するAPIメソッドとモデルの組み合わせが不適切であることを示しています。具体的にはチャットモデル(gpt-3.5-turbogpt-4など)に対して、従来のCompletion.create()メソッドを使用しようとした場合に発生します。

根本原因

OpenAI APIにはモデルタイプごとに異なるエンドポイントが存在します:

モデルタイプ使用すべきAPIエンドポイント適切なメソッド
チャットモデル/v1/chat/completionsChatCompletion.create()
従来のテキストモデル/v1/completionsCompletion.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以降)

python
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以降)

javascript
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-turboclient.chat.completions.create/v1/chat/completions
gpt-4client.chat.completions.create/v1/chat/completions
gpt-3.5-turbo-instructclient.completions.create/v1/completions
babbage-002client.completions.create/v1/completions

最新モデルの注意

gpt-4-turboなどの新しいモデルを使用する場合も、チャットメソッドを使用する必要があります。公式ドキュメントでモデル分類を確認しましょう: OpenAI Model Endpoint Compatibility

エラー発生時のチェックリスト

  1. 使用しているモデルがチャットモデルか確認
  2. SDKバージョンに応じた正しいメソッドを選択
  3. エンドポイントとモデルの互換性を確認
  4. APIキーが正しく設定されているか確認
  5. パラメータ名にスペルミスがないか確認(message vs messagesなど)

適切なAPIメソッドを使用することで、チャットモデルを正しく活用でき、「Unrecognized request argument」エラーを確実に回避できます。