You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure OpenAI客户端经APIM访问报404错误排查请求

迁移至APIM后Azure OpenAI SDK调用报404的问题解决

问题根源

  1. 路径自动拼接错误
    Azure OpenAI SDK默认会给azure_endpoint拼接/openai前缀,再加上部署和接口路径。但你的APIM端点直接映射到OpenAI的/deployments层级,导致SDK生成的请求路径变成https://xy-apim-XXX.azure-api.net/openai/deployments/...,而APIM上不存在这个路径,触发404。

  2. 认证头不匹配
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:57:26