AIコーディング 2026.06.07

ChatGPT APIの「InvalidRequestError: Unrecognized request argument」エラー原因と解決方法

タグ:ChatGPT API / openai-python / エラー解決 / API移行

このエラーで何が起きているか

「InvalidRequestError: Unrecognized request argument」というエラーは、ChatGPT APIに送信したリクエストに、そのバージョンが認識できないパラメータ(引数)が含まれていることを示しています。つまり、APIの仕様に存在しないキーをJSONで渡してしまっているということです。

このエラーが出ると、APIへのリクエストが完全に拒否されるため、チャット機能やテキスト生成が全く動作しなくなります。開発中はもちろん、本番環境でも同じことが起きれば、ユーザーに迷惑がかかります。

よくあるパターンが「バージョンの不一致」です。2023年11月のopenai 1.0.0リリースで openai.ChatCompletion という使い方が廃止されました。旧バージョン(openai < 1.0.0)の書き方で新しいバージョン(openai >= 1.0.0)のライブラリを実行すると、Pythonが「そんな引数は知りません」という意味のエラーを返します。

エラーが発生する主な原因

1. パラメータ名のタイプミスまたは古い名前の使用

最も多い原因は、APIドキュメントに記載されていないパラメータ名をリクエストに含めることです。例えば、以下のようなケースが考えられます。

  • 古いドキュメントやブログ記事を参考にして、廃止されたパラメータ名を使っている
  • パラメータ名を間違えて入力している(スペルミスなど)
  • 別のAI APIのパラメータ名と混同している

OpenAIの公式APIドキュメントでは定期的に仕様が更新されるため、参考ページの日付をきちんと確認することが重要です。

2. APIバージョンの不一致

使用しているSDK(Python、JavaScript、Node.jsなど)のバージョンが古い場合、最新のOpenAI APIで追加されたパラメータに対応していないことがあります。逆に、古いAPIを使用しているのに新しいパラメータを送信しても、エラーが発生します。

3. JSONの構造が間違っている

リクエストボディのJSON形式が不正な場合、APIが想定外のキーとして解釈することがあります。ネストが深すぎる、キー名がダブルクォートで囲まれていない、カンマが抜けているなど、JSON構文のエラーが原因になることもあります。

原因の確認:自分のバージョンはどちらか

まずは今インストールされているopenai ライブラリのバージョンを確認しましょう。

pip show openai

実行結果がこんな感じで表示されます:

Name: openai
Version: 1.3.0
Summary: The official Python library for the OpenAI API
...

バージョンが 1.0.0 以上なら、コード側を新しい形式に書き直す必要があります。

エラーが起きるコード(旧形式)

この書き方だとエラーになります:

import openai

openai.api_key = "sk-xxxx..."

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "user", "content": "こんにちは"}
    ]
)

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

上記を openai >= 1.0.0 で実行すると:

AttributeError: module 'openai' has no attribute 'ChatCompletion'

または:

InvalidRequestError: Unrecognized request argument supplied: messages

というエラーが出ます。

解決方法1:コードを新形式に書き直す(推奨)

openai >= 1.0.0 では、APIキーの設定方法と呼び出し方法が両方変わりました。以下が新しい正しい形式です:

from openai import OpenAI

client = OpenAI(api_key="sk-xxxx...")

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "こんにちは"}
    ],
    temperature=0.7,
    max_tokens=100
)

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

何が変わったか

項目旧形式(< 1.0.0)新形式(>= 1.0.0)
インポートimport openaifrom openai import OpenAI
APIキー設定openai.api_key = "sk-..."client = OpenAI(api_key="sk-...")
呼び出しopenai.ChatCompletion.create()client.chat.completions.create()
結果の形式辞書形式オブジェクト形式

環境変数から自動でAPIキーを読み込む場合

from openai import OpenAI

# 環境変数 OPENAI_API_KEY が自動的に読み込まれます
client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "こんにちは"}
    ]
)

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

この場合、事前に以下のコマンドで環境変数を設定しておいてください:

Linux/Mac の場合:

export OPENAI_API_KEY='sk-xxxx...'

Windows PowerShell の場合:

$env:OPENAI_API_KEY='sk-xxxx...'

Windows コマンドプロンプト の場合:

set OPENAI_API_KEY=sk-xxxx...

解決方法2:SDKをアップデートする

Python、Node.js、JavaScriptなどのSDKを使っている場合、古いバージョンが原因かもしれません。以下のコマンドでアップデートしてください。

Python の場合:

pip install --upgrade openai

Node.js / JavaScript の場合:

npm install openai@latest

アップデート後、古いコードが新しいSDKで正しく動作するかテストしてください。SDKの新しいバージョンでは、パラメータ名が変更されていたり、バリデーションが厳しくなっていたりする場合があります。

また、JavaScript(Node.js)での正しいリクエスト形式は以下の通りです:

const OpenAI = require('openai');

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

async function chat() {
    try {
        const response = await openai.chat.completions.create({
            model: "gpt-4o",
            messages: [
                {
                    role: "user",
                    content: "こんにちは"
                }
            ],
            temperature: 0.7,
            max_tokens: 100
            // 以下のような古いパラメータはNG:
            // "max_completion_tokens": 100,  // ← 廃止されたパラメータ
            // "frequency_penalty_range": [0, 2]  // ← 存在しないパラメータ
        });

        console.log(response.choices[0].message.content);
    } catch (error) {
        console.error("Error:", error.message);
    }
}

