4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pythonのopenaiライブラリを更新したらAzure OpenAI ServiceのAPIが叩けなくなった!(AttributeError: module 'openai' has no attribute 'ChatCompletion')

Posted at

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

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?