Token 是模型读写的原子单位。它的大小大致接近一个单词,但并不完全等同:常见单词可能只占一个 Token,罕见或较长的单词则会被拆成多个 Token。上下文窗口大小、成本和延迟都以 Token 计量。
文本通过分词器转换为 Token。分词器拥有一个固定词表,其中包含数万个在训练前学得的文本片段;它会把任何输入拆成一串词表条目。模型从来看不到字符或单词——所有文本在输入时都会转换成 Token,而下一 Token 预测则在输出时逐个生成 Token。
按经验估算,一个 Token 大约相当于四分之三个英文单词,因此 1000 个 Token 约等于 750 个英文单词。代码的情况更难预测:常见关键字和惯用写法通常能被紧凑编码,而自动生成的标识符、哈希、base64 数据块和压缩后的输出,一个“单词”可能会拆成许多 Token。规律是:在分词器训练材料中经常出现的文本会得到短而高效的编码;不常出现的文本则会被切成许多小片段。像 a3f9c2e1 这样的哈希几乎不可能完整出现过,所以会拆成多个 Token,而 function 通常只占一个。这就是为什么一个看起来很小、却充满异常字符串的文件,可能占用出乎意料多的上下文窗口。
Token 是衡量其他指标的基础单位。成本按 Token 计算——提供商分别对输入 Token和输出 Token计费。速度以每秒 Token 数衡量,因为输出是逐个 Token 生成的。上下文窗口也由固定数量的 Token 构成,所以文件的 Token 数决定了能装入多少内容。
避免:用“单词”代替 Token——Token 边界与单词边界并不一致,真正有意义的单位是每秒 Token 数和每美元 Token 数。
用法:
“这个提示词会有多大?”
“用分词器跑一下——这个 schema 很紧凑,但 JSON 键名比较特殊,所以会拆成比你预想更多的 Token。”