Azure OpenAI客户端经APIM访问报404错误排查请求
迁移至APIM后Azure OpenAI SDK调用报404的问题解决
问题根源
路径自动拼接错误
Azure OpenAI SDK默认会给azure_endpoint拼接/openai前缀,再加上部署和接口路径。但你的APIM端点直接映射到OpenAI的/deployments层级,导致SDK生成的请求路径变成https://xy-apim-XXX.azure-api.net/openai/deployments/...,而APIM上不存在这个路径,触发404。认证头不匹配
APIM要求使用Ocp-Apim-Subscription-Key请求头进行身份验证,而SDK默认将api_key放在Authorization: Bearer {key}头中,不符合APIM的认证规则(即使路径正确,也会触发认证错误)。
修正后的代码示例
方法一:配置正确端点并覆盖默认请求头
from openai import AzureOpenAI apim_url = "https://xy-apim-XXX.azure-api.net/" deployment_name = "DEPLOYMENT_NAME" api_version = "Version" subscription_key = "YOUR_APIM_SUBSCRIPTION_KEY" client = AzureOpenAI( api_key=subscription_key, api_version=api_version, azure_endpoint=apim_url, # 显式添加APIM要求的订阅密钥头 default_headers={"Ocp-Apim-Subscription-Key": subscription_key} ) def get_response_enrich(): completion = client.chat.completions.create( # model参数需与APIM映射的部署名一致 model=deployment_name, messages=[ {"role": "system", "content": "name a country in europe"}, {"role": "user", "content": "you're a helpful assistant"} ], temperature=0, ) return completion.choices[0].message.content
方法二:使用api_base替代azure_endpoint(避免自动拼接前缀)
from openai import AzureOpenAI apim_url = "https://xy-apim-XXX.azure-api.net/" deployment_name = "DEPLOYMENT_NAME" api_version = "Version" subscription_key = "YOUR_APIM_SUBSCRIPTION_KEY" # 使用api_base直接指定APIM根路径,SDK不会额外添加/openai前缀 client = AzureOpenAI( api_key=subscription_key, api_version=api_version, api_base=apim_url, default_headers={"Ocp-Apim-Subscription-Key": subscription_key} ) def get_response_enrich(): completion = client.chat.completions.create( model=deployment_name, messages=[ {"role": "system", "content": "name a country in europe"}, {"role": "user", "content": "you're a helpful assistant"} ], temperature=0, ) return completion.choices[0].message.content
关键注意事项
- 确保
model参数的值与APIM中映射的Azure OpenAI部署名完全一致,不要使用自定义名称。 - 若APIM对路径有特殊映射规则,需调整
api_base或azure_endpoint以匹配实际路径结构。
内容的提问来源于stack exchange,提问作者Raha
相关产品推荐
相关产品推荐

