什么是 Token?
模型看到的不是“字数”或“词数”
当我们把一段文字发送给大语言模型时,系统会先使用与目标模型对应的 tokenizer,把文本转换成一串 Token。模型处理这些 Token,并生成新的输出 Token,最后再把它们转换成我们看到的文字。
一个 Token 可能是:
- 一个完整的词;
- 一个词的一部分;
- 一个汉字或字符的一部分;
- 空格与文字的组合;
- 标点符号或其他字节序列。
因此,Token 数量不等于字符数,也不等于单词数。
“把句子切成积木”可以帮助入门,但它只是一种类比。模型的 tokenizer 按编码规则处理文本,不等于人类在大脑中划分词语或进行思考。
同一段文字为什么会被切成不同数量?
Token 的划分取决于具体模型及其编码。大小写、空格、语言、标点和生僻字符,都可能改变切分结果。
例如,下面两段文字在人看来意思接近:
I love prompt engineering.
我喜欢提示工程。它们分别会产生多少 Token,不能只根据字数推断。即使文字完全相同,换用不同模型或编码,数量和 Token ID 也可能变化。
过去某个 tokenizer 截图中显示的切分结果,只能说明当时所选编码的结果,不能当成所有 GPT 模型或所有大语言模型的固定规则。
Token ID 是什么?
Tokenizer 会把每个 Token 映射为词表中的一个整数标识,这个数字就是 Token ID。
文本:你好
Token:[你][好]
Token ID:[示例 ID 1][示例 ID 2]Token ID 只是编码中的标识,不是词语的重要程度、事实可信度或模型信心。换一个编码,同一段文字的 Token ID 可能完全不同。
为什么使用者需要了解 Token?
1. 上下文有容量限制
模型一次能够处理的输入、对话历史、工具描述和输出都占用 Token。具体上限依产品、模型和接口而不同,应查阅所用产品的当前说明。
如果材料过长,可以先删除重复信息、只提供与任务有关的部分,或者把任务拆成多个可独立验证的步骤。
2. 输出长度也受 Token 影响
要求“写 500 个汉字”和限制“最多生成多少 Token”不是同一个概念。Token 不能精确对应中文字符数;如果业务必须满足严格字数,应该在模型生成后用程序或编辑流程再次检查。
3. API 用量通常按 Token 统计
许多模型接口会分别记录输入 Token、输出 Token,以及某些接口中的缓存或推理 Token。计费方式、字段和支持情况会变化,应以具体服务的官方文档为准。
怎样查看准确的 Token 数量?
不要套用“一个汉字等于几个 Token”的固定公式。需要准确结果时:
- 先确定实际要调用的模型;
- 使用该服务为目标模型提供的 tokenizer 或计数接口;
- 对完整请求计数,因为消息角色、工具、Schema、文件等也可能占用输入;
- 请求完成后,以接口返回的实际 usage 数据为准。
OpenAI 用户可以使用 Tokenizer (opens in a new tab) 观察文本切分;开发者也可以按照目标模型选择对应编码。其他服务应使用各自的官方工具和文档。
不要因为一种语言在某个旧模型中 Token 较多,就断言它在所有模型中都更低效。Token 划分会随模型、编码和文本变化,实际任务应实际测量。
本章小结
- Token 是模型处理输入和生成输出所使用的单位;
- Token 不等于字、词或字符;
- 切分方式和 Token ID 依模型与编码而变化;
- 上下文、输出长度和 API 用量都会受到 Token 数量影响;
- 需要准确数字时,应使用目标模型对应的官方工具,而不是依赖旧截图或固定换算。
下一章会继续说明:模型有了 Token 以后,怎样根据上下文生成下一个 Token,以及 temperature 为什么会影响输出的多样性。
