大模型Token计算教程:从文本到计费的完整换算方法
大模型按Token计费,但Token不是字也不是词。
一个中文汉字通常对应1到2个Token,英文单词可能被拆成多个Token。
要估算费用或判断是否超出上下文长度,需要掌握Token与实际文本的换算方法。
下面从概念、手动估算、API查询和脚本统计四个层面展开,适合刚接触大模型API的读者。
先理解Token和字符的对应关系
Token是模型处理文本的最小单位。
主流模型使用BPE(字节对编码)或类似算法,把常见词保留为一个Token,生僻词拆成多个。
不同厂商的 tokenizer 不同,同一段文本的Token数可能有差异。
粗略换算参考:
- 英文:1个Token约等于4个字符,或0.75个单词。
- 中文:1个汉字约等于1到2个Token,常用词可能更少。
- 代码和符号:空格、换行、标点通常单独占Token,缩进多的代码Token数偏高。
这个比例只用于快速心算,精确值必须用对应模型的 tokenizer 计算。
方法一:通过API响应中的usage字段获取精确值
调用大模型API时,响应体通常包含 usage 字段,直接给出输入和输出Token数。
以OpenAI兼容接口为例,返回结构类似:
{
"usage": {
"prompt_tokens": 128,
"completion_tokens": 56,
"total_tokens": 184
}
}
拿到 prompt_tokens 和 completion_tokens 后,乘以对应模型的单价即可估算单次请求费用。
注意:流式响应(stream)默认可能不返回usage,需要显式开启 include_usage 参数或在请求末尾收集完整响应。
方法二:用tiktoken库在本地统计
tiktoken 是OpenAI开源的Token计数库,适合在发送请求前预估长度。
安装:
pip install tiktoken
对GPT系列模型,可以这样统计:
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o")
text = "大模型Token计算教程"
tokens = enc.encode(text)
print(len(tokens))
如果模型名称不确定,可以用 tiktoken.get_encoding("cl100k_base") 作为通用编码。
需要说明的是,tiktoken 只对OpenAI系模型准确,其他厂商模型应使用其官方提供的 tokenizer 或在线计数工具。
避坑指南:上下文长度和计费容易算错的地方
- 上下文长度按输入加输出总和计算:很多模型限制的是 prompt_tokens 与 completion_tokens 之和,不能只看输入。
- 系统提示和对话历史都计入输入:多轮对话时,每轮都会带上历史消息,Token会累积增长。
- 流式输出可能不返回usage:如果依赖usage做计费统计,需确认接口文档是否支持返回用量。
- 不同模型tokenizer不同:用A模型的计数结果去估算B模型费用,误差可能较大。
- 缓存和批量接口计费规则不同:部分厂商对缓存命中或批量请求有折扣,实际费用以账单为准。
验证计算结果是否合理
发送一次短请求,记录本地统计的Token数和API返回的 usage 字段,对比两者是否接近。
如果差异超过10%,检查是否选错编码或漏算系统提示。
对于长文档,可以分段统计后求和,再与平台账单核对。
常见疑问
中文一个字到底算几个Token? 没有固定值。
常用汉字和词语可能1个Token,生僻字或组合可能2个以上。
用目标模型的tokenizer实测最可靠。
没有编程基础怎么估算? 可以用厂商控制台提供的Token计算器,或按“中文1字约1.5 Token、英文4字符约1 Token”做粗略预算,最终以实际账单为准。
为什么本地统计和账单对不上? 常见原因是模型版本不同、对话历史重复计入、或平台对系统提示有额外计费规则。
建议以API返回的usage和账单明细为准。
掌握Token计算后,控制上下文长度和预估成本会更有依据。
建议在正式调用前先用脚本或控制台估算,再根据实际usage调整提示词和分段策略。