首页/AI/大模型部署与运维速查/token 计数:预算与截断的基准
推理参数与优化50 条

token 计数:预算与截断的基准

发送前按 token 数做预算:输入上限、输出预留与计费都按 token 计;用目标模型的 tokenizer 或服务端 /tokenize 接口实测,不要用字符数折算。

token 计数为什么重要

token 是按模型分词器切分后的最小单位,输入上限、输出预留与计费都按 token 计。中文、代码与英文的切分密度差别很大,用字符数折算必然偏差;因此发送前要用目标模型的 tokenizer 或服务端的 tokenize 接口实测,而不是估算。

基本信息

计数依据目标模型的分词器
本地工具transformers 的 AutoTokenizer
服务端接口推理引擎提供的 tokenize 接口
计入范围系统提示、聊天模板、工具描述
主要用途窗口预算、截断控制与计费

典型使用场景

  • 长文摘要前确认输入不会超窗口
  • 按 token 计费时做成本预估与对账
  • RAG 拼接上下文时控制注入内容量
  • 为输出预留长度,避免回答中途被截断
  • 多轮对话里累计历史长度,接近窗口时提前裁剪而不是等报错

本地计数

本地计数
from transformers import AutoTokenizer

tok = AutoTokenizer.from_pretrained("<模型目录>")   # 必须是目标模型的分词器
n = len(tok.encode("你的完整提示词"))
print(n)                          # 与服务端实际计费数对照一次,确认口径一致
m = len(tok.encode(rendered))     # rendered 是套用聊天模板后的完整文本

服务端接口

服务端接口
curl -s http://127.0.0.1:8000/tokenize -H 'Content-Type: application/json' \
  -d '{"model": "<模型名>", "prompt": "你好"}'

三种口径对比

口径特点注意
字符数算起来最省事中文与代码误差大
token 数与上限和计费一致需要目标模型的分词器
渲染后 token含模板与系统提示与实际上限对齐
聊天模板、系统提示与工具描述都会占 token:预算要按渲染后的完整输入计算,只算用户问题会明显低估。
同一段文本在不同模型上的 token 数可能差不少:切换模型后窗口上限与计费都要重新核算,别沿用旧数据。
本地计数与服务端计数对不上时,先确认两边用的是同一份分词器与同一段渲染后的文本,再查服务端是否额外拼了停止符等内容。

易错点

  • 按字符数估 token:中文、代码与英文切分密度差异大,误差可能数倍,直接导致截断或超窗
  • 用错分词器:拿别的模型的分词器计数,和实际上限对不上
  • 只算用户输入:忽略系统提示、工具描述与模板开销,预算偏低
  • 输出不设上限:长回答挤占窗口,出现中途截断或超出成本预期
  • 只在开发环境核对一次:上线换了模型或引擎后口径变化,计费与截断问题才暴露出来

数据来源与参考

  • vLLM 官方文档:OpenAI 兼容服务器(docs.vllm.ai)
  • Hugging Face Tokenizers 文档(huggingface.co/docs/tokenizers)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