把 chat.completions 的整套调用换成 responses.create,模型写 gpt-5-mini,请求里还带着 temperature=0.2 和 top_p=0.9,接口立刻 400,原文 Unsupported parameter: ‘temperature’ is not supported with this model。

一开始怀疑是「SDK 把 chat 的默认值悄悄带进请求体,代码里没写也照样发出去」,查了一圈,方向不对。

原因不止一个,得分开看。推理模型只接受默认采样参数,temperature 不是 1 就被直接拒绝。另一种情况是top_p 和 temperature 同时显式给值,网关按一组不支持的组合处理。

不容易想到的是,structured output 的 text.format 写成了 chat 的 response_format 键名。

上来先用最小请求体复现一次确认真是这两个参数

curl https://api.openai.com/v1/responses -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d '{"model":"gpt-5-mini","input":"hi","temperature":0.2}'

去掉采样参数再发同样的输入

curl https://api.openai.com/v1/responses -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d '{"model":"gpt-5-mini","input":"hi"}'

接着打开 SDK 调试日志看真实请求体

$env:OPENAI_LOG='debug'; python app.py

结构化输出改用 text.format 键名重试

curl https://api.openai.com/v1/responses -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d '{"model":"gpt-5-mini","input":"给出结论","text":{"format":{"type":"text"}}}'

恢复的判定其实很直接。同一请求返回 200,返回体 status 是 completed,日志里的请求体不再出现 temperature 和 response_format,输出内容与去掉参数前一致。

SDK 的默认值会替你补参数,报不支持时先看 debug 日志里的请求体,比一行行翻代码快,也避免把服务端默认当成自己的配置。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189