Token 是什么?理解大模型的第一块积木
Token 是什么?理解大模型的第一块积木

用过 ChatGPT、DeepSeek、Claude 或其他大模型的人,应该都听过一个词:
Token。
比如:
- 模型支持 128K Token 上下文;
- API 按输入 Token 和输出 Token 计费;
- Prompt 太长会消耗很多 Token;
- 大模型本质上是在预测下一个 Token。
那么,Token 到底是什么?
它是一个汉字吗?
是一个英文单词吗?
128K Token 是不是等于 128000 个汉字?
都不是。
简单说:
Token 是大模型处理信息时使用的基本单位。
一、先用 Pixel 和 Voxel 做个类比
理解 Token,可以先从两个更熟悉的概念说起。
图片是由很多 Pixel,像素 组成的。
比如一张 1920 × 1080 的图片,本质上就是:
1920 × 1080 个像素点
每个像素都有自己的位置和颜色值。
所以可以说:
Pixel 是图像的基本颗粒。
三维空间也可以被切成一个个小立方体,这些小立方体叫 Voxel,体素。
在三维重建、机器人、自动驾驶等场景里,Voxel 可以表示某个空间位置是否被占据、密度是多少、属于什么物体等。
所以也可以说:
Voxel 是三维空间的基本颗粒。
那么语言呢?
一句话进入大模型之前,也会被拆成一个个小单元。
这些小单元,就是 Token。
所以可以粗略类比为:
图像 → Pixel
三维空间 → Voxel
文本 → Token
不过要注意,这只是类比。
Pixel 和 Voxel 通常有明确的空间位置和固定采样尺度;
Token 更抽象,它是模型为了计算方便切出来的信息单元。

二、Token 不是字,也不是词
我们看到的是一句话:
我喜欢人工智能
但大模型不会直接处理这整句话。
它会先通过 Tokenizer,也就是分词器,把文本切成若干 Token。
例如可能切成:
["我", "喜欢", "人工智能"]
也可能切成:
["我", "喜", "欢", "人工", "智能"]
具体怎么切,取决于模型使用的 Tokenizer。
所以,Token 不是固定等于一个汉字,也不是固定等于一个英文单词。
它可能是:
- 一个汉字;
- 一个中文词;
- 一个英文单词;
- 半个英文单词;
- 一个标点;
- 一个空格;
- 一段常见字符串。
比如英文单词:
unbelievable
可能会被拆成:
["un", "believ", "able"]
所以更准确地说:
Token 是一种可变粒度的信息单元。
它不是人类语言学意义上的“字”或“词”,而是模型自己的切分单位。
三、为什么不直接按字或按词切?
因为两种方式都有问题。
如果全部按字切,序列会变长。
比如:
我喜欢人工智能
按字切就是:
["我", "喜", "欢", "人", "工", "智", "能"]
这样虽然简单,但“人工智能”这个整体含义被拆散了。
如果全部按词切,词表又会变得很大。
英文里有很多词形变化:
run
runs
running
runner
中文里也有大量新词、组合词和专有名词。
如果每个词都作为独立单位,词表会非常庞大;遇到训练时没见过的新词,模型也更难处理。
所以现代大模型通常采用折中方案:
不完全按字切,也不完全按词切,而是按“子词”切。
比如:
unbelievable
可以拆成:
["un", "believ", "able"]
这样即使模型没见过完整的 unbelievable,也可能见过其中的子词片段。
四、文本进入大模型后发生了什么?
当我们输入:
我喜欢人工智能
Tokenizer 可能先把它切成:
["我", "喜欢", "人工智能"]
然后再把这些 Token 映射成数字 ID:
[37046, 10419, 27327]
大模型真正处理的不是文字,而是这些数字。
接下来,每个 Token ID 会被转换成向量,也就是 Embedding。
整体流程可以理解为:
文本
↓
Tokenizer
↓
Token IDs
↓
Embedding
↓
Transformer
↓
预测下一个 Token
大模型生成文本,本质上就是不断做一件事:
根据前面的 Token,预测下一个最可能的 Token。
比如输入:
今天天气很
模型可能预测下一个 Token 是:
好
于是得到:
今天天气很好
然后继续预测下一个 Token。
一句一句回答,就是这样生成出来的。
下面是修改后的第五节,已经把那种“对于科普文章来说……”的元话术删掉了,也把“Token 决定/影响”改成了更严谨的表述。
你直接替换原文第五节即可。
五、为什么大模型里总是在说 Token?
Token 本身并不神秘。
它更像是大模型世界里的一种统计口径。
我们之所以经常看到 Token,是因为很多和大模型使用相关的规则,都会用 Token 数来描述。
比如:
- 模型的上下文窗口;
- API 的输入和输出统计;
- 一次回答最多能生成多长;
- Prompt、历史对话、检索结果需要截断到多长。
这些通常都不是按“汉字数”或“英文单词数”来计算,而是按 Token 数来计算。

