事情本身不复杂,线索都在日志里。用 deepseek-chat 做批量摘要,官方价目里缓存命中输入是每百万 0.1 元,月度账单折算下来命中部分的单价接近未命中价,usage 里 prompt_cache_hit_tokens 有值。
第一反应是「账单按自然日汇总,与单次请求的命中比例对不上」,验证下来不成立。
原因不止一个,得分开看。统计时把缓存写入与命中混在一起算平均单价。少数情况下是请求前缀每次带不同的时间戳,命中量其实很小。
另外,部分请求走了另一家兼容网关,计费口径不同。
上来先按请求导出 usage 里的命中与未命中 token
python -c "import json;[print(json.loads(l)['usage']) for l in open('calls.jsonl')]"
汇总命中比例再折算单价
python -c "import json;r=[json.loads(l)['usage'] for l in open('calls.jsonl')];h=sum(x.get('prompt_cache_hit_tokens',0) for x in r);m=sum(x['prompt_tokens'] for x in r);print(h,m,h/m)"
去掉前缀里的时间戳后重跑一批对比
python summarize.py --no-timestamp --limit 500
等前面都确认过,再按网关维度拆分账单核对
python bill_split.py --by gateway --month 2026-10
怎么算真的好了,看的是同一批现象。命中 token 占比提升到 0.7 以上,折算单价落到 0.1 元附近,账单与自算结果的偏差小于 5%。
这里还有个坑。缓存价是按命中 token 单独计价的,做成本核算必须把命中与未命中分开统计,混在一起算出来的平均值没有参考意义。这类问题最好一次改到位,反复小改反而容易把原因搅混。
