什么是 Token?
Token 是 OpenAI 模型处理文本的基本构件。它们可以短至单个字符,也可以长至完整单词,具体取决于语言和上下文。空格、标点符号和词的一部分都会计入 Token 数量。这就是 API 在生成响应前在内部对文本进行分段的方式。
关于英语的一些实用经验法则:
1 个 Token ≈ 4 个字符
1 个 Token ≈ ¾ 个单词
100 个 Token ≈ 75 个单词
1–2 个句子 ≈ 30 个 Token
1 个段落 ≈ 100 个 Token
约 1,500 个单词 ≈ 2,048 个 Token
Token 化处理会因模型和编码而异。使用 Tokenizer 工具或 tiktoken.encoding_for_model(model),即可获得目标模型的确切计数。
示例
以下是一些真实文本示例及其大致 Token 数量:
韦恩·格雷茨基的名言“你不出手,就会 100% 错失投篮机会”= 11 个 Token
《OpenAI Charter》= 476 个 Token
《美国独立宣言》= 1,695 个 Token
Token 数量是如何计算的
当你向 API 发送文本时:
文本会被拆分为 Token。
模型会处理这些 Token。
响应会作为一串 Token 生成,然后再转换回文本。
Token 用量会按几个类别进行跟踪:
输入 Token – 请求中的 Token。
输出 Token – 响应中生成的 Token。
缓存 Token – 对话历史中重复使用的 Token(通常按较低费率计费)。
推理 Token – 在一些高级模型中,生成最终输出前会在内部包含额外的“思考步骤”。
这些计数会出现在你的 API 响应元数据中,并用于计费和用量跟踪。
如需进一步了解 Token 化处理,你可以使用我们的交互式 Tokenizer 工具,它可以计算 Token 数量,并查看文本如何被拆分为 Token。
或者,如果你想以编程方式对文本进行 Token 化,可以使用 Tiktoken,这是专为 OpenAI 模型使用的快速 BPE Tokenizer。
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。
观察结果:
一个 Token 越可能出现/越频繁,分配给它的 Token 编号就越低:
句点生成的 Token 在 3 个句子中都相同(“13”)。这是因为从上下文来看,句点在整个语料数据中的用法相当相似。
为“red”生成的 Token 会因其在句子中的位置而异:
句子中间的小写形式:“ red” -(Token:“2266”)
句子中间的大写形式:“ Red” -(Token:“2297”)
句首的大写形式:“Red” -(Token:“7738”)
