OpenAI APIエラーの解決方法|ChatCompletion廃止・GPT-4アクセス・画像アップロード完全ガイド
このやり方で何ができるか
OpenAI APIを使う開発者がよく直面する3つの問題を解決できます。それは、古い書き方のコードが動かなくなる「ChatCompletion廃止エラー」、GPT-4モデルにアクセスできない問題、そして画像ファイルを送信する方法です。これらを一つずつ対処することで、APIを使った自動処理(メール文案の生成・資料の要約・画像の説明など)が正常に動くようになります。
準備するもの
- パソコンのターミナル(コマンド入力画面)
- OpenAIアカウント(有料プランに登録済み)
- APIキー(OpenAIの公式サイトから取得)
- Python 3.7以上がインストールされた環境
- テキストエディタ(メモ帳など)
手順
1. エラーの原因を確認する(所要時間:5分)
OpenAI APIは1.0.0以降のバージョンで大きく変わりました。古いコード例のように openai.ChatCompletion.create() という書き方は使えなくなっています。エラーメッセージが「you tried to access openai.ChatCompletion, but this is no longer supported in openai>=1.0.0」と表示される場合、これが原因です。
最初にターミナルで、現在インストールされているOpenAIライブラリのバージョンを確認しましょう。
pip show openai
Version が1.0.0以上なら、コードの書き方を新しい形に変更する必要があります。
2. OpenAIライブラリを最新版に更新する(所要時間:3分)
古いバージョンを使っている場合は、最新版に更新します。
pip install --upgrade openai
更新後、改めてバージョン確認をします。
3. コードの書き方を新しい形に変更する(所要時間:10分)
新しいバージョン(1.0.0以降)では、クライアント(OpenAIに話しかける部品)を作ってから使う形に変わりました。以下が新しい書き方です。
from openai import OpenAI
client = OpenAI(api_key="sk-xxxx") # APIキーを入力
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "こんにちは"}
]
)
print(response.choices[0].message.content)
古い書き方(使えない):
import openai
openai.api_key = "sk-xxxx"
response = openai.ChatCompletion.create(...) # これはエラーになる
ポイントは、client = OpenAI() で箱を作ってから、client.chat.completions.create() のように使うことです。
4. GPT-4にアクセスできない場合の原因を確認する(所要時間:5分)
GPT-4モデルを使おうとすると「You exceeded your current quota」や「The model ‘gpt-4’ does not exist」というエラーが出ることがあります。これは以下の3つのどれかが原因です。
- アカウントがGPT-4へのアクセス権を持っていない → OpenAIの公式サイトで有料プランが必要です。無料試用版ではGPT-4が使えません。
- APIキーが無効になっている → キーの有効期限を確認し、必要に応じて新しいキーを作成します。
- モデル名が間違っている → 正しい名前は「gpt-4」や「gpt-4-turbo」などです。
アカウント設定でGPT-4が使える状態なら、コード例を以下のように書きます。
from openai import OpenAI
client = OpenAI(api_key="sk-xxxx")
response = client.chat.completions.create(
model="gpt-4", # GPT-4を指定
messages=[
{"role": "user", "content": "日本語で5行の物語を書いてください"}
]
)
print(response.choices[0].message.content)
5. 画像をアップロードして分析させる(所要時間:15分)
ChatGPTでは画像ファイルをアップロードして内容を説明させることが出来ます。APIでも同じようなことができます。
まず、ファイルを準備します。JPGやPNG形式の画像をパソコンに保存しておきましょう。
次に、以下のようにコードを書きます。ファイルをBase64という形式に変換して、APIに送信するやり方です。
from openai import OpenAI
import base64
client = OpenAI(api_key="sk-xxxx")
# 画像ファイルをBase64に変換
with open("image.jpg", "rb") as f:
image_data = base64.b64encode(f.read()).decode("utf-8")
response = client.chat.completions.create(
model="gpt-4-vision",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{image_data}"
}
},
{
"type": "text",
"text": "この画像に何が写っていますか?日本語で説明してください"
}
]
}
]
)
print(response.choices[0].message.content)
「image.jpg」の部分をあなたの画像ファイルの名前に変えて、実行します。
別のやり方として、すでにネット上にある画像のURLを直接渡すこともできます。
response = client.chat.completions.create(
model="gpt-4-vision",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.jpg"
}
},
{
"type": "text",
"text": "この画像について説明してください"
}
]
}
]
)
print(response.choices[0].message.content)
6. 実際に試してみる(所要時間:5分)
テキストエディタに上の例を貼り付けて、APIキーをあなたのものに変更して保存します。ファイル名を「test.py」として保存しましょう。
ターミナルで以下を実行します。
python test.py
APIへの要求が成功すれば、生成されたテキストが画面に表示されます。
7. つまずきやすいところで確認する(所要時間:5分)
もしエラーが出た場合は、以下をチェックします。
APIキーのエラー → 「Authentication failed」と表示される場合は、キーをコピペする際に空白が混じっていないか確認します。OpenAIのサイトから改めてコピーして貼り付けます。
モデル名のエラー → 「The model does not exist」が出たら、モデル名の綴りを確認します。大文字と小文字が混じっていないか見直します。
インポートエラー → 「No module named ‘openai’」と出たら、openaiライブラリがインストールされていません。pip install openai で再度インストールします。
ファイルが見つからない → 画像ファイルを使う場合、ファイル名のスペルが完全に一致しているか、ファイルがPythonスクリプトと同じフォルダに入っているか確認します。
つまずきやすいところ
古い書き方のコードをネットで見つけてコピーしてしまう → 2023年以前の記事には古い「openai.ChatCompletion」の書き方が載っていることが多いです。記事の日付を確認してから試します。
APIキーを誤って公開してしまう → GitHubなどにコードをアップロードする時は、APIキーを環境変数に移してからアップロードします。誤って公開したら、OpenAIのサイトからキーを削除して新しいものを作り直します。
GPT-4が使えるはずなのに「does not exist」と言われる → 無料試用版では使えません。有料プランへのアップグレードが必要です。またはGPT-3.5-turboなどの別のモデルで試してみます。
画像の形式に対応していない → JPG、PNG、GIF、WebPが対応形式です。BMP形式などは変換が必要な場合があります。
慣れてきたら試したいこと
エラーハンドリングを追加する → APIが失敗した時に自動で再試行したり、分かりやすいエラーメッセージを出すように工夫します。本番環境で使う時は重要です。
複数の画像を一度に分析させる → messages内に複数の画像を入れて、「これらの画像の共通点は?」といった質問をさせることができます。
の記憶を保つ会話を作る → 前回のやり取りをmessagesに入れておくことで、会話の流れを保つことができます。例えば「さっき説明した画像について、さらに詳しく説明してください」といった質問ができます。
費用を監視する仕組みを入れる → APIの使用量はお金がかかります。定期的にopenai.usageを確認したり、ログを記録する工夫をします。