Token
模型读写时的最小单位。大致相当于一个词,但不完全等同——常见词是一个 Token,罕见或长词会被拆成多个。上下文窗口大小、成本和延迟都用 Token 计量。
文本通过 tokenizer 变成 Token:一个包含数万个片段的固定词表,在训练前学习得到,能把任意输入拆成词表项的序列。模型从不直接看到字符或词——所有文本在输入时都被转换成 Token,而 下一个 Token 预测 在输出时逐个 Token 生成。
粗略估计,一个 Token 约等于四分之三个英文单词,所以一千 Token 大约七百五十词。代码更不可预测:常见关键字和惯用语法会被紧凑地切分,而生成的标识符、哈希、base64 块和压缩过的输出则会按每个词拆成多个 Token。规律是:在 tokenizer 训练材料中出现频率高的文本会得到短而高效的编码;出现频率低的文本会被切成许多小片。像 a3f9c2e1 这样的哈希从未在训练材料中出现过,所以会被拆成多个 Token,而 function 是一个。这就是为什么一个看起来很小、但充满非常规字符串的文件,可能占据惊人的上下文窗口份额。
Token 是其他一切事物的计量单位。成本按 Token 计算——提供商分别对输入 Token 和输出 Token 计费。速度是每秒 Token 数,因为输出逐个 Token 生成。上下文窗口有固定的 Token 上限,所以你的文件占多少 Token 决定了能塞进多少。
避免:使用 word——Token 边界与词边界不一致,而 Token-per-second / Token-per-dollar 才是真正重要的单位。
用法:
“这个 Prompt 大概有多大?”
“用 tokenizer 跑一下——schema 很紧凑,但 JSON key 比较奇怪,所以它们会占用的 Token 比你想象的多。”