20% 的降价配上一个「同样文本多出 30% token」的新分词器,净结果是涨价 4%——而你用 token 写下的每一份预算,都跟着动了。
Anthropic 自己的价目页写明:Claude 4.7 及之后的模型使用了一个新分词器,它「对同样的文本产出约多 30% 的 token」——于是从 Opus 4.6 的 $5/$25 迁到 Opus 5.5 的 $4/$20,在价目表上读起来是 8 折,落到账单上却只在收支相抵上下几个百分点。token 是一个由厂商定义的单位,而它刚刚被重新计价,这悄悄地重新缩放了你的上下文上限、你的每分钟 token 限额、你的截断阈值,以及你设过的每一条支出告警。跨过这条边界后唯一还成立的数字是「每个完成任务的成本」,本文讲的就是如何把基线重建到它上面。
到底变了什么,说准确些,以及为什么这不是缺陷。
相关的那句话就写在厂商截至 2026 年 10 月的公开价目表上:Claude 4.7 及之后的模型,加上 Claude Mythos Preview,使用了一个新分词器,它「在广泛任务上对其性能提升有所贡献」,并且「对同样的文本产出约多 30% 的 token」。Claude Sonnet 4.6 及更早的模型用的是旧分词器。该页还补了一句承担了大部分运维含量的话:「具体增幅取决于内容与工作负载形态。」
请把它读成一笔被披露的交易,而不是一个错误。更细粒度的词表,给了模型更多、更小的片段去推理,而模型作者判断这份能力收益值得那些 token。它不是财务侧可以忽略的变化,因为 token 并不是文本的单位——它是厂商对文本切分方式的单位,而这两者之间的映射刚刚挪动了大约三分之一。你用 token 计价的每一个量,都在没人改过任何配置的情况下继承了这次挪动。机制见分词这一条;这里要紧的是:这个单位是他们的,不是你的。
这个问题的日常版本叫货币重新面额化。用旧单位报的价与用新单位报的价不可比,而一张把两者混在一起的表,比没有表更糟。你那张跨过模型边界的成本看板,就是那张混在一起的表。
把降价变成涨价的那套算术。
把工作量固定住——同样的提示文本、同样按词数计的答案长度——只变模型。价目表在跌;token 数在涨;你付的是两者之积。
Same work, same text. USD per million tokens, October 2026. Model Tokenizer Input Output Tokens vs 4.6 Relative bill ----------- --------- ----- ------ ------------- ------------- Opus 4.6 previous $5.00 $25.00 1.00× 1.00 Opus 4.7 newer $5.00 $25.00 1.30× 1.30 Opus 5.5 newer $4.00 $20.00 1.30× 1.04 Opus 4.6 → 4.7: price unchanged, bill up ~30% Opus 4.6 → 5.5: price down 20%, bill up ~4% Opus 4.7 → 5.5: price down 20%, bill down ~20%
三种读法,而不同的团队被不同的那种烧到。头两行是给那些「看价目表没变就在同一代内升级」的人准备的陷阱:定价完全相同,支出多了约三分之一,而且找不到一个可以指着说事的费用项。第二种是给那些从 4.7 之前的模型迁到当前档位、并把那 20% 记作节省的人准备的陷阱——按这些公开数字,在你把其他任何因素算进来之前,它大致是打平的。第三种才是诚实的比较,因为两边是用同一个单位报的,而它把头条上的那整个降幅都兑现了。
这张表里有两样东西是被故意排除的,而两者都可能盖过它。能力会改变一个任务要走多少步——一个用十二次工具调用而不是二十次就到位的模型,即便每 token 更贵,按任务算也更便宜,这正是更少 token 还是更便宜的 token 写成闭式的那个效应。而推理力度会独立于分词改变输出体量。这张表不是一份预测;它是你的预测要先施加、否则就毫无意义的那道修正。
另外四样按 token 计价、同时跟着动了的东西。
支出是人们会注意到的后果。真正会引发事故的是下面这四样,因为它们各自是一条限制而不是一笔账,而限制的失效是突然的。
- 以文本衡量的上下文容量。在 30% 的膨胀之后,一个固定的 token 窗口大约少装 23% 的文字(1 ÷ 1.30)。一个原本把一组文档留着余量塞进 180,000 token 的提示装配步骤,现在会截断它——而在智能体里,截断通常是无声的。请从字符数或页数推导预算再做换算,而不要把一个 token 数字硬编进去——见上下文预算,以及有效上下文与宣称上下文里那个「可用窗口小于标称窗口」的另一重原因。
- 每分钟 token 的速率限额。一份 TPM 配额本质上是一份伪装过的文本吞吐配额。这次变化之后,同一份配额少承载约 23% 的工作量,于是一个原本跑在限额 80% 上的负载,现在跑在约 104% 上,在流量毫无变化的情况下开始吃 429。退避那一侧见速率限额与厂商容量;这里的要点是,触发点在没有任何一次发布的情况下挪了位置。
- 输出上限。一个当初因为「宽裕地装得下你最长的报告」而选定的
max_tokens= 4,096,现在少装大约四分之一,而失败形态是一个被截断的答案,看起来像一次模型质量回退。这一条在评测里尤其阴险:被截断的回答会被判为错误回答,而事后复盘会朝着错误的方向去找原因。 - 按长度计价的阈值。在那些按提示长度改价的档位上——Claude Haiku 5.5 对提示超过 100,000 token 的请求收 5 倍——token 膨胀会把跨线点在运行中提前。同一段原本能在便宜一侧撑二十步的对话,现在在第十五步左右就跨过去了。那道悬崖由成本、质量与延迟算清。
请注意它们共同的形状:每一例都是一个当初留了余量的数字失去了余量,而你的变更记录里没有任何东西能解释它。这与未固定的厂商默认值属于同一类失败——一个你当成常量的值,原来是别人的。
测你自己的比值;不要直接用 30%。
厂商说增幅取决于内容与工作负载形态,而这句限定是承重的。分词器的变化在不同内容类型上并不均匀:英文散文、源代码、结构化工具输出与非拉丁文字各有自己的比值,而一个 60% 是 JSON 工具结果的语料,不会像一份英文文档语料那样移动。如果你的流量是多语的,多语智能体解释了为什么按语种的离散度往往是其中最大的一项。
这次测量很便宜,而你该在迁移之前做,不要等到账单之后。
# Sample real traffic, bucket it by content class, count both ways. # Any token-counting endpoint or local tokenizer will do; what matters # is that the SAME text is counted under both tokenizers. for bucket in [english_prose, source_code, json_tool_results, zh_prose]: old = count_tokens(bucket, model="pre-4.7-model") new = count_tokens(bucket, model="current-model") ratio[bucket] = new / old # Weight by each bucket's share of YOUR token volume, not by count. blended = sum(ratio[b] * volume_share[b] for b in buckets)
在比较任何东西之前,先用这个混合比值把你迁移前的基线换算成新分词器的单位。也请把各桶的比值留着:它们会告诉你哪一份上下文预算最容易被截断,而且经常会揭示出——通常是机器生成的工具输出——某一类内容贡献了大部分膨胀,而它同时也是最容易压缩的那一类。
把账务重建到那个唯一的不变量上。
「每个完成任务的成本」是跨过分词器边界后两侧含义相同的唯一数字,而这就是本章节反复回到按任务计成本这个单位的实务理由。具体来说:
- 把「每个成功任务的成本」作为上报指标,把「每 token 成本」降格为诊断用。单位经济性与成本归属都假定了一个稳定的分母;这件事是让它们保持诚实的前提。
- 在每一张按 token 计价的图上标注那条边界。在模型切换的那一天画一条写着「分词器变更」的竖线,能省掉四分之一关于「这个阶跃是不是单位变更」的争论。
- 从文本预算重新推导 token 预算。把限制存成「最近 40 轮加 12 段检索到的段落」,在装配时再算出 token 数字,让它随分词器移动,而不是无声地撞在它上面。
- 重新核对每一份按 token 计价的承诺。一份以 token 为单位买下的预置吞吐或支出承诺,在膨胀之后买到的任务更少——见预置吞吐与承诺量,并在合同允许时按任务重新谈。
- 给你的评测套件重新定价。评测成本与 token 体量直接成正比,而一份按旧单位、以美元设定的评测预算,现在大约少买 23% 的运行次数——这恰好在你正要去测量一次迁移的时刻,悄悄削掉了你的统计功效。
- 缓存那套算术不用动。缓存读取与写入的价格是基准输入价上的倍数,所以用读取次数表示的回本点不受分词影响。提示缓存是本页上少数几件你不必重算的事。
迁移清单。
把它并入你已经在跑的那套模型弃用与迁移流程,因为分词器变更是一种看起来不像迁移风险的迁移风险——API 一模一样,代码能编过,而回退发生在单位上。
- 从厂商自己的文档确认源模型与目标模型是否共用一个分词器。不要从版本号接近去推断;本例中那条边界就夹在 4.6 与 4.7 之间,而这已是存在过的最小版本跨度。
- 在抽样的生产流量上测出混合比值与各桶比值。
- 把旧基线换算成新单位,然后再比较。把价格变化与单位变化作为两个独立的数字上报,绝不要合成一个净值。
- 重新拟合每一个按 token 计价的限制:上下文装配预算、
max_tokens、截断阈值、TPM 余量、支出告警、按长度计价的档位边界。 - 在新的输出上限下重跑评测套件,专门用来抓「被判成答错的截断」。
- 把比值与日期记进运行手册。下一次分词器变更,会以这一次同样的方式到来——藏在一条脚注里。
在把一次降价记作节省之前,先问一个问题:这两个数字是用同一个单位报的吗?按 2026 年 10 月的公开费率,Opus 4.6 到 Opus 5.5 在纸面上降价 20%,在实际中大致持平;而 Opus 4.7 到 Opus 5.5 是同样的 20% 降幅,并且真的兑现了——同样的价目表,相反的结论,唯一的差别是你的基线取自那条分词器边界的哪一侧。请报「每个完成任务的支出」,把你实测的比值挨着它记在运行手册里,并把任何按 token 计价的常量都当成厂商可以不再通知你第二遍就改掉的值。这道修正该放进模型的哪个位置,见智能体支出预测。