使用LiteLLM连接Azure OpenAI时遭遇401认证错误求助
解决LiteLLM使用Azure AD令牌连接Azure OpenAI时的401认证错误
针对你遇到的LiteLLM(v1.63.7)+DSPy(v2.6.4)环境下,用DefaultAzureCredential获取令牌连接Azure OpenAI出现401,但直接用openai.AzureOpenAI正常的问题,可尝试以下排查和修复步骤:
1. 修正api_base参数格式并匹配Azure Endpoint
LiteLLM的api_base需要严格对应Azure OpenAI的完整终结点URL(包含https://,不带后续路径),确保和openai代码里的azure_endpoint完全一致。示例:
# 替换为你的实际终结点 api_base = "https://your-resource-name.openai.azure.com"
避免在api_base中添加额外路径(如/openai),LiteLLM会自动处理路径拼接。
2. 显式设置api_key=None避免冲突
LiteLLM可能会优先读取环境变量中的AZURE_OPENAI_API_KEY,导致和Azure AD令牌认证冲突。在completion调用中显式指定api_key=None,强制使用令牌认证:
response = completion( model = "azure/<your deployment name>", api_base = "<api-url>", api_version = "<api-version>", azure_ad_token_provider=token_provider, api_key=None, # 添加此行 messages = [{"role": "user", "content": "good morning"}], )
3. 升级LiteLLM到最新版本
v1.63.7版本可能存在Azure AD令牌处理的已知问题,升级到最新稳定版可修复部分认证逻辑bug:
pip install --upgrade litellm
4. 验证令牌有效性
手动调用token_provider()获取令牌,用curl测试Azure OpenAI API,确认令牌本身有效:
# 先在Python中打印令牌 print(token_provider()) # 替换占位符后执行curl测试 curl -X POST "https://your-resource-name.openai.azure.com/openai/deployments/<your-deployment-name>/chat/completions?api-version=<api-version>" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <your-token>" \ -d '{"messages": [{"role": "user", "content": "good morning"}]}'
如果curl请求成功,说明令牌没问题,问题集中在LiteLLM的参数配置或版本上。
5. 尝试更换作用域(备选)
虽然你使用的https://cognitiveservices.azure.com/.default是通用认知服务作用域,但部分场景下可尝试使用OpenAI专属作用域:
token_provider = get_bearer_token_provider(DefaultAzureCredential(), "https://azure.openai.com/.default")
内容的提问来源于stack exchange,提问作者4run4
相关产品推荐
相关产品推荐

