这个坑值得记一笔。做票据识别时按每张图 85 token 估算成本,实际账单翻了近三倍,模型是 gpt-4o,图片统一缩到 1024 长边,detail 用的是默认值。
刚开始盯着「图片里有小字,业务上又不敢降分辨率」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。默认 detail 会按尺寸切 tile,每块单独计价;1024 长边刚好跨过切块阈值,多算一块;批量请求把图片和长文本一起送,基数被抬高。
上来先按官方公式估算单图 token
python -c "w,h=1024,768;print(85+170*((w+511)//512)*((h+511)//512))"
随后对比 low 与 high 两种 detail 的实际用量
python bench_img.py --detail low --n 20 --out low.jsonl
再往下把长边压到 768 再看识别准确率
python resize.py --max-side 768 --dir imgs/ --out imgs768/
等前面都确认过,再按图片数量和文本 token 分开记账
python -c "print({'img_tokens': 1105*20, 'text_tokens': 3200})"
怎么算真的好了,看的是同一批现象。单图成本回到预算内,票据字段抽取准确率下降不超过 1 个百分点,账单与估算偏差在 10% 以内。
这里还有个坑。图片计价不是按张,是按像素切块,改分辨率之前先把公式代进去算一遍。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
