记录一下那天晚上的排查过程。.NET 8 项目把 Azure.AI.OpenAI 从 1.0 升到 2.1,创建客户端时抛 ArgumentException,提示 api-version 2024-06-01 不受支持,配置里这个值是运维半年前定的。
刚开始盯着「Azure 资源的模型部署版本较旧」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。2.x 使用新的 API 版本枚举。少数情况下是代码里手写了字符串版本号。
少数情况下是网关层还按旧版本改写请求。
上来先确认 SDK 实际版本
dotnet list package --include-transitive | grep -i openai
接着改用服务端默认版本 不再手写
grep -n AzureOpenAIClientOptions Program.cs
随后用 curl 探一次实际支持的版本
curl -s -o /dev/null -w '%{http_code}' "https://$AZURE_ENDPOINT/openai/deployments/gpt-4o/chat/completions?api-version=2024-10-21" -H "api-key: $AZURE_KEY" -H "Content-Type: application/json" -d '{"messages":[{"role":"user","content":"ping"}]}'
末了重新发布并观察首条请求
dotnet run --project src/Api
这台环境是别人交接的,不少默认值被动过,只能一项项核。
改完先别撤,确认这几项。客户端创建成功,聊天请求返回 200,日志里请求 URL 的版本与服务端一致。
容易忽略的是,Azure 的版本号和模型部署是两件事,升级 SDK 只改协议版本,不会自动升级背后的模型。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
