概述
Token 是 OpenAI 模型处理文本时使用的基本单位。一个 Token 可以表示一个字符、单词的一部分、一个完整单词或标点符号。空格也会影响文本如何拆分为 Token。
Token 数并不等同于单词数。同一文本可能因模型、编码和语言不同而产生不同的 Token 数。
了解文本如何转化为 Token
向模型发送文本时:
文本会被拆分为 Token。
模型会处理这些 Token。
模型会生成输出 Token。这些 Token 可能包括你收到的文本;对于推理模型,还包括不会显示为答案文本的内部推理 Token。
粗略估算英文文本
以下估算可帮助你判断英文文本的大小:
1 个 Token 约等于 4 个字符。
1 个 Token 约等于四分之三个单词。
100 个 Token 约等于 75 个单词。
这些只是估算值,并非精确计数。句子和段落的长度各不相同;在其他语言中,字符、单词和 Token 之间的对应关系也可能不同。
考虑空格和大小写
一个单词可能因拼写、大小写和上下文不同而被拆分成不同的 Token。
例如,red、Red 和 red 的文本并不完全相同:最后一个示例含有一个前导空格。同一种编码可能会以不同方式表示它们。
Token ID 也取决于编码。不要假定示例 Token ID 适用于所有模型。
区分输入与输出 Token
| 类别 | 说明 |
| 输入 Token | 请求中提供给模型的 Token。也称为提示词 Token。 |
| 输出 Token | 模型生成的 Token。Chat Completions 将其称为补全 Token。 |
| 缓存输入 Token | 通过提示词缓存重复使用的输入 Token。其价格可能与未缓存的输入 Token 不同。 |
| 推理 Token | 推理模型在生成可见答案前内部使用的 Token。 |
推理 Token 不会显示为答案文本,但会计入输出用量,并按输出 Token 计费。
因此,即使可见答案很短,实际使用的 Token 也可能多于显示文本所体现的数量。
发送请求前计算 Token 数
计算纯文本 Token
使用 Tokenizer 查看文本如何拆分为 Token。
若要通过编程方式对纯文本进行 Token 化处理,请使用 tiktoken。请选择适用于目标模型的编码,例如使用 tiktoken.encoding_for_model(model)。
纯文本 Token 数不一定涵盖 API 请求中的所有 Token。消息结构、工具、架构、图像和文件都会影响完整的输入 Token 数。
计算完整 Responses 输入的 Token 数
若要计算完整 Responses API 输入的 Token 数,请使用输入 Token 计数 API。
它接受 Responses 输入格式,包括消息、图像、文件、工具和对话。其计数包括用于请求结构的格式化 Token,例如消息角色和边界。
输入 Token 数无法预测模型会生成多少输出 Token。
查看实际 Token 用量
请求完成后,查看其用量信息。字段名称因端点而异:
Chat Completions 会报告 prompt_tokens、completion_tokens 和 total_tokens。
Responses 会报告 input_tokens、output_tokens 和 total_tokens。
你还可以在用量控制面板中查看一段时间内的活动。有关流式传输用量等说明,请参阅:查看 API 用量和成本。
遵守模型限制
请查阅模型文档,了解其上下文窗口和最大输出限制。这些限制可能因模型而异。
上下文窗口限制了模型在单个请求中可以处理的 Token 数。模型还有输出限制。对于推理模型,除了可见答案外,还应为推理 Token 预留空间。
如果输入过大,你可以:
缩短或改写提示词。
删除不必要或重复的上下文。
将大段输入拆分成较小的部分。
发送前先总结或预处理文本。
使用端点和模型所支持的输出 Token 设置。Chat Completions 使用 max_completion_tokens;Responses 使用 max_output_tokens。
这些请求大小限制与 API 速率限制以及每月用量或支出限制相互独立。请查阅你所用模型的模型文档。
了解 Token 定价
对于按 Token 计费的 API,费率取决于模型和 Token 类别。输入、缓存输入和输出 Token 的价格可能不同。其他 API 功能可能采用不同的计费单位。
请在 API 定价页面查看当前费率。
比较模型时,请考虑完成任务所需的 Token 总数和总成本。每百万 Token 的价格较低并不一定意味着总成本更低:不同模型对同一文本进行 Token 化处理的方式可能不同,生成的输出量或推理量也可能不同。
请测试有代表性的任务,不要只比较可见回复的长度。
考虑多个补全结果
如果端点和模型支持生成多个补全结果,额外的补全结果也会消耗 Token。
对于 Chat Completions,将 n 设为大于 1 会生成多个选项。这些选项中生成的 Token 都会计费。
对于旧版 Completions API,best_of 可以生成未全部返回的候选结果。例如,best_of = 3 最多可在所有候选结果中生成 3 × max_tokens 个补全 Token。
这些参数仅适用于特定端点。不要假定其他 API 或模型支持 n 或 best_of。
