这类问题我又碰上了一次。Azure OpenAI 上部署的是 gpt-4o 2024-05-13 版本,请求里带 response_format 的 json_schema 且 strict 为 true,返回 400 提示不支持该参数,同一个请求打到 OpenAI 官方账号能通。

第一反应是「api-version 太旧,请求体里的新字段被网关裁掉」,验证下来不成立。

排查方向其实有限,先把可能性排一排。该部署的模型快照早于结构化输出上线时间;部署名对应的是旧快照,控制台显示的名字看不出来;json_schema 里带了 Azure 尚未支持的关键字。

动手时先查部署实际使用的模型版本

az cognitiveservices account deployment list -n $AOAI -g $RG -o table

再往下换成支持 strict 的部署名再请求

curl "$AOAI/openai/deployments/gpt-4o-2024-11/chat/completions?api-version=2024-10-21" -H "api-key: $K" -d @req.json

接着把 api-version 升到支持结构化输出的版本

curl "$AOAI/openai/deployments/gpt-4o/chat/completions?api-version=2024-08-01-preview" -H "api-key: $K" -d @req.json

退一步用 json_object 兜底并做本地校验

python validate_out.py --mode json_object --schema s.json

这类问题以前遇到过,但这次的触发条件和上次不一样。

恢复的判定其实很直接。返回 200,choices 里的 JSON 能被 pydantic 直接解析,不再出现不支持 response_format 的提示。

Azure 的模型版本和部署名是两回事,报错说参数不支持时先查部署版本,不要急着改 schema。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189