这个坑值得记一笔。把推理模型的 temperature 设成 0.2 想降低随机性,返回 400,提示 only the default value of 1 is supported,去掉这个参数后请求才正常。

刚开始盯着「客户端 SDK 会默认注入 temperature=1,看起来像没传」,折腾了半个多小时,排掉了。

排查方向其实有限,先把可能性排一排。推理类模型不接受自定义温度参数;top_p 与 presence_penalty 同样被限制;配置中心下发的默认值覆盖了代码里的设置。

去掉温度参数,改用提示词控制输出风格

payload.pop('temperature', None); payload.pop('top_p', None)

再往下确认请求体里确实没有默认注入的字段

python -c "import json;print([k for k in payload if 'temp' in k])"

需要更强约束时改用结构化输出

payload['response_format'] = {'type':'json_object'}

剩下的就是把最终报文完整打日志,便于复盘

print(json.dumps(payload, ensure_ascii=False)[:400])

别只看报错消失,验证要多做一步。请求返回 200,输出稳定且不再出现参数不支持的报错,推理过程也能正常返回。

这里还有个坑。温度被固定后,多次调用的差异主要来自采样和上下文,想稳定复现还得固定提示词与历史,而不是反复试参数。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189