最后核验:2026-10-23

先看结论

  • token 是 OpenAI 模型处理文本的基本单位:一个 token 可能是一个字符、一个词的一部分、一个完整的词,也可能是标点;空格同样会影响文本如何被切分。
  • token 数不等于字数。 同一段文字,在不同模型、不同编码和不同语言下,token 数可能不同。
  • 英文可以按官方的粗略估算:1 token 约 4 个字符,约 0.75 个词;100 token 约 75 个词。 这只是估算,不是精确值;其他语言的字符、词和 token 之间的比例不同,中文不能直接套用。
  • 想知道精确数字,使用 Tokenizer 或 tiktoken,不要靠估算。

token 是怎么来的

向模型发送文本时,大致经过这几步(依据官方帮助中心的说明):

  1. 文本被切分成 token。
  2. 模型处理这些 token。
  3. 模型生成输出 token,其中包括你看到的回答;推理模型还会产生不显示为回答的内部推理 token。

不同模型使用不同的编码(encoding)。官方 tiktoken 示例列出了常见对应关系:

编码对应的模型示例
o200k_basegpt-4o、gpt-4o-mini
cl100k_basegpt-4-turbo、gpt-4、gpt-3.5-turbo、text-embedding-3-small、text-embedding-3-large

新模型使用的编码以官方文档为准;用 tiktoken.encoding_for_model(模型名) 可以自动选择。

输入、输出与推理 token

官方文档区分了几类 token,它们都与计费和上下文长度有关:

类别含义
输入 token请求里提供给模型的 token,也叫 prompt token
输出 token模型生成的 token;Chat Completions 里叫 completion token
缓存的输入 token通过提示缓存复用的输入 token,价格可能与未缓存的不同
推理 token推理模型在给出可见回答前内部使用的 token

推理 token 不显示为回答文本,但计入输出用量并按输出 token 计费。所以一段很短的可见回答,实际消耗的 token 可能比它显示出来的更多。

怎么计数

纯文本:Tokenizer 与 tiktoken

官方建议用 Tokenizer 查看文本如何被切分;需要在程序里计数时,用开源库 tiktoken:

import tiktoken

encoding = tiktoken.encoding_for_model("gpt-4o")
tokens = encoding.encode("tiktoken is great!")
print(len(tokens))

官方 Cookbook 给出的示例里,"tiktoken is great!" 用 o200k_base 编码是 6 个 token。

站内也提供了在线工具:Token 计算器,可粘贴文本查看切分结果。

完整的 API 请求

纯文本计数不一定包含一次 API 请求里的全部 token。消息结构、工具、结构化输出的 schema、图片和文件都会影响完整的输入 token 数。官方说明:对完整的 Responses 输入,使用输入 token 计数 API;它接受消息、图片、文件、工具和对话等格式,计数包含角色和消息边界等请求结构所用的 token。输入计数无法预测模型会生成多少输出 token。

常见误区

  • “一个 token 就是一个词。” 不对。词可以被拆成多个 token,标点和空格也会影响切分。
  • “中文一个字一个 token。” 没有固定比例,取决于模型的编码;需要预估成本时,用对应模型的 Tokenizer 实际测一遍。
  • “可见回答短,花费就少。” 对推理模型不成立,推理 token 也按输出计费。
  • “估算够用了。” 在做预算或接近上下文上限时,请用精确计数。

本文删掉了什么

本文初版(2023-07)里关于 token 编码的分步描述含有不严谨的说法(例如“模型独立地处理每个 token”,与 Transformer 实际的注意力机制不符),也用了未经核对的切分示例,已经移除。以下以官方文档为准。

官方来源

核验日期:2026-10-23。

相关阅读


WeAPI 企业模型调用入口,统一管理 Key、用量、日志、额度和团队权限 WeAPI 企业模型调用入口