最后核验:2026-10-23
先看结论
- token 是 OpenAI 模型处理文本的基本单位:一个 token 可能是一个字符、一个词的一部分、一个完整的词,也可能是标点;空格同样会影响文本如何被切分。
- token 数不等于字数。 同一段文字,在不同模型、不同编码和不同语言下,token 数可能不同。
- 英文可以按官方的粗略估算:1 token 约 4 个字符,约 0.75 个词;100 token 约 75 个词。 这只是估算,不是精确值;其他语言的字符、词和 token 之间的比例不同,中文不能直接套用。
- 想知道精确数字,使用 Tokenizer 或
tiktoken,不要靠估算。
token 是怎么来的
向模型发送文本时,大致经过这几步(依据官方帮助中心的说明):
- 文本被切分成 token。
- 模型处理这些 token。
- 模型生成输出 token,其中包括你看到的回答;推理模型还会产生不显示为回答的内部推理 token。
不同模型使用不同的编码(encoding)。官方 tiktoken 示例列出了常见对应关系:
| 编码 | 对应的模型示例 |
|---|---|
o200k_base | gpt-4o、gpt-4o-mini |
cl100k_base | gpt-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 实际的注意力机制不符),也用了未经核对的切分示例,已经移除。以下以官方文档为准。
官方来源
- Understanding and counting tokens(OpenAI 帮助中心)
- How to count tokens with tiktoken(OpenAI Cookbook)
- tiktoken(GitHub)
核验日期:2026-10-23。
相关阅读
- OpenAI 产品与模型停用时间表:已排期下线的模型与替代