1. 上下文窗口通常按 Token 数计量
我们常说:
8K 上下文
32K 上下文
128K 上下文
这里的 K,通常指的是 Token 数量。
所以:
128K Token ≠ 128000 个汉字
128K Token ≠ 128000 个英文单词
不同语言、不同内容,被切出来的 Token 数并不一样。
例如:
中文:一个 Token 可能对应一个字,也可能对应多个字
英文:一个 Token 可能对应一个词,也可能只是词的一部分
代码:空格、换行、括号、符号、变量名都会被计入 Token
所以,不能简单用“字数”去换算 Token 数。
更准确地说:
模型的上下文窗口限制的是 Token 数,不是字符数,也不是词数。
2. API 计费通常按 Token 数统计
很多大模型 API 会区分:
输入 Token
输出 Token
用户发给模型的 Prompt、历史对话、系统提示词、检索到的资料,都可能算作输入 Token。
模型生成的回答,则算作输出 Token。
具体价格由服务商决定,但统计口径通常是 Token 数。
因此,在实际工程里,我们经常会控制 Prompt 长度、压缩上下文、裁剪历史对话,或者限制 RAG 检索返回内容。
目的不是因为 Token 本身“重要”,而是因为:
输入和输出最终都要换算成 Token 数来统计。
3. 不同模型的 Tokenizer 可能不同
不是所有模型都会使用同一个 Tokenizer。
同一句话,在不同模型里,可能会被切成不同数量、不同粒度的 Token。
比如中文、代码、数学公式、多语言混合文本,如果切分方式不同,进入模型前形成的 Token 序列也会不同。
所以,估算上下文长度或 API 成本时,最好使用对应模型的 Tokenizer 来统计,而不是直接用字数或词数估算。
六、Token 不只属于文本
今天的大模型已经不只处理文本。
图像也可以被转换成类似 Token 的形式。
在 Vision Transformer 这类模型中,图片通常不是一个像素一个像素输入模型,而是先切成 Patch。
比如一张图片大小是:
224 × 224
如果每个 Patch 是:
16 × 16
那么这张图可以被切成:
14 × 14 = 196 个 Patch
这些 Patch 会被转换成向量,再送入 Transformer。
所以可以粗略理解为:
Pixel → Patch → Visual Token
不过要注意:
文本 Token 是由 Tokenizer 切出来的子词单元;
图像 Patch 是从图片上切出来的空间块。
二者来源不同,但进入 Transformer 后,都可以变成一组向量序列参与计算。
所以更准确地说:
Token 可以泛指模型处理信息时使用的输入单元。
这里我们只用图像 Patch 举例,不展开三维空间、点云或 BEV 等更具体的技术路线。
七、用代码看一句话有多少 Token
最后,用一个简单代码看看文本是怎么被切成 Token 的。
先安装:
pip install tiktoken
示例代码:
import tiktoken
encoding = tiktoken.get_encoding("cl100k_base")
text = "我喜欢人工智能,也喜欢写 Python 代码。"
token_ids = encoding.encode(text)
print("原始文本:", text)
print("Token IDs:", token_ids)
print("Token 数量:", len(token_ids))
print("\n逐个 Token 解码:")
for token_id in token_ids:
print(token_id, repr(encoding.decode([token_id])))
输出结果大致会像这样:
原始文本: 我喜欢人工智能,也喜欢写 Python 代码。
Token IDs: [37046, 10419, 27327, ...]
Token 数量: 12
逐个 Token 解码:
37046 '我'
10419 '喜欢'
27327 '人工智能'
...
注意,不同模型、不同 Tokenizer,切分结果可能不一样。
同一句话,在不同模型里,Token 数量不一定完全相同。
总结
Token 是理解大模型的基础概念。
它不是简单的“字”,也不是简单的“词”。
更准确地说:
Token 是模型处理信息时使用的基本单位。
一句话进入大模型之前,会经历:
自然语言
↓
Tokenizer
↓
Token IDs
↓
Embedding
↓
Transformer
↓
预测下一个 Token
所以,大模型看起来是在理解语言,底层其实是在处理 Token 序列。
下次再看到“128K Token 上下文”“输入 Token 计费”“输出 Token 计费”这些说法时,可以把它想象成:
大模型不是直接吃文字,而是一口一口地吃 Token。
Token,就是理解大模型的第一块积木。
更多推荐




所有评论(0)