こんにちは。ナミレリです。
2023年11月にPython用のOpenAI APIライブラリのバージョンが1.x(1.x系)にアップデートされました。以前、バージョン0.27の使い方の記事を書きましたが、良い機会なので0.x(0.x系)から1.x(1.x系)への変更点などをまとめていきます。
ちなみに大きな変更から小さな変更まで、ここ(Open AIのChangelog)で変更履歴を見ることができます。
この記事はこんな人にオススメ
- 古いバージョン(0.x系)のOpen AIライブラリで書いたPythonプログラムを書き直したい方
- Python用のOpenAI APIライブラリの0.x系と1.x系の違いを把握したい方
- M2 MacBook Air 13.6 インチ
- M1 Max MacBook Pro 14インチ
- macOS Sonoma 14.3.1
- Python ライブラリ:openai version 1.12.0
目次
OpenAIのPython libraryの0.x系と1.x系のインストール
今回はvenvで0.x系と1.x系の2つの仮想環境を作って両バージョンを使えるようにしてみます。
0.x系の仮想環境とopenaiライブラリのインストール
cd ~
mkdir v0.x
cd v0.x
python -m venv .venv_v0.x
source .venv_v0.x/bin/activate
0.x系ライブラリのインストールはpipで下のようにインストールします。バージョンは0.28.1です。その前にpipコマンド自体をアップデートしておきます。
pip install -U pip
pip install openai==0.28.1
pip listで0.x系のライブラリを確認しておきます。
0.x系のOpenAIライブラリをインストールした状態のpip list
pip list
Package Version
------------------ --------
aiohttp 3.9.3
aiosignal 1.3.1
async-timeout 4.0.3
attrs 23.2.0
certifi 2024.2.2
charset-normalizer 3.3.2
frozenlist 1.4.1
idna 3.6
multidict 6.0.5
openai 0.28.1
pip 24.0
requests 2.31.0
setuptools 65.5.0
tqdm 4.66.2
urllib3 2.2.1
yarl 1.9.4
0.x系の仮想環境から抜けます。
deactivate
1.x系の仮想環境とopenaiライブラリのインストール
cd ~
mkdir v1.x
cd v1.x
python -m venv .venv_v1.x
source .venv_v1.x/bin/activate
1.x系ライブラリのインストールはpipで下のようにインストールします。2024年2月現在のバージョンは1.12.0です。この仮想環境でもpipコマンド自体をアップデートしておきます。
pip install -U pip
pip install openai
pip listで1.x系のライブラリを確認しておきます。
1.x系のOpenAIライブラリをインストールした状態のpip list
pip list
Package Version
----------------- --------
annotated-types 0.6.0
anyio 4.2.0
certifi 2024.2.2
distro 1.9.0
exceptiongroup 1.2.0
h11 0.14.0
httpcore 1.0.3
httpx 0.26.0
idna 3.6
openai 1.12.0
pip 24.0
pydantic 2.6.1
pydantic_core 2.16.2
setuptools 65.5.0
sniffio 1.3.0
tqdm 4.66.2
typing_extensions 4.9.0
1.x系の仮想環境から抜けます。
deactivate
これでOpenAI Pythonライブラリの0.x系と1.x系の両仮想環境を構築できました。それぞれの仮想環境で実際に試しながら紹介していきます。
Gritによるマイグレーションについて
1.x系のOpenAIライブラリをインストールした環境で、openai migrateコマンドにより0.x系のコードをASTベースの変換でマイグレーションしてくれます。最終的には必ず確認する必要がありますが、以下に試してみます。
1.x系のOpenAIライブラリをインストールした環境で、以下のコードを新バージョンにopenai migrateしてみます。
1.x系の仮想環境に入ります
cd ~/v1.x
python -m venv .venv_v1.x
source .venv_v1.x/bin/activate
0.x系のテストコード:test_0.x.py
import os
import openai
openai.api_key = os.environ["OPENAI_API_KEY"]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "Pythonの歴史を教えて。"},
],
)
print(response.choices[0]["message"]["content"])
1.x系の仮想環境でopenai migrateの実行
openai migrate test_0.x.py
import os
-import openai
+from openai import OpenAI
+
+client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
-openai.api_key = os.environ["OPENAI_API_KEY"]
-response = openai.ChatCompletion.create(
- model="gpt-3.5-turbo",
- messages=[
- {"role": "user", "content": "Pythonの歴史を教えて。"},
- ],
-)
-print(response.choices[0]["message"]["content"])
+response = client.chat.completions.create(model="gpt-3.5-turbo",
+messages=[
+ {"role": "user", "content": "Pythonの歴史を教えて。"},
+])
+print(response.choices[0].message.content)
openai migrateコマンドで上のように変更点が出力されマイグレーションすることができます。(上書きされます)ただしその変更内容は必ず確認する必要があります。
マイグレーション後のコード:test_0.x.py
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "Pythonの歴史を教えて。"},
],
)
print(response.choices[0].message.content)
それでは、より具体的に違いを見ていきましょう。
初期化の記述方法の違い
まずは、初期化の違いです。主な違いは、APIキーの設定方法と管理の範囲です。0.x系はグローバルに設定され、1.x系はインスタンスレベルでの設定となります。
0.28.1の初期化は、os.getenvを使用して環境変数からOpenAIのAPIキーを取得し、それをopenai.api_keyに設定しています。これはグローバルな設定を通じてAPIキーがOpenAIライブラリに適用されます。
0.28.1の初期化
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
1.12.0の初期化は、from openai import OpenAIを使用してOpenAIクラスをインポートし、インスタンスを作成する際に環境変数から直接APIキーを渡しています。APIの各呼び出しでそのインスタンスを使用し、設定をより局所的に管理することができます。
1.12.0の初期化
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
レスポンスの生成
0.28.1のレスポンス生成は、openaiライブラリのグローバルなChatCompletionクラスを使用しレスポンスのオブジェクトを作成します。ライブラリのグローバル設定やメソッドを直接利用しています。
0.28.1のレスポンス生成
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "Pythonの歴史を教えて。"},
],
)
1.12.0のレスポンス生成は、事前に設定されたclientインスタンスを使用してレスポンスのオブジェクトを作成します。
1.12.0のレスポンス生成
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "Pythonの歴史を教えて。"},
])
roleについて
roleは以下の3つがあります。
role | 説明 | 例(content) |
---|---|---|
system | AIアシスタントの設定 | あなたは優秀なコンサルタントです |
user | ユーザーの発信 | 今日の天気は? |
assistant | AIアシスタントの回答 | 今日は晴れです |
先程の例の通り、messagesリストに辞書形式でroleとそのroleのcontentを記述します。systemメッセージはオプションでなくてもOKですが、適切に設定すると回答が良くなります。
テキストの生成
テキストを生成するには、client.chat.completions.create()関数を使います。先程の例ではパラメーターにmodelとmessagesを設定しています。modelにはモデルIDを文字列で指定します。
2024年5月現在、主なモデルIDは以下の通りです。
下記以外にもpreviewやスナップショットモデルなどがあります。
詳細:https://platform.openai.com/docs/models
モデルID | コンテキストウィンドウ | 学習データ |
---|---|---|
gpt-4o | 128,000トークン | 2023年10月まで |
gpt-4-turbo | 128,000トークン | 2023年12月まで |
gpt-4 | 8,192トークン | 2021年9月まで |
gpt-4-32k | 32,768トークン | 2021年9月まで |
gpt-3.5-turbo | 16,385トークン | 2021年9月まで |
レスポンスへのアクセス
0.28.1のresponseオブジェクトへのアクセスは辞書形式でキーを文字列で指定し値にアクセスします。
0.28.1のレスポンスへのアクセス
print(response.choices[0]["message"]["content"])
1.12.0のresponseオブジェクトへのアクセスは、responseオブジェクト内のデータに属性アクセスを使用します。responseオブジェクトの属性は、choices、message、contentです。
1.12.0のレスポンスへのアクセス
print(response.choices[0].message.content)
テキストのリクエスト
これまで紹介してきた、1.x系でのテキストリクエスト方法をまとめます。ファイル名はtext_request.pyとしています。
from openai import OpenAI
import os
# モデル指定
MODEL="gpt-4o"
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
completion = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "You are a helpful assistant. Help me with my math homework!"},
{"role": "user", "content": "Hello! Could you solve 2+2?"}
]
)
print("Assistant: " + completion.choices[0].message.content)
出力結果
python ./text_request.py
Assistant: Of course! The sum of 2 + 2 is 4.
openai.embeddings_utilsがなくなった
0.28.1にあったopenai.embeddings_utilsが1.x系ではなくなっています。従って、get_embedding, cosine_similarity, distances_from_embeddings, なのなど関数が使えなくなっています。
openai.embeddings_utilsを使う方は、0.28.1を使った方が良いかもしれません。OpenAIのCookbookやドキュメントはこの件でまだ更新されていないようです。(2024年2月21日現在)
最後に
最後まで読んでいただきありがとうございます。今回の【Python】OpenAI APIの変更点(バージョン1.x)はいかがでしたでしょうか。
より良い生成AIの活用に少しでもお役に立てることができれば幸いです。
MacやLinux、Pythonなど技術系のkindle本も豊富にあります。詳しくはこちらから。
Amazon unlimited:3ヶ月無料体験(10/20 23:59まで)→ 詳しくはこちら
Amazonの電子書籍読み放題サービス「Kindle Unlimited」でプライム会員を対象に、最初の3か月間を無料体験できるキャンペーンを実施中。マンガ、小説、ビジネス書、雑誌など500万冊から、好きな本を何冊でも読めるキャンペーンです。
初めてkindle unlimited 読み放題をご利用の方は30日間の無料で体験できます。
期間終了後は月額980円で、いつでもキャンセルできます。
200万冊以上が読み放題。お好きな端末で利用可能です。
ChatGPT関連の別の記事
公式ChatGPTのMac用デスクトップアプリを使う
OpenAIライブラリ1系の変更点
neovimでChatGPT
PythonでChatGPTのAPI
MacでChatGPT
MacでChatGPT
VSCodeでChatGPT
LinuxのターミナルからChatGPT
PythonでGPT-3