OpenAI DevDay!!!興奮しましたね!
gpt-4-vision-preview
が早速利用できるということで、その日の朝からJupyterNotebookで開発している環境のopenaiライブラリをpip install -U openai
で更新し、「たぁのしー」「おー」とか言いながらと優雅に公式ドキュメントのクイックスタートとか見ながら遊んでました!
が! 過去作成していたAzure OpenAI ServiceのAPIが叩けなくなり慌てて修正する羽目になりました・・・
ノリでアップデートしちゃったのでダウングレードしてもよかったのですが、せっかくなので慌てて修正してみよう!ということで修正した内容をまとめます。
今後変わる可能性もありますが、誰かの解決の糧になればうれしいと思います。
(投稿苦手なので大目に見てください・・・)
問題
-
openai.ChatCompletion.create
がエラーになる - 返ってきたレスポンスが今まで通りでは値がとれない
一応、応急処置(ソースコード修正なんてできねぇよ!って場合)
- openaiのライブラリバージョン固定で再インストール
pip install openai==0.28.1
修正
修正前
今までの記載方法
インポート
共通
import openai
変数設定
Azure OpenAI API
# ライブラリで設定するパターン
openai.api_type = "azure"
openai.api_base = "{エンドポイント}"
openai.api_version = '2023-05-15'
openai.api_key = "{API KEY}"
# 環境変数で設定するパターン
import os
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_BASE"] = "{エンドポイント}"
os.environ["OPENAI_API_VERSION"] = '2023-05-15'
os.environ["OPENAI_API_KEY"] = "{API KEY}"
OpenAI
# ライブラリで設定するパターン
openai.api_key = "{API KEY}"
# 環境変数で設定するパターン
import os
os.environ["OPENAI_API_KEY"] = "{API KEY}"
API実行
Azure OpenAI
response = openai.ChatCompletion.create(
deployment_id="{デプロイ名}",
messages={'role': 'user', 'content': '{プロンプト}'},
temperature=0
)
OpenAI
response = openai.ChatCompletion.create(
model="{モデル名}",
messages=[
{ "role": "user", "content": "{プロンプト}" },
],
temperature=0
)
レスポンスのメッセージ取得
共通
message = response.choices[0]["message"]["content"].strip()
修正後
Azure OpenAI
from openai import AzureOpenAI
os.environ["AZURE_OPENAI_API_KEY"] = "{API KEY}"
os.environ["OPENAI_API_VERSION"] = '2023-05-15'
os.environ["AZURE_OPENAI_ENDPOINT"] = "{エンドポイント}"
client = AzureOpenAI()
response = client.chat.completions.create(
model="{デプロイ名 e.g.: gpt-35-turbo}",
messages=[
{ "role": "user", "content": "{プロンプト}" }
],
temperature=0
)
message = response.choices[0].message.content
OpenAI
from openai import OpenAI
os.environ["OPENAI_API_KEY"] = "{API KEY}"
client = OpenAI()
response = client.chat.completions.create(
model="{モデル名 e.g.: gpt-3.5-turbo}",
messages=[
{ "role": "user", "content": "{プロンプト}" }
],
temperature=0,
)
message = response.choices[0].message.content
おわりに
今までOPENAI_API_KEY
でいけてたのに!急に分けるなんて!結構影響ありそうじゃない!LangChainもエラー出てるじゃない!(現在は対応済みでした!さすが!早い!)と嘆きながらもOpenAIの進化にワクワクさせながら修正対応させていただきました。
軽い気持ちでアプデして遊んだ後に、アプデ前の別のコードが動かなくなるのは焦りましたねw
アプデは計画的に・・・
参考
OpenAI公式 API reference Create chat completion
GitHub - AzureOpenAIの変数についてのコメント部分
LangChain - Azure OpenAI