ChatGPT APIの「InvalidRequestError: Unrecognized request argument」エラー原因と解決方法
このエラーで何が起きているか
ChatGPT APIの公式Python ライブラリを使う際に「InvalidRequestError: Unrecognized request argument」というエラーが発生する。このエラーは、旧バージョン(openai < 1.0.0)の書き方で新しいバージョン(openai >= 1.0.0)のライブラリを実行した時に起こります。
2023年11月のopenai 1.0.0リリースで、openai.ChatCompletion という使い方が廃止されました。それ以降、このレガシーな書き方を使うとPythonが「そんな引数は知りません」という意味のエラーを返すのです。
つまり、あなたのコードは古い方式で書かれているのに、インストールされているライブラリが新しい仕様だという「バージョンの不一致」が原因です。
原因の確認:自分のバージョンはどちらか
まずは今インストールされている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-3.5-turbo",
messages=[
{"role": "user", "content": "こんにちは"}
]
)
print(response.choices[0].message.content)
何が変わったか
| 項目 | 旧形式(< 1.0.0) | 新形式(>= 1.0.0) |
|---|---|---|
| インポート | import openai | from 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-3.5-turbo",
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:旧バージョンを使い続ける
コードを修正できない理由がある場合は、openai ライブラリを旧バージョンに落とすことも可能です。ただ、セキュリティアップデートが適用されなくなるため、本来は推奨されません。
pip install 'openai<1.0.0'
旧バージョンであれば、最初に示したコード(openai.ChatCompletion.create())がそのまま動きます。
ただし、この方法は一時的な回避策と考えてください。 長期的には必ず新形式に書き直した方がいいです。
よくあるつまずきポイント
1. メッセージの結果を辞書として扱おうとするとエラー
新形式では結果がオブジェクトなので、こういう書き方は動きません:
# NG: 新形式ではこう書くと KeyError が出ます
message = response["choices"][0]["message"]["content"]
正しい書き方:
# OK: オブジェクトのドット記法で値を取得
message = response.choices[0].message.content
2. openai と openai >= 1.0.0 の混在コード
レガシーコードを使い続けるバージョン 0.27.x などと、新しい形式のコードが同じプロジェクトに混在していないか確認してください。プロジェクト全体で同じバージョンを使うのが原則です。
3. APIキーが間違っていないのにエラーが出る場合
“Unrecognized request argument” というメッセージの場合、実は API キーの問題ではなく、コードの書き方が問題です。再度上記の「新形式」コードと見比べて、形式が一致しているか確認しましょう。
移行チェックリスト
既存プロジェクトを新形式に移行するときは、以下を確認してください:
# 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-3.5-turbo",
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 key | APIキーが無効または有効期限切れ | OpenAIダッシュボードで新しいキーを取得 |
RateLimitError: Rate limit exceeded | APIの呼び出し回数が多すぎる | 呼び出し間隔を広げるか、待機処理を入れる |
参考:公式ドキュメント対応
OpenAI公式ドキュメントでも、openai 1.0.0以降の新形式での実装が記載されています。古い書籍やオンライン記事を参考にする場合は、記事の公開日がいつか確認してから参考にするといいでしょう。
openai ライブラリが 1.0.0 以降に更新されたのは2023年11月なので、その以前の記事や解説は旧形式で書かれていることが多いです。
次のステップ
新形式への移行ができたら、以下の活用を検討してください:
- 非同期処理への対応:AsyncOpenAIを使った高速化
- エラーハンドリング強化:try-except で例外をキャッチ
- トークン数管理:tiktoken ライブラリで入力文字数を事前計算
- 複数モデルの使い分け:gpt-4 や gpt-4-turbo などの使い分け戦略
あわせて読みたい
- Claude Code 403 Forbiddenエラー【原因・解決手順】APIキー・権限設定
- Claude Code「Connection timeout」エラーの原因と解決方法|3つの対処法
- Claude Code「Extension Not Found」エラーの原因と解決方法|3ステップで直す