同样的代码,Claude竟比GPT多算73%的Token!分词器差异与成本辨析
在 AI 应用开发中,模型的账单价格通常标榜"每百万 Token 多少钱",但这往往掩盖了一个关键事实:同一段代码在不同模型上会被切成不同数量的 Token。这一差异直接决定了你实际支付的金额,而大多数人从未对此进行过实测。
近日,Playcode 发布的一份测评揭示了这一被忽视的成本黑洞。数据显示,使用相同的代码片段,GPT 系列模型的分词器效率显著高于 Claude 系列,导致后者在相同输入下产生了更多的 Token 消耗。
一、核心数据:73% 的惊人差距
Playcode 的测评基于一份 2888 字符的 TypeScript 文件,分别通过各家的官方计数接口进行了测试。结果如下:
- GPT (o200k 分词器):切分出 681 个 Token。
- Claude (最新分词器):切分出 1178 个 Token。
Claude 比 GPT 多计算了 73% 的 Token。在挂牌单价保持不变的情况下,这意味着实际花费已经发生了显著变化。
跨语言场景的具体倍数差异
以 GPT 的 o200k 分词器为基准,Claude 最新分词器在不同内容类型上的 Token 产出倍数如下:
| 内容类型 | Claude 相对 GPT 的倍数 |
|---|---|
| TypeScript | 1.73 倍 |
| Rust | 1.58 倍 |
| JavaScript | 1.52 倍 |
| Python | 1.50 倍 |
| 英文散文 | 1.40 倍 |
| 中文文本 | 1.45 - 1.55 倍 (长期存在现象) |
值得注意的是,中文文本上的差距主要由分词器底层逻辑决定,Claude 的新旧版本相比 GPT 均多出约 1.45-1.55 倍的 Token,这并非新分词器造成,而是长期存在的现象。
为什么代码上的差距如此明显?
测评指出,GPT 的 o200k 分词器对 TypeScript 的压缩效率特别高,平均 4.24 个字符对应 1 个 Token。这大概率是因为其训练数据中包含大量网络 JavaScript/TypeScript 代码,使得 camelCase 命名、JSX 语法等模式常被压缩为一个 Token。
相比之下,Claude 的分词器在代码和文字上的压缩效率较为接近,未针对代码进行单独优化,导致在编码任务(Agent 最常处理的内容类型)中差距被放大。
二、Anthropic 内部迭代:新分词器的"隐形涨价"
除了跨厂商对比,Anthropic 自身分词器的迭代也带来了成本波动。
- 新旧对比:Anthropic 的新分词器(应用于 Sonnet 5、Opus 4.8、Fable 5)比旧分词器平均多切出约 32% 的 Token。
- 实际影响:以 Opus 4.6 和 Opus 4.8 为例,两者挂牌价相同,但实际有效单价却差了约 32%。
这意味着,厂商更换分词器等同于变相调价,而账单上通常不会明确标注这一变化。
三、实际花费:差距可能远超 73%
上述数据仅基于输入端的 Token 差异。在实际任务中,总花费还受以下变量叠加影响:
- 模型回复的啰嗦程度
- 思考 Token (Thinking Tokens) 的数量
- 缓存读写频率
- 工具调用次数
有用户反馈,在实际使用中,不同模型间的总花费差距可能达到 2 到 4 倍。因此,仅关注输入端的 73% 差异可能低估了实际成本。
综合成本评估
| 模型/分词器 | 相对 GPT o200k 权重 | 备注 |
|---|---|---|
| Gemini 3 Flash | 1.09 倍 | 虽然分词器比 GPT 略重,但挂牌单价低很多,综合仍是最便宜的选项之一 |
| GPT-5.5 / GPT-5.6 Sol | 1.0 倍 | 共用同一套分词器,挂牌价与实际单价一致 |
四、开发者自测指南:五分钟掌握真实成本
不必依赖第三方测评,各家的 Token 计数接口大多免费且易于使用。以下是自测步骤:
1. 测试 Claude (Anthropic)
Anthropic 提供了官方的 count_tokens 接口,传入文本即可返回 Token 数,无需调用模型生成内容,也不产生费用。
- 接口地址:
POST https://api.anthropic.com/v1/messages/count_tokens - 操作: 传入测试文本,查看返回结果中的 Token 字段。
2. 测试 GPT (OpenAI)
OpenAI 的 o200k_base 编码器是公开的,可通过本地开源库 tiktoken 直接计算,完全离线且不花钱。
import tiktoken
enc = tiktoken.get_encoding("o200k_base")
tokens = enc.encode("你的文本")
print(len(tokens))
3. 测试 Gemini / Grok
Google 和 xAI 也各自提供了类似的 Token 计数接口,用法同上。
五、给 AI 从业者的建议
73% 这个数字会随模型迭代很快过时,但背后的判断逻辑不变:
- 警惕"隐形调价":厂商更换分词器等同于变相调整价格,账单上往往不写明,需要开发者自行核实。
- 拒绝单一指标比较:挂牌单价不能跨厂商直接比较,尤其是对于代码类工作负载。
- 关注最终成本:真正该比的是"完成同一个任务花了多少钱",而不是"每 Token 多少钱"。这需要把分词效率、回复长度、缓存命中率都算进去。
结论:模型选型不该只看挂牌价。拿出你自己常用的一段代码或 Prompt,用上述方法分别丢进几个接口对比,得出的比例比记住任何单一数字都可靠。