先打破一个误解:Token ≠ 字数
很多人第一次看到"这个模型支持 128K token"时,直觉会换算成字数。128K token = 12.8 万字?差不多够一本小说了?
如果你这么想,你已经踏入了一个超级常见的坑。
Token 不是字,不是词,也不是句子。它是介于字符和词语之间的某种切割单位,具体怎么切,取决于模型用的是哪种 tokenizer(分词器)。
Token 是什么:从一个字母说起
让我们从英文开始理解。
对于 GPT 系列模型来说,"hello" 是 1 个 token,"world" 是 1 个 token,"tokenization" 会被拆成 "token" + "ization" = 2 个 token。
为什么?因为这些模型使用 BPE(Byte Pair Encoding,字节对编码)算法。
BPE算法:AI的"压缩字典"
BPE 的核心思想很简单:找到文本里最常见的字符组合,给它一个编号。
训练阶段,算法从单个字符开始,不断合并最高频的相邻对:
- 第一轮:发现 "e" + "s" 出现最多次 → 合并成 "es",编号 #256
- 第二轮:发现 "t" + "h" 出现最多次 → 合并成 "th",编号 #257
- 第三轮:发现 "th" + "e" 出现最多次 → 合并成 "the",编号 #258
- ……持续合并,直到词汇表达到目标大小(通常 5 万~10 万个 token)
结果:常见词变成单个 token,罕见词拆成多个 token。
这就解释了为什么"tokenization"会被拆:这个词不够常见,但"token"这个前缀很常见,所以保留为一个 token;"ization"是个常见后缀,也保留为一个 token。
为什么中文 Token 比英文"贵"?
这是很多人没意识到但非常重要的事:用中文和AI对话,消耗的token通常是英文的2-4倍。
原因在于 BPE 的训练数据。主流大模型(GPT-4、Claude、Gemini)的训练语料以英文为主,英文的词汇表优化得很好,常见英文词往往是 1 个 token。
中文呢?每个汉字通常对应 1-2 个 token(具体取决于模型),而且很多中文词语没有对应的合并规则,会被拆得更碎。
实际测试数据:
- "Hello, how are you?" → 约 5 个 token
- "你好,你怎么样?" → 约 10-14 个 token
同样的意思,中文消耗的 token 是英文的 2-3 倍。
对小火龙实验室来说,这个差异非常真实。我们的科普文章用中文写,翻译成英文后,英文版反而更省 token。这也是为什么在 API 调用成本优化上,有时候选择英文提示词是个实用策略。
Token 计算的实际规律
没有精确工具的情况下,可以用这些经验公式估算:
| 语言 | 估算规则 | 示例 |
|---|---|---|
| 英文 | 1 token ≈ 4个字符 / 约0.75个单词 | "Hello world" = 2 tokens |
| 中文 | 1 汉字 ≈ 1-2 tokens | "你好世界" ≈ 4-8 tokens |
| 代码 | 1 token ≈ 3-4个字符(标点多) | 代码通常比文本贵 |
| 数字 | 每个数字可能是单独token | "1234567" ≈ 7 tokens |
Token 限制的实际影响
理解 token 的意义,在于它直接影响你使用 AI 的两件事:
1. 上下文容量限制
每个模型的 Context Window 用 token 计量。Claude 3.5 Sonnet 的 200K token,换算成中文大概是 10-15 万字。听起来很多,但一旦你开始粘贴长文档、代码库、对话历史,很快就会触顶。
触顶之后,模型开始"遗忘"最早的内容——这就回到了上一篇文章说的记忆限制。
2. API 调用费用
商业 AI API 按 token 计费,分输入 token 和输出 token(输出通常更贵)。
以 Claude 3.5 Sonnet 为例:
- 输入:约 $3 / 百万 token
- 输出:约 $15 / 百万 token
如果你让 AI 处理 1 万字的中文文档,大概消耗 1.5-2 万 input tokens,约 $0.045-0.06。看起来不多,但如果你每天跑几百次,成本就上来了。
小火龙实验室有一条经验:压缩 System Prompt 比压缩用户输入更有效。System Prompt 每次请求都会附带,1000 token 的 System Prompt,每天 100 次调用 = 每天浪费 10 万 input tokens。
如何精确计算 Token?
几个实用工具:
- OpenAI Tokenizer(platform.openai.com/tokenizer):免费,支持 GPT 系列模型的 tokenization 可视化
- tiktoken(Python 库):OpenAI 开源,可以在代码里精确计算 token 数
- Anthropic Console:Claude 的 API playground,显示实际消耗的 token
- 经验估算:英文 1 token ≈ 4 字符,中文 1 字 ≈ 1.5 tokens
一个经常被忽视的细节:特殊 Token
除了普通文字,tokenizer 还有一批特殊 token:
<|system|>、<|user|>、<|assistant|>:标记对话角色<|endoftext|>:文本结束标记<|pad|>:填充对齐用
这些特殊 token 也会被计入总 token 数。所以你实际使用的 token 数,往往比你以为的要多一点。
小结:Token 的三个核心认知
- Token ≠ 字符 ≠ 单词:它是 BPE 算法切出来的语义单元,常见的短,罕见的长
- 中文比英文贵:同样内容,中文 token 消耗约是英文的 2-3 倍,API 成本优化时要考虑这一点
- Token 决定两件事:能放多少上下文(容量)+ 每次调用花多少钱(成本)
理解了 token,你才能真正读懂 AI 产品的规格参数,做到心中有数——128K 上下文到底够不够用,换算一下就知道了。