Token 到底是什么?揭秘大模型背后的”文字压缩术”

本文整理自 B 站 UP 主 马克的技术工作坊 的视频 《Token 到底是什么?—— 揭秘大模型背后的”文字压缩术”》(20.3 万播放),并补充了额外的知识点和实践建议。

你可能每天都在用大模型,但如果我问你:40 万 Context Window,到底能装多少内容? 你能准确回答吗?

大多数人对 Token 的理解停留在”大概就是字”——但这个模糊的认知,会让你在写 Prompt、算成本、管 Context 的时候踩一堆坑。


一、大模型的基本工作原理

在理解 Token 之前,先快速回顾大模型是怎么工作的:

1
用户输入文本 → Tokenizer 编码为数字 → 模型处理 → 预测下一个 Token → Tokenizer 解码为文字

大模型只认识数字,不认识文字。所以需要一个”翻译官”在文字和数字之间来回转换——这就是 Tokenizer(分词器)

而 Token,就是 Tokenizer 切分出来的最小文本片段


二、Token 的本质

2.1 Token ≠ 字 ≠ 词

Token 是大模型处理文本的最小基本单位,它既不等于”字”,也不等于”词”,而是介于两者之间的 亚词(subword)单元

2.2 分词示例

输入文本 分词结果 Token 数
Hello [Hello] 1
unbelievable [un] [believ] [able] 3
中国 [中国] 1(高频词)
工作坊 [工作] [坊] 2
人工智能 [人工] [智能] 2
程序员 [程序] [员] 2
[â] [ś] [ij] 3(特殊符号)

规律总结:

  • 高频词(如 “Hello”、”中国”)→ 通常 1 个 Token
  • 长词/罕见词(如 “unbelievable”)→ 被拆成多个 Token
  • 中文通常比英文”费”Token,因为汉字组合更多样

三、Tokenizer 的训练过程(BPE 算法)

为什么 Tokenizer 知道该怎么切分?因为它是从海量文本中训练出来的。目前最主流的训练算法是 BPE(Byte Pair Encoding,字节对编码)

3.1 BPE 算法核心思想

找规律,合并高频组合。

就像你读一本书,发现”人工”和”智能”总是成对出现,于是你把它们合并成一个词”人工智能”——BPE 算法做的就是这件事。

3.2 训练过程全演示

假设我们的训练语料只有一句话:人工智能改变人工生产

第 1 步:初始化 — 拆到最细

1
2
3
初始词表:[人, 工, 智, 能, 改, 变, 生, 产]

初始序列:人 工 智 能 改 变 人 工 生 产

第 2 步:统计相邻字符对频率

1
2
3
4
5
6
7
8
(人, 工) → 出现 2 次 ← 最高频!
(工, 智) → 出现 1 次
(智, 能) → 出现 1 次
(能, 改) → 出现 1 次
(改, 变) → 出现 1 次
(变, 人) → 出现 1 次
(工, 生) → 出现 1 次
(生, 产) → 出现 1 次

第 3 步:合并最高频的对

1
2
3
4
合并规则 #1:人 + 工 → 人工

新词表:[人, 工, 智, 能, 改, 变, 生, 产, 人工]
新序列:人工 智 能 改 变 人工 生 产

第 4 步:继续统计,继续合并

1
2
3
4
5
6
7
(人工, 智) → 1 次
(智, 能) → 1 次
(能, 改) → 1 次
(改, 变) → 1 次
(变, 人工) → 1 次
(人工, 生) → 1 次
(生, 产) → 1 次

所有频率相同,选第一个合并:

1
2
3
合并规则 #2:人工 + 智 → 人工智

新序列:人工智 能 改 变 人工 生 产

第 5 步:再合并

1
2
3
合并规则 #3:人工智 + 能 → 人工智能

新序列:人工智能 改 变 人工 生 产

训练产物(最终):

  • 词表{人:0, 工:1, 智:2, 能:3, 改:4, 变:5, 生:6, 产:7, 人工:8, 人工智:9, 人工智能:10}
  • 合并规则人+工→人工, 人工+智→人工智, 人工智+能→人工智能

3.3 关键特性

特性 说明
渐进合并 从字符级别开始,逐步合并成更大的 Token
频率驱动 出现越频繁的组合,越早被合并
词表可控 通过设定合并次数来控制词表大小(通常 3~10 万)
递归参与 新合并的 Token 还能继续参与后续合并

补充知识:不同模型使用不同的分词算法

模型/公司 分词算法
OpenAI (GPT 系列) BPE
Google (Gemini) Unigram / SentencePiece
Meta (LLaMA) BPE (Byte-Level)
Anthropic (Claude) BPE 变体

同一段文本,不同模型的 Tokenizer 切分结果可能不同,Token 数量也不同。


四、Tokenizer 的使用过程

训练完成后,Tokenizer 在实际使用中做两件事:编码解码

4.1 编码(文字 → 数字)

1
2
3
4
5
6
7
8
输入:"人工智能改变世界"

Step 1:拆到最细 → [人, 工, 智, 能, 改, 变, 世, 界]
Step 2:按合并规则合并 → [人工智能, 改, 变, 世, 界]
(如果"世界"也在词表中)→ [人工智能, 改变, 世界]
Step 3:查词表转 ID → [10, 45, 78]

最终输出:[10, 45, 78] ← 这才是模型看到的

4.2 解码(数字 → 文字)

1
2
3
4
5
6
模型输出:[10, 45, 78]

