标价一分没涨,我同一份代码在 Claude 上多烧了三成 token

cover

哈喽,我是飞飞。

前阵子写 Sonnet 5 的时候,我在文末顺手撂过一句话:别信标价页那个便宜价,它换了新 tokenizer,名义上省下的会被悄悄削回去。

当时那句话我说得挺虚,没数,就是个体感。

昨天刷到一篇实测,有人真把这笔账从头到尾算了一遍。我盯着那张表看了半天,后背有点发凉。

硌得我难受的地方在于,这笔账我早该自己算,却让别人先算明白了。

我早说过别信标价

先把话说前头,免得你觉得我在替 Anthropic 洗地或者砸场子。

我是 Claude Code 的重度用户,天天开着它干活,一个月给 Anthropic 的钱不算小。

我对成本这事敏感到什么程度?早年我逮着最强的 Opus 什么活都上,月底账单肉疼,才逼自己改成按任务手动分模型。

省钱模式我手动跑过,prompt caching 我把账单从 106 美元压到过 33,连把文本渲染成图钻图片计费空子那种野路子我都写过。

我甚至给自己立过一条「过秤」的规矩:派 agent 干活前,先在心里掂量这活值不值得上贵模型,纯体力杂活手动切便宜档。有回我从 Claude 换到 Gemini,仗着它上下文装得下,一直不开新窗口,一个月消费直接高了六成。那次我才明白,多花的钱常常不在模型贵,在用法悄悄变了。

所以这篇不是唱衰,是我这个抠成本抠到骨头里的人,发现自己漏算了一层。

token 长度不固定

先说清楚这层到底是什么,不然后面的数字你没法自己判断。

你付的钱,是两个数相乘:内容被切成多少个 token,乘以每个 token 多少钱。

标价页只告诉你后面那个单价,默认前面那个是定死的。

它不定死。

同一段文字,交给不同的 tokenizer,切出来的 token 数能差出一大截。

打个比方。你去菜市场买肉,店家报的是每份多少钱,可这个「份」是他自己拿刀切的。

刀法一变,同一块肉切成更多份,单价没动,你付的总数就上去了。

token 就是那个「份」,tokenizer 就是那把刀。

同样代码切得更碎

Anthropic 就是换了刀法。

从 Opus 4.7 开始,它上了一套新 tokenizer,4.8 和 Sonnet 5 都沿用这套;4.6 和更早的还是旧刀。

新刀切同一份内容,比旧刀多切出不少 token。

按 Anthropic 自己文档的说法,新 tokenizer 对同样文本大概是旧版的 1 到 1.35 倍,代码尤其是重灾区。

那篇实测更狠,直接拿官方接口把同一批文件在新旧两把刀下各切一遍。

一个 TypeScript 文件从 898 涨到 1178,一段英文散文从 476 涨到 636,他们那份 agent 系统提示从一万零七百多涨到近一万五。

Python 从 831 涨到 1022,Rust 从 1019 涨到 1312,一份 JSON 工具定义从 2631 涨到 3306,几乎每一类都是两三成往上走。

代码为什么最惨?符号、缩进、驼峰命名这些零件,新刀切得比旧刀更碎,而代码里满满都是这些。

综合下来,一次真实请求大概多产三成 token。

关键在于,每 token 的标价一分没动。

Opus 4.6 和 4.8 都是每百万输入 5 美元、输出 25 美元,数字一模一样。

可同样一份代码丢进去,4.8 计的 token 就是比 4.6 多。

那篇文章拿真实账单核过:同一份内容,Opus 4.6 计 2541 个 token,4.8 计 3191,多了四分之一还拐弯。

换算成有效价格,4.8 那个 5 美元 25 美元,花起来其实像 7.5 美元 37.5 美元。

那篇实测还拿 GPT 当尺子比了一圈,同一个 TS 文件,Claude 新刀切出来是 GPT 的 1.73 倍。这个跨厂对比我没法自己复核 GPT 那半边,就当那篇博客的实测数摆着看。

