在使用大模型(如 豆包、文心、千问、gpt、claude)API时候,就会有一个绕不开的核心概念:
Token
一般大模型厂商会告诉你1000个token多少钱,百万个token多少钱?
那么
- Token到底什么意思呢?
- 如何估算大致自己要用多少Token呢?
一、Token 到底是什么?
一句话定义:
Token 是模型“能理解的最小文本单位”,简称** 最小意义单元或者词元**
比如:今天/中午/吃/白菜 大概是包含了四个Token;你/吃/了/吗/ 大概率是包含4个token。
这里需要注意:
- 每个大模型能够理解的最小文本单元不一定完全一样,同样问题+答案不同大模型消耗的Token也可能不一样。
- 各个大模型和人类能够理解的最小意义单元有差异,但是不大。
所以
简单估算Token量可以按照人类理解的文本最小意义单元进行估算;精确估算要拿到具体大模型厂商提供的Token计算方法。
二、Token量怎么计算
2.1 简单估算
英文示例
unbelievable → un / believe / able
👉 3 个 Token
📌 中文示例
今天天气很好 → 今天 / 天气 / 很好
👉 3 个 Token(也可能是 5 个)
Token 的切分是“统计结果”,不是固定规则
根据统计结果,我们有以下简单快速估计方法:
✅ 英文
Token ≈ 字符数 ÷ 4
这里的字符指,a、b、c+标点符号。
✅ 中文
1 个字或者符号 ≈ 1 Token
✅ 中英混合
中文字数 ×1+英文字母数 ÷4+标点符号数×1
2.2 精确计算
部分大模型有公开它的Token计算公式
比如GPT的[Tokenizer](https://platform.openai.com/tokenizer)。因为很难精确计算加上Token计算考虑历史,国内大模型大多数并没有提供类似工具。
聊到这里,我们知道一句话Token怎么计算,那我们跟大模型交互都是过程中,哪些会被计算到呢?
三、大模型使用的时候,Token 计费包含哪些?
总费用 = 输入 Token + 输出 Token
输入包括:
- 问答系统预先设置提示词;
- 历史对话;
- 当前问题;
输出包括:
- 模型回答
❗关键点
你每次请求,都会带上“全部上下文”(因为大模型没有记忆,记忆请求大模型的时候记忆模块拼接上去的内容)
👉 所以:
你以为你说了一句话,其实你在“复述整个历史”
📌 示例
你说:
把我们讨论的内容概括总结下
但实际发送:
历史1 + 历史2 + 历史3 + 概括总结
👉 结果:
❗Token 是“累计”的
每一轮都会:
- 带上之前所有内容
- Token 持续变大
这也是很多人使用计算Token工具算出来和实际不一样
这不是工具的问题,而是你算的不是“真实输入”
真实请求包含:
System Prompt(可能隐藏)
+ 历史对话
+ 当前输入
+ JSON结构 / role字段
👉 工具往往只算“你输入的文本”
除此之外,平台会“偷偷加内容”
例如:
默认系统提示词
安全策略
工具描述(function calling)
注入内容
自动裁剪历史
自动做摘要
自动拼接
👉 这些你看不到,但都算 Token
👉 本质总结
Token 计算不准,不是算法问题,而是“系统边界问题”,当然也涉及到成本问题。
那如何减少Token使用,降低成本呢,下面列举下比较常见的几种方法
- 历史裁剪
比如:只保留最近3~5轮;
比如:语音输入20s,就丢弃以前历史
- 历史摘要
500 Token → 30 Token
- 限制输出
请用100字以内回答
- Context Manager,参考【多轮对话系统是如何工作的?】中context设计
System Prompt
+ Recent Context
+ Summary
+ User Input
👉 核心思想:
保留最近细节,压缩历史信息
四、最终总结
Token 是模型理解世界的最小单位,而你真正付费的,是“上下文 + 输出”的总信息量。
优秀的大模型使用者,本质上是在做“Token预算管理”。