先看现象。做文案改写时为了多样性把温度从 1.0 调到 1.5,接口立刻 400,原文 Invalid value for 'temperature': 1.5, must be between 0 and 2,改成 1.2 在 gpt-4o 上能通,同一个 1.2 换到 o3-mini 又报不支持。
这类报错背后常见的原因有几处,逐个排除就行。gpt-4o 系列允许 0 到 2 推理模型只接受默认 1。另一种情况是参数在两处配置 请求体覆盖了本地文件。
少数情况下是字符串形式的温度被提前拼进请求 越界。
不容易想到的是,网关层做了自己的范围校验 与官方不同。
上来先打印最终发出的请求体
python -c "import json;print(json.dumps(json.load(open('payload.json')),ensure_ascii=False)[:300])"
然后在代码里加范围断言
python -c "t=float(1.2);assert 0<=t<=2;print(t)"
推理模型分支去掉该参数
python -c "import json;d=json.load(open('payload.json'));d.pop('temperature',None);json.dump(d,open('payload2.json','w'))"
两条请求分别验证普通模型与推理模型
curl -s -o /dev/null -w '%{http_code}' https://api.openai.com/v1/chat/completions -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' -d @payload2.json
恢复的判定其实很直接。普通模型和推理模型都返回 200,请求体里不再出现越界温度,日志里也没有对应 400。
补一句。温度范围随模型家族变,o 系列只认默认值 1,配置里按模型名分支比一份参数打天下稳。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
