OpenAI PythonライブラリをAzure API Managementと共に使うメモ
はじめに
OpenAI PythonライブラリはPythonからOpenAI APIやAzure OpenAI Serviceのモデルを利用できるライブラリです。
クライアントから直接Azure OpenAIを利用する場合は簡単だったのですが、間にAzure API Management (APIM)を挟んだ場合に一部設定を行う必要があったため、メモします。
前提
openai-python-enterprise-loggingのサンプルなどを参考にし、APIMのリソースやAzure OpenAIとの接続設定は済んでいる前提にします。
設定箇所
3つあります。
HTTPリクエストヘッダーの変更 [APIM]
HTTPリクエストのヘッダーが、OpenAI社APIやAzure OpenAIのデフォルトがapi-key
なのに対し、APIMはOcp-Apim-Subscription-Key
になってしまうため、設定変更が必要です。
手順
-
APIMのPortal画面で、下図の手順で「Add policy」を選択します。
-
ポリシーの一覧から、「Set headers」を選択します。
-
名前 (NAME)を
api-key
に変更し、Azure OpenAIのAPIキーをVALUEに記載します。
API URL suffixの変更 [APIM]
「Settings」タブのAPI URL suffix項目にopenai
と記載します。
他の文字列を入れる場合も、必ずBase URLの末尾は/openai
で終わるようにします (例:https://apim-openai-shohei.azure-api.net/gund-arm/hogehoge/openai
)
api_key
とapi_base
の変更 [OpenAI ライブラリ]
OpenAI ライブラリのapi_key
とapi_base
をAPIMのサブスクリプションキーと、上記で設定したBase URLに変更します。
import openai
openai.api_type = "azure"
openai.api_key = "<YOUR API MANAGEMENT KEY>"
openai.api_base = "https://apim-openai-shohei.azure-api.net/"
openai.api_version = "2023-05-15"
OpenAI Pythonライブラリが、内部的にapi_base
の末尾に/openai/deployments/gpt-35-turbo/chat/completions?api-version=2023-05-15
のような文字列をつけてURLを完成させ、Azure OpenAIモデルを呼び出す形になります。そのためAPIM側でAPI URL suffixの末尾にopenai
とつける必要があります。
おわりに
どこかに情報が載っているのかもしれませんが、API URL suffixの末尾にopenai
とつける情報が見つからず、APIM経由での呼び出しに手間取りました。皆様が同じ苦労を歩まないようにここに残します。
Discussion