先看现象。内部成本报表按字符数乘 0.6 估 token,跑了一个月跟账单核对,输入侧少报 35%,中文长文和代码混排的批次差得最多,单批差了近两千 token。

真正麻烦的地方在于,几个原因的现象几乎一样。中文一个字常见要占一到两个 token,0.6 的系数只适合英文。还有一种是代码与 JSON 里的符号被拆成多个 token,估算完全没覆盖。

另外,只算了用户输入,system 提示与历史轮次漏在账外。

少数情况下是不同模型的分词器不一样,系数却全站通用。

第一件事是用分词器实测一段样本的真实 token 数

python -c "import tiktoken;e=tiktoken.get_encoding('o200k_base');print(len(e.encode(open('sample.txt').read())))"

拿实测值和现有估算逐条对比

python check_token.py --file sample.txt --factor 0.6

然后按语言类型给不同系数

python -c "print({'zh':1.5,'code':2.2,'en':0.28})"

报表改为直接读接口返回的 usage 字段

python -c "print('usage.prompt_tokens','usage.completion_tokens')"

怎么算真的好了,看的是同一批现象。抽 200 条样本估算与实测偏差小于 5%,月度报表与账单总额差异小于 2%,中文批次不再单向偏低。

提醒一点。系数法只适合做预算预警,真正对账必须用 usage,换模型的那个月偏差会集中爆发。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189