中文党躲过一劫

看到这你先别急着卸载 Claude Code。

有个细节那篇实测标得很清楚,我觉得对咱们特别重要:这三成的涨幅,几乎全砸在英文和代码上,中文基本没动。

他们测的那段中文散文,旧刀 435 个 token,新刀 433,差了两个,基本可以忽略。

换句话说,吃亏的是你的代码文件、你那一大坨英文系统提示、你的 JSON 工具定义。

你写在代码里的中文注释、你跟 agent 的中文对话,这部分几乎没被多切。

所以别一听「涨三成」就慌。

你要是主要拿它写中文内容、做中文对话,这刀基本没落在你身上。

可只要你天天用它跑代码,尤其是 TypeScript 这种,那这三成就实打实压在你账单上。

我这条自动写作流水线,十几个 skill 全是英文系统提示加中文正文混着跑,英文那半边是躲不掉的。

光那份写作规则手册就攒了一百多条,全是英文骨架。每跑一篇稿子,这些英文系统提示都要重新计一次费,这刀落下来,我是正面挨的。

促销价 8 月底到期

还有一层叠加的,得单独拎出来提醒你,因为它是一条带日期的坑。

Sonnet 5 上线时挂的是每百万输入 2 美元、输出 10 美元,比 Sonnet 4.6 的 3 美元 15 美元便宜,当时不少人当降价欢呼。

那是促销价,写死了到 2026 年 8 月 31 日。

促销期内,这个低价刚好略微盖过多出来的那些 token,所以现在用 Sonnet 5 跑代码,确实还比 4.6 略便宜一点点。

问题是 9 月 1 号一到,价格恢复成 3 美元 15 美元,可多出来的 token 不会跟着退回去。

到那天,同样的活,用 Sonnet 5 会比当初用 Sonnet 4.6 贵大概三分之一。

这条我建议你直接记进日历。省得 9 月账单出来,才发现单价和 token 两头一起涨了。

拿 count_tokens 自己量

讲了半天别人的数,说个你今天就能上手的事。

想知道这刀到底落在你身上多少,别猜,也别拿 tiktoken 去估。

tiktoken 是 OpenAI 家的尺子,拿它量 Claude 会低估百分之十几,代码上错得更多。

Anthropic 有个官方接口叫 count_tokens,你传哪个 model,它就用那个 model 对应的 tokenizer 来数,数出来的就是账单要扣的。

你把自己最常跑的那类文件,比如项目里最大那个 TS 文件,分别按 model 传 claude-opus-4-6 和 claude-opus-4-8 各数一遍,两个数一减,差多少一目了然。

那篇实测就是这么干的。他们还嫌 count_tokens 只是预测,干脆发了几个 max_tokens 设成 1 的真实请求,直接读账单上的 input_tokens 来对,两个数分毫不差。整套核对下来,一共花了八分钱。

老实说,我手头这台机器没配 Anthropic 的 API key,这一遍我还没亲手跑上。

方法我给你了,数我不替你编。你要是跑了,欢迎回来告诉我你那份代码差了几成。

我配好 key 也会拿自己这条流水线量一遍,到时候真有了数,再单开一篇跟你摊。

一个模型到底贵不贵,其实不在标价页那两个数字,在你自己那份代码被它切成多少 token、月底实扣多少。

标价从来不等于你月底实扣的那个数。

我为 TTS 那套按字符计费的坑肉疼过,当时照正文字数估成本,结算下来多出七成,标点、空格、停顿全按字符算。

这次 tokenizer 这刀,是同一个陷阱换了层皮:计费的口径在你没留神的地方,把标价悄悄放大了。

你有没有过那种感觉,单价明明没涨,月底账单却莫名其妙厚了一截?或者你已经拿 count_tokens 量过自己代码的 token 口径?评论区说说你那份差了几成。