现场是这样的。模型对超过 32k 的输入按 2 倍单价计,一批合同摘要平均 45k token,自己按基础单价乘 token 算出来的成本比账单低 40%,财务对不上。

中间走过弯路,把「缓存命中的部分有折扣,混在一起算会偏」当成主因,改完现象没变。

这类报错背后常见的原因有几处,逐个排除就行。超长部分单独按更高单价结算;阶梯价按整单请求还是超出部分计算需要确认;单价表更新后本地估算脚本没同步。

拉 usage 明细按请求统计 token 区间

python -c "import json;rows=[json.loads(l) for l in open('usage.jsonl')];print(max(r['input_tokens'] for r in rows))"

随后把超过 32k 的请求单独分组

python -c "print({'over32k':0,'under32k':0})"

然后按阶梯单价分别计算再求和

python cost_calc.py --usage usage.jsonl --price price.json --tiers

与账单页面按天核对差额

python -c "print({'calc':0,'bill':0})"

恢复的判定其实很直接。自算成本与账单的差额收敛到 2% 以内,超长请求的占比和加价都能对上。

长上下文的计价规则要看清楚是按整体还是按超出部分,估算脚本要跟着价目表一起更新。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189