Pythonのopenaiパッケージの話です。
バージョンは「openai==1.47.0」で指定していた時の話です。
発生したエラー
You tried to access openai.Embedding, but this is no longer supported in openai>=1.0.0 - see the README at https://github.com/openai/openai-python for the API.
You can run `openai migrate` to automatically upgrade your codebase to use the 1.0.0 interface.
Alternatively, you can pin your installation to the old version, e.g. `pip install openai==0.28`
A detailed migration guide is available here: https://github.com/openai/openai-python/discussions/742
つまりは「あなたはopenai.Embeddingを呼び出そうとしましたが、openaiの1.0.0以降ではそれはもうサポートしていません。バージョン1.0.0移行のインターフェース(=規格)に合わせるか、もしくは旧版を指定してopenaiパッケージを利用してください」というエラーです。
解決策は二つあります。
-
openai migrate
を行う -
pip install openai==0.28
を実行する
①番の方法は現状のopenAIのバージョンを維持できたり、今後OpenAIのバージョンを新しいもので更新していけるメリットがあります。
一方で、①番では新たにOpenAIの仕様(openaiパッケージの使い方)に現状のコードを合わせていく必要があるのでそのデグレが怖かったり、めんどくさいといった事情がある場合は②番の方法を用いることになるかと思います。
今回は①番を行なったのでその備忘録を記します。
やり方はシンプルです。
エラーに記載のある通り、openai migrate
を実行しました。
すると現状のコードで「どこがopenaiパッケージの規格と一致していないか」が一覧で以下のように出力されました。
(一部抜粋)
- response = openai.ChatCompletion.create(
- model="gpt-3.5-turbo-0613",
- messages=[
- {"role": "system", "content": system_prompt},
- {"role": "user", "content": question},
- ],
- functions=functions,
- function_call="auto",
- )
+ response = client.chat.completions.create(model="gpt-3.5-turbo-0613",
+ messages=[
+ {"role": "system", "content": system_prompt},
+ {"role": "user", "content": question},
+ ],
+ functions=functions,
+ function_call="auto")
上記の例で行くと旧版ではopenai.ChatCompletion.create
としていればよかったところを移行するとclient.chat.completions.create
としてください、と教えてくれているので該当する箇所をそのように修正します。
早い話が「-
」が出ているところを消して、「+
」が出ているもので書き換えたということです。
自分はこれで新しい規格に対応させたコードを動かせました。
久々にいじったコードで「流石にopenaiパッケージの仕様も変わっていそうだなぁ、めんどくさいな」と感じていましたが、どこを変更するべきか、どのように変更するべきかを教えてくれたので思ったよりもスムーズに移行できました。
openai migrate
、便利です。