查词表反向映射:[人工智能, 改变, 世界]
拼接:人工智能改变世界

最终输出:"人工智能改变世界"

补充知识:Token ID ≠ 语义

Token ID 只是编号,不具备语义信息。真正赋予语义的是模型内部的 Embedding 向量——每个 Token ID 对应一个高维向量,向量之间的距离才反映语义关系。


五、Token 与字数的换算关系

这是最实用的部分——Context Window 限制的是 Token 数量,不是字数。

5.1 换算公式

文本类型 换算比例
中文 1 Token ≈ 1.5 ~ 2 个汉字
英文单词 1 Token ≈ 0.75 个英文单词
英文字母 1 Token ≈ 4 个英文字母
代码 1 字符 ≈ 0.25 Token

5.2 Context Window 真实容量

40 万 Token 窗口为例:

内容类型 可容纳量
中文文本 60 ~ 80 万汉字(约等于 2~3 本长篇小说)
英文文本 30 万单词(约等于 3~4 本英文小说)
代码 视语言和符号密度而定,通常比自然语言更费

5.3 什么内容更”费” Token?

省 Token 费 Token
常见词汇 生僻词 / 专业术语
规律性文本 乱码 / 混杂符号
高频短语 长路径 / Hash 值
自然语言 代码 / 日志 / JSON

实测工具推荐:

  • OpenAI Tokenizer — 在线可视化分词
  • Python tiktoken 库 — 编程计算 Token 数
1
2
3
4
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o")
tokens = enc.encode("人工智能改变世界")
print(f"Token 数: {len(tokens)}") # 输出实际 Token 数量

六、Token 的三大影响

6.1 成本控制

大模型 API 按 Token 计费,且输出 Token 比输入贵

模型 输入价格 (每百万 Token) 输出价格 (每百万 Token) 输出/输入倍数
GPT-4o $2.50 $10.00
Claude 3.5 Sonnet $3.00 $15.00
Gemini 1.5 Pro $1.25 $5.00
DeepSeek V3 ¥1.00 ¥4.00

Agent 场景注意: Agent 任务通常需要多轮调用(规划 → 工具调用 → 观察 → 再规划),Token 消耗是简单问答的 10~50 倍,成本控制至关重要。

6.2 Context Window 边界

超出 Context Window 的内容会被截断丢失,导致模型”看不见”关键信息。

1
2
3
4
5
6
7
8
9
10
Context Window = 128K Token

你的输入:
System Prompt: 2K Token
对话历史: 50K Token
工具列表: 5K Token
当前问题: 1K Token
─────────────────────
已用: 58K Token
剩余: 70K Token ← 模型的"可用记忆"

6.3 推理速度

生成的 Token 数量直接影响响应时间:

  • 每个 Token 都需要一次前向传播
  • 生成 100 Token 和 1000 Token 的时间差距约 10 倍
  • 这就是为什么”简洁回答”比”长篇大论”响应更快

补充知识:Lost in the Middle 效应

研究发现,当 Context 很长时,模型对开头和结尾的内容记忆最好,对中间部分容易”遗忘”。

实践建议:

  • 关键信息放在 Prompt 的开头结尾
  • System Prompt 不宜过长,避免挤占对话空间
  • 长文档使用 RAG 而不是全部塞入 Context

七、Prompt 优化本质上是 Token 优化

理解了 Token,你就理解了 Prompt 优化的底层逻辑:用最少的 Token 传递最多的有效信息。

7.1 优化策略

策略 说明 效果
精简表达 去除冗余词汇和重复说明 节省输入 Token
结构化格式 用表格/列表代替大段描述 信息密度更高
分步执行 复杂任务拆成多轮对话 避免单轮 Context 溢出
限制输出 明确要求”简洁回答”或限定字数 节省输出 Token(更贵!)
善用 RAG 只检索相关片段而非全文 大幅减少输入 Token

7.2 反面教材

1
2
3
4
5
6
7
8
❌ 糟糕的 Prompt(浪费 Token):
"你好啊,我想请你帮我一个忙,就是我最近在学习 Python 编程,
然后呢我遇到了一些问题,我不太清楚怎么解决,我想问一下你,
Python 中的列表和元组有什么区别?能不能详细地给我解释一下?
谢谢你了!"

✅ 高效的 Prompt(节省 Token):
"Python 中列表和元组的区别?列表回答。"

八、不同模型的 Tokenizer 差异

同一段文本,不同模型的 Token 数量可能相差很大:

1
2
3
4
5
6
文本:"人工智能正在改变世界"

GPT-4o (cl100k_base): 约 4~5 Token
Claude (custom BPE): 约 4~6 Token
Qwen (中文优化): 约 3~4 Token ← 中文更省
LLaMA (Byte-Level BPE): 约 6~8 Token ← 中文更费

选型建议: 如果主要处理中文内容,优先选择对中文分词优化的模型(如 Qwen、GLM),可以显著降低 Token 消耗和成本。


九、总结:关于 Token 的五个关键认知

# 认知 一句话
1 Token ≠ 字 它是亚词单元,由 Tokenizer 切分
2 Token 是计费单位 输入+输出分别计费,输出更贵
3 Token 决定 Context 边界 超限的内容模型看不见
4 Token 影响速度 生成越多 Token,响应越慢
5 Prompt 优化 = Token 优化 用最少 Token 传递最多有效信息

理解了 Token,你就掌握了大模型的”度量衡”——无论是评估成本、优化 Prompt、还是选择模型,Token 都是那把最基础的标尺。


参考资料