什么是 Token?
Token 是 OpenAI 模型处理文本时所用的基本单元。根据语言和上下文,它们可以短至单个字符,也可以长至一个完整单词。空格、标点符号和单词片段都会计入 Token 数量。API 在生成响应前,会以这种方式在内部切分您的文本。
关于英语 Token 数量的实用估算规则:
1 个 Token ≈ 4 个字符
1 个 Token ≈ ¾ 个单词
100 个 Token ≈ 75 个单词
1–2 个句子 ≈ 30 个 Token
1 个段落 ≈ 100 个 Token
约 1,500 个单词 ≈ 2,048 个 Token
Token 化处理会因模型和编码方式而异。使用 Token 化工具或 tiktoken.encoding_for_model(model),即可获得目标模型的准确 Token 数量。
示例
以下是一些真实文本示例及其大致 Token 数量:
Wayne Gretzky 的名言“你没投出的球,命中率是 0%”= 11 个 Token
《OpenAI 宪章》= 476 个 Token
《美国独立宣言》= 1,695 个 Token
Token 数量的计算方式
向 API 发送文本时:
文本会被拆分为 Token。
模型会处理这些 Token。
响应会以 Token 序列的形式生成,然后再转换回文本。
Token 用量分为以下几类:
输入 Token – 请求中的 Token。
输出 Token – 响应中生成的 Token。
缓存 Token – 对话历史中重复使用的 Token(通常按较低费率计费)。
推理 Token – 某些高级模型在生成最终输出前,会在内部加入额外的“思考步骤”。
这些数量会显示在 API 响应的元数据中,用于计费和用量跟踪。
要进一步探索 Token 化处理,可以使用我们的交互式Token 化工具,计算 Token 数量并查看文本如何被拆分为 Token。
或者,如果想通过编程方式对文本进行 Token 化,可以使用 Tiktoken。它是一款专为 OpenAI 模型使用的高速 BPE Token 化工具。
Token 限制
每个模型都有输入与输出合计后的最大 Token 数量限制。当前的大容量模型支持在上下文中容纳多达数十万个 Token,但实际限制可能因模型版本和您的用量层级而异。
如果超出限制,可以:
缩短或改写提示词。
将大段文本拆分成较小的块。
发送前对输入进行摘要或预处理。
Token 定价
API 用量按 Token 计费,费率因模型以及 Token 属于输入、输出还是缓存而异。当前费率请参阅 OpenAI 的定价页面。某些推理模型可能会在内部使用更多 Token,但其目标是通过减少完成每项任务所需的 Token 数量来提升效率。
探索 Token
API 会根据单词在语料数据中的上下文来处理它们。模型接收提示词后,会将输入转换为 Token 列表并处理提示词,再将预测出的 Token 转换回我们在响应中看到的文字。
在我们看来完全相同的两个单词,可能会因其在文本中的结构不同而被转换为不同的 Token。请看 API 如何根据单词“red”在文本中的上下文生成 Token 值:
在上面的第一个示例中,“ red”对应的 Token“2266”包含一个尾随空格(注意,这些 Token ID 仅为演示用的示例)。
“ Red”(前面有空格且首字母大写)对应的 Token“2296”,与小写“ red”对应的 Token“2266”不同。
当“Red”出现在句首时,生成的 Token 不包含前导空格。Token“7738”与前两个单词示例不同。
观察结果:
Token 出现的概率越高、频率越高,分配给它的编号就越小:
3 个句子中的句点所生成的 Token 均相同(“13”)。这是因为从上下文来看,句点在整个语料数据中的用法十分相似。
“red”生成的 Token 会因其在句中的位置而异:
句子中间的小写形式:“ red” -(Token:“2266”)
句子中间的大写形式:“ Red” -(Token:“2297”)
句子开头的大写形式:“Red” -(Token:“7738”)
