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