先把当时的情况摆出来。自建成本报表把 prompt_tokens 和 completion_tokens 都乘输入单价每百万 2 元,财务按账单核对时发现实际支出比报表高 41%,输出单价其实是输入的 4 倍。
这类报错背后常见的原因有几处,逐个排除就行。计费表只有一列单价,输出单价根本没进模型。也可能是两个字段被求和后统一乘价,明细不可回溯。
少数情况下是缓存命中的输入有折扣,报表按原价算。不容易想到的是,汇总到天以后只剩总 token,没法再拆开重算。
先把输入输出拆开各乘各的单价
python -c "print({'in':1200*2/1e6,'out':800*8/1e6})"
落库时保留 usage 原始三个字段
python -c "import json;print(json.dumps({'prompt_tokens':0,'completion_tokens':0,'cached_tokens':0}))"
随后逐日与账单核对差额
python reconcile.py --ledger usage.csv --bill bill.csv --by-day
给报表加一列单价版本号便于追溯
python -c "print('price_ver=2026-10')"
恢复的判定其实很直接。报表总额与账单差额在 1% 以内,缓存命中单独成列,逐日差额没有同方向的系统性偏移。
提醒一点。缓存命中的输入按折扣价结算,只拿总量乘单价永远对不上,先保住原始 usage 再谈口径统一。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
