.NET の Azure.AI.OpenAI SDK のエンドポイント

Microsoftが提供している .NET用Azure OpenAIのSDK(Azure OpenAI client library for .NET)ですが、公式以外のエンドポイントにつなごうとするとハマることがあるので注意しましょうという話です。

普通にAzure OpenAIのリソースのエンドポイントにつなぐ分には何の問題もないのですが、Azure API Managementで束ねてたりする時はエンドポイントがAPIMになりますよね。その際SDK固有の動作のせいで404エラーになってしまいます。

new AzureOpenAIClient(new Uri("https://___.azure-api.net/test"), new ApiKeyCredential(key)) 

みたいなときですね。(APIMでWebService URLに __.openai.azure.com/openai 、API URL Suffix に任意の名前(この場合 test )みたいにしてるケースの場合)

※ APIMに対して /openai で登録してる場合は何も気にせずAzureOpenAIClientに渡すエンドポイントを https://___.azure-api.net/ みたいにすればOKです。

なぜ404になるかというと、Clientで指定したエンドポイントにSDK内で実際にアクセスする際に /openai から始まるURLでOpenAI へのリクエストURLを生成するからです。

https://___.azure-api.net/test/openai/deployments/gpt-4.1-nano/chat/completions みたいに赤字部分をSDKが固定で生成する。

回避策

APIMのAPI URL Suffixの末尾に /openai もつけましょう。
image

これでSDKが生成するURLと実際にリクエストしてバックエンドに転送されるURLが正しいものになるのでOK、という感じです。

個人的には微妙なSDKの挙動だなぁと思いました。(本家OpenAIと互換性を持たせてるからなのかよくわからない)
いくつかIssueあるぽいけど芳しくないというか微妙、、、カスタムエンドポイントとして動かすためのフラグを追加するPRとかあったけど特に理由の明記もなくCloseされてました。

コメントを残す