chat();

解決方法3:旧バージョンを使い続ける

コードを修正できない理由がある場合は、openai ライブラリを旧バージョンに落とすことも可能です。ただ、セキュリティアップデートが適用されなくなるため、本来は推奨されません。

pip install 'openai<1.0.0'

旧バージョンであれば、openai.ChatCompletion.create() の書き方がそのまま動きます。

ただし、この方法は一時的な回避策と考えてください。 長期的には必ず新形式に書き直した方がいいです。

よくあるつまずきポイント

1. 古いブログ記事やStack Overflowの回答を参考にしてしまう

インターネットには2023年以前の古い記事が大量に存在します。OpenAIのAPIは仕様が頻繁に変更されるため、記事の日付をきちんと確認してください。特に以下のパラメータは過去に名前が変わっているので注意が必要です。

  • max_tokens は正しい(max_completion_tokens ではない)
  • presence_penaltyfrequency_penalty が存在する(両方を同時に指定可能)

2. メッセージの結果を辞書として扱おうとするとエラー

新形式では結果がオブジェクトなので、こういう書き方は動きません:

# NG: 新形式ではこう書くと KeyError が出ます
message = response["choices"][0]["message"]["content"]

正しい書き方:

# OK: オブジェクトのドット記法で値を取得
message = response.choices[0].message.content

3. SDKのバージョンと公式ドキュメントが異なるバージョンを参考にしている

OpenAI公式のPythonクライアントは v0.x から v1.0 への移行時に、コードの書き方が大きく変わりました。古い v0.x のコードを v1.0 以上のSDKで実行すると、当然エラーが出ます。自分が使っているSDKのバージョンに対応したドキュメントを確認するようにしましょう。

4. TypeScriptで型定義がない場合

TypeScriptを使っている場合、IDEの型チェックがエラーを事前に警告してくれることがあります。型定義を活用すれば、無効なパラメータをコンパイル時に発見できます。

import OpenAI from "openai";

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

async function chat() {
    const response = await openai.chat.completions.create({
        model: "gpt-4o",
        messages: [
            {
                role: "user",
                content: "こんにちは"
            }
        ],
        temperature: 0.7,
        max_tokens: 100
        // IDEが無効なキーをリアルタイムで指摘する
    });

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

chat();

5. APIキーが間違っていないのにエラーが出る場合

“Unrecognized request argument” というメッセージの場合、実は API キーの問題ではなく、コードの書き方が問題です。再度上記の「新形式」コードと見比べて、形式が一致しているか確認しましょう。エラーメッセージを見ると、どのパラメータが認識されていないのか書かれていることがあります:

InvalidRequestError: Unrecognized request argument supplied: max_completion_tokens

このメッセージから「max_completion_tokens」が問題だと判断でき、それを削除または正しい名前に変更すれば解決します。

移行チェックリスト

既存プロジェクトを新形式に移行するときは、以下を確認してください:

# 1. 現在のバージョンを確認
pip show openai

# 2. 最新の openai ライブラリにアップグレード
pip install --upgrade openai

# 3. コード内の以下を全て置き換え:
#  openai.api_key = ... → client = OpenAI()
#  openai.ChatCompletion.create(...) → client.chat.completions.create(...)
#  response["choices"][0]["message"]["content"] → response.choices[0].message.content

実装後は、簡単なテストコードで動作確認しましょう:

from openai import OpenAI

client = OpenAI(api_key="sk-xxxx...")

# テスト実行
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "テスト"}]
)

# 正常に動作すればメッセージが表示される
print("成功:", response.choices[0].message.content)

応用:複数のエラーメッセージと対応表

ChatGPT API使用時に出るエラーはいくつかパターンがあります。このエラーが出た時の判断材料にしてください:

エラーメッセージ原因対処法
module 'openai' has no attribute 'ChatCompletion'openai >= 1.0.0で旧形式コード新形式に書き直す
InvalidRequestError: Unrecognized request argument引数の名前や形式が新仕様と異なるコード内の全引数を確認
AuthenticationError: Incorrect API keyAPIキーが無効または有効期限切れOpenAIダッシュボードで新しいキーを取得
RateLimitError: Rate limit exceededAPIの呼び出し回数が多すぎる呼び出し間隔を広げるか、待機処理を入れる

参考:公式ドキュメント対応

OpenAI公式ドキュメントでも、openai 1.0.0以降の新形式での実装が記載されています。古い書籍やオンライン記事を参考にする場合は、記事の公開日がいつか確認してから参考にするといいでしょう。

openai ライブラリが 1.0.0 以降に更新されたのは2023年11月なので、それ以前の記事や解説は旧形式で書かれていることが多いです。

次のステップ

新形式への移行ができたら、以下の活用を検討してください:

  • 非同期処理への対応:AsyncOpenAIを使った高速化
  • エラーハンドリング強化:try-except で例外をキャッチし、詳細なログを記録することで問題発生時の原因特定が容易になる
  • トークン数管理:tiktoken ライブラリで入力文字数を事前計算
  • 複数モデルの使い分け:gpt-4o や gpt-4o-mini などの使い分け戦略
  • SDKバージョンの固定:本番環境では SDKバージョンを固定して、テスト環境で新バージョンを検証してから本番に反映させる

あわせて読みたい

参考ソース