什么是 Token?—— 大语言模型的"基本语言单位"
一、Token 是什么
Token 是大语言模型处理文本的最小语义单元。它不是"字符",也不是"单词",而是介于两者之间的一种粒度。
举个例子,中文句子 "我喜欢吃苹果" 在不同分词策略下可能被切分为:
方案一(单字): 我 / 喜 / 欢 / 吃 / 苹 / 果
方案二(词级): 我 / 喜欢 / 吃 / 苹果
方案三(子词): 我 / 喜欢 / 吃 / 苹 / 果
现代大模型(如 GPT、Claude 系列)普遍采用 BPE(Byte Pair Encoding) 子词分词算法,高频词整体保留(如 "喜欢"),低频词拆成子词(如 "苹果" 可能被拆成 "苹" + "果")。英文中,常见词如 "the"、"language" 各占一个 token,而罕见词如 "tokenization" 可能被拆成 "token" + "ization"。
二、为什么 Token 如如此重要
1. 计费单位 —— 几乎所有 LLM API 都按 token 数量计费(输入 + 输出),理解 token 就是在理解成本。
2. 上下文窗口 —— 模型的"记忆容量"以 token 衡量。比如 Claude 支持 200K token 的上下文窗口(最长),大约可以容纳一本中等篇幅的小说。
3. 速度与延迟 —— 模型逐 token 生成文本,token 数量和生成速度直接相关。
4. 多语言差异显著 —— 不同语言的"token 效率"差异巨大。同一段意思:
- 英文可能需要 100 tokens
- 中文可能只需 50-80 tokens
- 日文可能需要 120+ tokens
这意味着中文在 LLM 调用成本上通常比英文更经济。
三、Token 的换算规则
一个粗略的经验法则:
| 语言 | 1 个 Token 约等于 |
|---|---|
| 英文 | 约 0.75 个单词,或约 4 个字符 |
| 中文 | 约 0.5-0.7 个汉字 |
| 代码 | 约 0.4-0.6 个有效字符(空格和缩进也算) |
例如,一段 1500 字的英文文章大约是 2000 tokens,而同样内容的 1500 字中文文章大约是 1000-1200 tokens。
四、Token 是怎么生成的
分词器(Tokenizer)的工作流程大致如下:
原始文本 → 标准化(Unicode 规范化) → 分词 → 映射到 Token ID → 送入模型
每个 token 对应一个唯一的整数 ID,模型内部通过 Embedding 层 将这个 ID 映射为高维向量,再送入 Transformer 网络进行计算。
五、实际开发中需要注意的点
- Token 计数不等于字符数:不要用
.length来估算 token 数量,尽量使用官方的 tokenizer 库(如tiktoken)。 - 提示词压缩:同样的内容,精简措辞可以显著降低 token 消耗和延迟。
- 特殊 token 也占位:系统提示、对话格式(如
<system>,<user>,<assistant>等标记)都会消耗 token 配额。 - Token 缓存:重复的内容可以命中 LLM 的 prompt cache,降低成本(Claude API 支持此功能)。
六、总结
Token 是理解和优化 LLM 应用的基础概念。它影响成本、性能、上下文容量,以及多语言策略的选择。掌握它,是做好 LLM 工程的第一步。