😺

【要注意】Azure OpenAIのopenaiパッケージのバージョンが上がったことによりPythonの書き方が大きく変わりました

2023/11/19に公開

こちらの記事でもOpenAIのパッケージが変わったことに驚いたことを書いているのですが、
友人もコード書き直しだ〜と嘆いていたので、皆んな困ってると思い記事を書いています。
https://zenn.dev/pipon_tech_blog/articles/f84f4e11c085a9

OpenAI Pythonの1系が出まして、普通にinstallすると以前の書き方と変わります。
公式はこちらがわかりやすいです。
https://learn.microsoft.com/ja-jp/azure/ai-services/openai/quickstart?tabs=command-line%2Cpython-new&pivots=programming-language-python

コードを書き直す必要がでる割と破壊的変更なので、パッケージをアップデートして、動かなくなったという方がいたら以下のバージョンに戻すことで以前と同じように動くと思います。

pip install openai==0.28.1

変更前、変更後で以下のように書き方が変わっています。

  • 変更前
import os
import openai

openai.api_key = os.getenv("AZURE_OPENAI_KEY")
openai.api_base = os.getenv("AZURE_OPENAI_ENDPOINT") # your endpoint should look like the following https://YOUR_RESOURCE_NAME.openai.azure.com/
openai.api_type = 'azure'
openai.api_version = '2023-05-15' # this might change in the future

#モデルをデプロイしたときのカスタム名
deployment_name='REPLACE_WITH_YOUR_DEPLOYMENT_NAME'

# 回答を生成するために、Completion API呼び出しを実行
print('Sending a test completion job')
start_phrase = 'Write a tagline for an ice cream shop. '
response = openai.Completion.create(engine=deployment_name, prompt=start_phrase, max_tokens=10)
text = response['choices'][0]['text'].replace('\n', '').replace(' .', '.').strip()
print(start_phrase+text)
  • 変更後
import os
from openai import AzureOpenAI
    
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_KEY"),  
    api_version="2023-10-01-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
    )

#モデルをデプロイしたときのカスタム名
deployment_name='REPLACE_WITH_YOUR_DEPLOYMENT_NAME' 

# 回答を生成するために、Completion API呼び出しを実行
print('Sending a test completion job')
start_phrase = 'Write a tagline for an ice cream shop. '
response = client.completions.create(model=deployment_name, prompt=start_phrase, max_tokens=10)
print(response.choices[0].text)

変更前と変更後で以下の点が主に変わりました。

  1. ライブラリの使用方法の変更

    • 変更前:openaiモジュールを直接インポートし、その関数と属性を使用しています。
    • 変更後:openaiパッケージからAzureOpenAIクラスをインポートします。
  2. APIクライアントの設定

    • 変更前:グローバルな設定(api_key, api_baseなど)を使用していました。
    • 変更後:AzureOpenAIクライアントインスタンスを作成し、そのインスタンスにAPIキー、APIバージョン、エンドポイントを設定します。
  3. API呼び出しの方法

    • 変更前:openai.Completion.createを使用してAPI呼び出しを行っていました。
    • 変更後:AzureOpenAIクライアントのcompletions.createメソッドを使用しています。
  4. レスポンスの処理

    • 変更前:レスポンスからテキストを取得し、改行や余計なスペースを削除していました。
    • 変更後:レスポンスの処理が簡素化され、直接テキストを出力しています。

これらの変更によって、元のコードのままではプログラムが止まってしまいますが、コードのモジュール性、柔軟性、簡潔さを向上はしたと思います。

特にAzureサービスとの統合を強化し、APIクライアントの設定と管理をより効率的に行うことができるようになっています。

大変ですが、この分野は本当にどんどん変更されると思いますので、キャッチアップして参りましょう。

もちろん、株式会社piponでも技術でお困りのことがある方はオンライン相談が可能です。
こちらから会社概要資料をDLできます!
お問い合わせ内容に「オンライン相談希望」とご記載ください。
https://share.hsforms.com/19XNce4U5TZuPebGH_BB9Igegfgt

株式会社piponでは定期的に技術勉強会を開催しています。
ChatGPT・AI・データサイエンスについてご興味がある方は是非、ご参加ください。
https://chatgptllm.connpass.com/

株式会社piponではChatGPT・AI・データサイエンスについて業界ごとの事例を紹介しています。ご興味ある方はこちらのオウンドメディアをご覧ください。
https://bigdata-tools.com/

株式会社piponのテックブログ

Discussion