给 gemini-2.5-pro 设了 thinkingBudget 500,想压低成本,返回 400,原文 invalid thinking budget,文档里写的是范围而不是任意值。

一开始怀疑是「Flash 与 Pro 的预算规则不同,配置不能共用」,查了一圈,方向不对。

排查方向其实有限,先把可能性排一排。2.5 Pro 不允许完全关闭思考,只能调范围。少数情况下是预算与 maxOutputTokens 相加超出模型上限。

另外,SDK 字段名与 REST 字段名大小写不一致。

不设预算跑一次看默认消耗

curl -sS "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent?key=$GEMINI_API_KEY" -H 'content-type: application/json' -d '{"contents":[{"parts":[{"text":"算一下 23 乘 47"}]}]}' | jq '.usageMetadata'

再往下改成文档允许的预算值

python -c "import json;print(json.dumps({'generationConfig':{'thinkingConfig':{'thinkingBudget':1024}}}))"

末了对比两次的思考 token 用量

python -c "print('compare usageMetadata.thoughtsTokenCount')"

命令输出我都留了记录,免得改完记不清原来的值。

改之前先确认了最近有没有人动过配置,避免白查一遍。

改完先别撤,确认这几项。返回 200,usageMetadata 里 thoughtsTokenCount 落在设定预算内,总输出 token 没有超上限。

补一句。思考预算是成本旋钮而不是开关,压太小会让推理题正确率明显掉,先在评测集上量一遍再定。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189