Token 是什么?如何计算和控制 Token 数量?
- 标签:Prompt、Token
🏛 业务架构师
Token 是模型处理文本的最小单位,中文一个汉字约 0.6~1.5 token(多数模型 1 汉字≈1 token 或略少),英文一个单词约 1.3 token,代码与特殊符号更"贵"。模型按 token 读写:上下文窗口、计费、限流全以 token 计。
如何计算:
- 精确计算:用模型配套的分词器(tiktoken 对 OpenAI 系、各家模型的 tokenizer API/Hugging Face tokenizer)——
len(encoding.encode(text))一行出结果;LangChain 的get_num_tokens_from_messages可算整条消息; - 粗略估算:中文按"字数≈token 数"上浮 10%,英文按"单词数×1.3"——报价和预算场景够用;
- 注意"隐形 token":完整请求 = 系统提示 + 历史消息 + 工具定义 + 用户输入 + 模型输出——只算用户输入会严重低估;图片按分辨率折算(一张高清图数千 token)。
如何控制(成本工程四板斧):
- 源头精简:提示词瘦身(删废话指令、压缩示例)、检索内容只送相关段落、历史裁剪/摘要;
- 输出限制:输出 token 单价是输入的 3~10 倍——限定输出长度、要求要点式作答,是省钱第一杠杆;
- 缓存复用:Prompt Caching(稳定前缀)+ 语义缓存(高频问答);
- 模型路由:简单请求走小模型(成本差 10~30 倍),复杂任务才上旗舰。
业务管理建议:把 token 成本做成可观测指标(每次调用记录输入/输出 token 与费用,按功能线分账)——"看不见的成本"迟早变成"月底的惊吓",这是 AI 产品经理和架构师的基本功。
🏗 系统架构师
Token 是模型处理文本的最小单元(BPE 子词切分),计量、计费、窗口限制全以它为准。计算与控制方法:
如何计算:
- 精确:用官方 tokenizer(tiktoken / transformers tokenizer)——
len(encoding.encode(text));服务化场景本地部署 tokenizer 服务(同模型必须同 tokenizer,估算用近似公式会出错); - 速算:中文 1 字 ≈ 0.6~1 token(新 tokenizer 压缩更好);英文 1 词 ≈ 1.3 token;代码更碎(缩进、符号都算)——做预算可以速算,做扣费必须精确。
如何控制(分层治理):
- 输入侧:历史裁剪(滑动窗口 + 滚动摘要)、检索内容配额(Top-K × chunk 长度上限)、System Prompt 瘦身(规则条目化、示例最小化);
- 输出侧:
max_tokens硬上限(成本保险丝,必设);Prompt 明确量化长度("200 字以内");结构化输出天然控长; - 会话侧:每轮记录上下文 token 数,超水位(如 80%)触发压缩——上下文预算管理是 LLM 应用的内存管理;
- 计费侧:请求前后读 usage 字段(prompt/completion tokens)入账——按用户/功能维度的成本分摊;超配额限流(用户级 token 闸门)。
架构师账本:单次成本 = (输入 token × 输入单价) + (输出 token × 输出单价 × 3~5 倍价差) + 思考 token(推理模型)——输出和思考是成本大头,控制优先级:max_tokens > 输出格式 > 输入压缩 > 缓存。容量规划:日均调用 × 平均 token → 月成本 → 峰值 QPS × 并发 token 决定推理集群规模。
💻 全栈开发专家
Token 是什么:模型处理文本的最小单位(BPE 分词的产物),模型的一切计价、上下文限制、生成速度都以 token 计。经验换算:英文 1 token≈4 字符或 0.75 词;中文 1 字≈0.6~1.5 token(模型而异,现代中文优化模型 1 字≈0.6~0.7 token)。
怎么计算:
python
import tiktoken
enc = tiktoken.get_encoding("o200k_base") # 按模型选编码
n = len(enc.encode("你好,world")) # 精确计数各厂商 API 响应里直接带 usage 字段(prompt_tokens/completion_tokens)——线上以这个为准对账。
怎么控制(工程手段):
- 入口预算检查:组装 prompt 前算长度,超预算先裁剪/摘要再调用(防 API 报错);
- 历史控制:对话滚动摘要、trim_messages 保最近 N 轮;
- 工具结果瘦身:大 JSON 裁字段、分页、落盘引用——Agent 场景最大头;
- 输出限制:max_tokens 封顶、prompt 里约束长度(「不超过 3 条」);
- 缓存:语义缓存(重复问题)、前缀缓存(稳定前缀打 1 折);
- 监控:按功能/用户的 token 看板+预算告警——不监控的 token 消耗迟早爆账单。
常见坑:中文长度估算别用「字符数/4」的英文公式(会严重低估);图片 token 单独计(按分辨率 tile);reasoning 模型的思考 token 算输出计费但部分 API 不返回内容——预算要留够。