现场是这样的。模型对超过 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% 以内,超长请求的占比和加价都能对上。
长上下文的计价规则要看清楚是按整体还是按超出部分,估算脚本要跟着价目表一起更新。这类问题最好一次改到位,反复小改反而容易把原因搅混。
