报错是这么冒出来的。在 Azure OpenAI 里把 gpt-4o 部署成了 prod-chat,代码里 model 仍写 gpt-4o,请求返回 404 Resource not found,换成部署名后正常。
中间走过弯路,把「api-version 与部署类型不匹配」当成主因,改完现象没变。
原因不止一个,得分开看。Azure 用部署名寻址,不认原始模型名。也可能是endpoint 少了 /openai/deployments 路径段。
还有一种情况,同一资源下多个部署,代码指向了旧部署。
动手时先列出资源下的全部部署名
python -c "import os;print(os.getenv('AZURE_OPENAI_ENDPOINT'))"
再往下把 model 改成部署名并补齐路径
curl "$AZURE_OPENAI_ENDPOINT/openai/deployments/prod-chat/chat/completions?api-version=2024-10-21" -H "api-key: $AZURE_KEY" -H 'Content-Type: application/json' -d '{"messages":[{"role":"user","content":"ping"}]}'
随后核对 api-version 是否是资源支持的版本
python -c "print({'api_version':'2024-10-21'})"
末了把部署名做成配置项避免硬编码
python -c "import json;print(json.load(open('azure.json'))['deployment'])"
白天有业务在跑,能验证的部分都压到了晚上做。
别只看报错消失,验证要多做一步。同一份配置在测试与生产各指向自己的部署,请求返回 200,日志里记录的部署名与资源一致。
提醒一点。Azure 的 model 字段实际是部署名,迁移时最容易漏改,做成配置项能避免每次发版都踩一遍。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
