先看现象。一次请求带四张 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% 以内,四张图的成本能提前估出。
容易忽略的是,图片成本按分辨率折算,按文件体积或按字数估都会明显偏低。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
