DOCAI · 概念 · L2
分词器是什么,为什么中文更费 token
一句话定义
把文本切成 token 的那套规则;不同模型的词表不同,同一段文字算出来的 token 数也不同。
开发者更新 2026-11-13核验 2026-11-13 · docai 编辑部
模型看到的是 token,不是字
文本进入模型前,先被分词器切成 token:可能是整词、词的一部分、 一个汉字、甚至一个字节。模型只处理 token 序列,价格和上下文长度也都按 token 算。
所以「我这段只有 500 字,为什么算出来 900 token」不是 bug, 是你数的单位和模型数的单位不一样。
不同文字的密度
大致经验(不同模型差异较大,仅供估算):
| 内容 | 大约多少 token |
|---|---|
| 英文散文 | 1 token ≈ 4 个字符 |
| 中文 | 常见 1 个字 ≈ 1 个 token,生僻字可能更多 |
| 代码 | 受符号和缩进影响,通常比同长度英文更费 |
| 数字与 JSON | 标点、括号、键名都会各占 token |
中文更费,是因为多数词表以英文语料为主,一个汉字常被切成一个甚至多个 token; 而英文的常见词往往一个词就是一个 token。
怎么准确知道
不要靠字数换算,直接用对应的分词工具:
- OpenAI 系模型可以用
tiktoken计算; - 其他开源模型用 Hugging Face 的
tokenizers,加载对应模型的词表; - 商用 API 通常在响应里返回
usage,那是唯一权威的计费数字。
换模型就要重新算:词表不同,同一段文字的 token 数可能差 20% 以上。
对实践的三个影响
- 成本:输入按 token 计费,中文内容多时,账单会比按字数估的高。
- 上下文:上下文窗口以 token 为单位,中文能放的字数比英文少。
- 截断:按字符截断可能把一个 token 切断,最好按 token 数截。
常见误解
- 「一个汉字一个 token」:常见但不绝对,标点和生僻字会让比例变化。
- 「所有模型的 token 一样」:词表不同,计数不同,价格也不同。
- 「token 等于单词」:不是,一个单词可能被切成多个 token。