
Token 到底是什么?一文看懂大模型的「最小计量单位」
先说结论
你跟大模型的每一次交互,模型都不是按「字」或「词」处理的,而是按 token。它是最小的处理单位,也是几乎所有大模型计费、上下文上限、输出长度的统一计量单位。
我一开始也搞不懂,明明输入的是中文,怎么就变成一堆数字了?后来发现,只要把 token 这一层搞明白,很多问题会瞬间通透:为什么长文档会超限、为什么图片输入也收费、为什么输出总被「截断」。
这篇文章,我们把这件事彻底讲清楚。
一、Token 到底是什么
简单说:token 是文本被切分后的最小片段。
大模型不能直接读文字,它只认数字。所以输入的文字会先经过一个叫 tokenizer(分词器) 的部件,被切成一个个 token,再每个 token 映射成一个编号(token id),模型真正处理的就是这些编号。
你可以把 tokenizer 理解成「文字 → 编号」的翻译官:
你输入的文本 → tokenizer 切分 → token 序列 → 编号 → 模型处理
一个 token 可能是:
- 一个完整的英文单词,比如
hello - 一个单词的一部分,比如
learning可能被切成learn+ing - 一个中文汉字(有时是两个字合一个 token)
- 一个标点、空格或符号
二、Token 和「字数」是什么关系
这是初学者最容易踩的坑:token 数不等于字数。
我整理了一个粗略的对应关系(不同模型、不同语言差异很大,仅作估算参考,精确数值以各模型官方说明为准):
| 文本类型 | 粗略换算经验 | 说明 |
|---|---|---|
| 英文 | 1 个 token ≈ 4 个字符 ≈ 0.75 个单词 | 英文对 tokenizer 最友好 |
| 中文 | 1 个汉字 ≈ 1~2 个 token | 中文消耗明显高于英文 |
| 代码 | 差异大,缩进和符号都会占 token | 空格缩进也计费 |
| 空白与标点 | 同样占 token | 别以为空格不要钱 |
要点:同样的内容,中文的 token 消耗通常是英文的 2~3 倍。 我自己在处理长文档时,如果内容量大,会先意识到这一点,再去规划怎么拆分。
三、为什么要搞懂 Token(三个直接原因)
1. 它直接决定你的花费
几乎所有按量计费的 API,都是按「输入 token 数 + 输出 token 数」分开计价的。单价和具体金额各平台不同,以官方定价页为准,但规律是通用的:
你的成本 ≈ 输入 token 数 × 输入单价 + 输出 token 数 × 输出单价
注意两点:
- 输出单价通常高于输入,所以让模型「少废话、直接给结果」是省钱的关键。
- 提示词写得越冗长、历史对话堆得越多,每次请求的输入 token 就越多,重复付费。
2. 它决定你的上下文上限
模型有一个 上下文窗口(context window),单位就是 token。它同时装得下:你的历史对话 + 你的新输入 + 模型的输出。
举个直观的例子:
| 上下文窗口 | 大约能装多少中文 | 体感 |
|---|---|---|
| 较小窗口 | 约几千~一两万 token | 几篇文章就满了 |
| 超大窗口 | 可达几十万甚至上百万 token | 能塞下整本书(以官方为准) |
一旦接近上限,常见的表现是:开头内容被遗忘、被压缩,或者直接报错提示超限。
3. 它决定你的输出上限
上下文窗口是「总容量」:
剩余可用空间 = 上下文上限 − 输入 token − 已生成的输出 token
所以当你输入特别长时,能生成的输出就变短。很多人遇到「模型写到一半就不写了」,十有八九是这个原因,而不是模型「偷懒」。
四、动手数一数:免费的 Token 计数方法
方法一:用官方 Tokenizer 工具(推荐零基础)
主流厂商都提供在线的 token 计数或试玩页面,在搜索引擎搜「tokenizer + 模型名」就能找到,直接把文本粘进去就能看到切分结果。不同模型用的 tokenizer 不一样,数出来的结果也不同,这一点很重要。
方法二:用代码自己数
如果你想批量估算文档消耗,可以用开源的分词库。以 OpenAI 系列模型常用的编码为例(注意:不同模型可能使用不同编码,以官方文档为准):
# 先安装:pip install tiktoken
import tiktoken
# 以某编码为例,其他模型请查阅官方文档确认
enc = tiktoken.get_encoding("cl100k_base")
text = "你好,AI学习笔记!Hello world."
tokens = enc.encode(text)
print("token 数量:", len(tokens))
print("token 编号:", tokens)
print("逐个拆解:", [enc.decode([t]) for t in tokens])
跑一下你会发现:中文字符被切得比英文碎得多。这就是「同样内容,中文更贵」的底层原因。
方法三:快速估算法(心算)
没工具在手时,用这个粗糙公式先估个量级:
英文:token 数 ≈ 字符数 ÷ 4
中文:token 数 ≈ 字数 × 1.5(取 1~2 之间)
估算结果只用来判断「够不够用」,别拿去做精确计费预测。
五、六个省 Token 的实用技巧
这些是我自己反复验证有效的方法,零基础也能立刻用:
- 删掉客套话。「请帮我」「作为一个AI」这类话不写,模型照样干活,结果不会变差。
- 明确输出格式。直接说「用表格输出」「只给代码」,避免模型先铺垫一大段解释。
- 别把整个文件都贴进去。先自己摘出关键段落,或者让模型分块处理。
- 控制对话轮数。超长对话记得开新会话,或者用平台的「清除上下文」功能。
- 输出方向尽量用英文。如果你不介意,英文输出的 token 更少、成本更低。
- 分批处理大文本。一篇长文拆成几段分别处理,既避免超限,也方便检查结果。
六、一张表总结:Token 相关的三个关键量
| 概念 | 含义 | 和 token 的关系 |
|---|---|---|
| 输入 token | 你发给模型的内容 | 按次计费,影响花费 |
| 输出 token | 模型生成的内容 | 单价更高,影响花费与速度 |
| 上下文窗口 | 单次能处理的总容量 | 输入加输出都不能超过它 |
记住一条主线就够了:一切以 token 计量,一切受窗口约束。
最后的建议
你不需要精通分词算法(比如 BPE 到底怎么合并词块),但一定要建立「token 直觉」:看到一段文本,能大致判断它值多少 token、会不会超限、成本高不高。
这个直觉不用背,就是用一次数一次。拿你手头的真实文档去 tokenizer 工具里跑几遍,两三天你就有了。