OpenAI
页面内容为机器翻译。查看英文原文

什么是 Token,如何计算 Token?

更新于:19 hours ago

什么是 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 发送文本时:

  1. 文本会被拆分为 Token。

  2. 模型会处理这些 Token。

  3. 响应会以 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 值:

Sentence split into color-coded tokens with Text selected over Token IDs
Token ID output as a list of integers with the Token IDs tab selected

在上面的第一个示例中,“ red”对应的 Token“2266”包含一个尾随空格(注意,这些 Token ID 仅为演示用的示例)。

Sentence split into color-coded token blocks: My favorite color is Red.
Tokenizer output with Token IDs selected and a list of numeric token IDs

“ Red”(前面有空格且首字母大写)对应的 Token“2296”,与小写“ red”对应的 Token“2266”不同。

Tokenizer example splitting “Red is my favorite color.” into color-coded tokens
Tokenizer output with Token IDs selected and a list of token ID numbers

当“Red”出现在句首时,生成的 Token 不包含前导空格。Token“7738”与前两个单词示例不同。

观察结果:

Token 出现的概率越高、频率越高,分配给它的编号就越小:

  • 3 个句子中的句点所生成的 Token 均相同(“13”)。这是因为从上下文来看,句点在整个语料数据中的用法十分相似。

  • “red”生成的 Token 会因其在句中的位置而异:

    • 句子中间的小写形式:“ red” -(Token:“2266”)

    • 句子中间的大写形式:“ Red” -(Token:“2297”)

    • 句子开头的大写形式:“Red” -(Token:“7738”)

这篇文章对你有帮助吗?