先看现象。一次请求带四张 1024 见方的商品图加 600 字说明,usage 里 prompt_tokens 是 4500,内部按字符数只报了 400 token,差额全在图片折算上。

原因不止一个,得分开看。图片按瓦片折算 token 不按文件大小。还有一种是detail 为 high 时切块更细。

少数情况下是图片边长不是 512 的整数倍 有补边损耗。

不容易想到的是,同一张图在历史里重复出现 每轮都计。

第一件事是打印 usage 的完整字段

python -c "import json;print(json.load(open('r.json'))['usage'])"

接着按瓦片数估算单图 token

python -c "print((1024//512)**2*170+85)"

再往下改 detail 为 low 做同图对照

python ask.py --image a.png --detail low --show-usage

末了把折算系数写进成本预估脚本

python cost_model.py --tile 170 --base 85

中间停过一次,把已经改的东西回滚干净,再重新来一遍。

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

改完先别撤,确认这几项。自算的 prompt_tokens 与接口返回相差在 5% 以内,四张图的成本能提前估出。

容易忽略的是,图片成本按分辨率折算,按文件体积或按字数估都会明显偏低。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189