【LLM应用开发】大模型使用时的Token数和计算方式?
一文搞懂:大模型使用中的token数及其计算方式
·
一、前言
- 大模型中的 Token(标记) 是模型处理文本的最小单位,它不同于字数或词数。
- 大模型处理上下文、控制生成长度、计费等通常都是按 token 来进行的。
二、什么是Token?
-
Token 是文本被模型切分后的最小单位。
-
一个 Token 可能是:
- 一个汉字(如 “你”)
- 一个英文字母、单词(如 “hello”)
- 一个标点(如 “,”)
-
✅ 中文:每个字 ≈ 1 个 token
-
✅ 英文:一个词 ≈ 1~2 个 token
三、计算方式
| 模型 | 分词器/编码规则 | 平均 token/字比率 |
|---|---|---|
| OpenAI GPT | tiktoken | 1 token ≈ 0.75 字 |
| 通义千问 | qwen tokenizer(近似) | 中文 1字 ≈ 1 token |
| ChatGLM | 自研分词器(按词切分) | 中文词 ≈ 1~2 token |
| Baichuan | 基于 SentencePiece | 中文1字 ≈ 1 token |
- 不同大模型使用不同的分词器(Tokenizer)来计算Token使用量。
四、实际举例
- 输入内容:你好,AI 助手!
- 中文 6 个字符,对应大约 6 个 token
- 你、好、,(中文标点逗号)、助、手、!(中文感叹号)
- 英文输入:Hello, how are you today?
- 大约为 7~8 个 token
- hello、,(英文标点逗号)、how、are、you、today、?(英文标点暗号)
五、模型生成中 Token 的作用
大模型 API 调用时通常会有两个 Token 限制:
| 限制类型 | 含义 |
|---|---|
max_tokens |
输出最多生成多少 token |
context_limit |
输入 + 输出 token 总数不能超过该值 |
- 例如:
# 调用通义千问模型生成内容
response = dashscope.Generation.call(
model="qwen-plus",
messages=[{"role": "user", "content": "请介绍一下大模型"}],
result_format='message',
max_tokens=500 # 最多生成 500 token
)
六、为什么要关注 Token?
- Token 限制:每个模型的上下文窗口(context window)有限(如 4096、8192)。
- 计费依据:多数 API 是按 Token 计费(如 1000 token = $0.01)。
- Prompt 构建影响:太长的 Prompt 可能被截断或额外收费。
七、辅助工具推荐
- 若你使用 OpenAI,可用 tiktoken 工具计算 token 数:
import tiktoken
enc = tiktoken.encoding_for_model("gpt-3.5-turbo")
tokens = enc.encode("你好,AI 助手!")
print(len(tokens)) # 输出 token 数
- 若使用通义千问(Qwen)系列大模型进行 Token 数量估算时,可以通过其官方推荐的分词工具 tiktoken 或 tokenizers 替代品 进行模拟。
- 但目前通义没有完全开放的 Tokenizer 工具,因此你可以用以下替代方案进行计算:
- ✅ 推荐:使用 transformers 中的 Qwen Tokenizer 辅助工具
- 通义千问已经上线 Hugging Face 可用的分词器,推荐使用如下工具来估算 Token 数:
- 1.🔧 安装依赖:
pip install transformers
- 2.🧪 示例工具代码(基于 Qwen tokenizer):
from transformers import AutoTokenizer
# 使用通义千问的官方 Tokenizer 名称(根据模型选择)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-0.5B", trust_remote_code=True)
def count_qwen_tokens(text):
tokens = tokenizer.encode(text, add_special_tokens=False)
return len(tokens), tokens
if __name__ == "__main__":
test_text = "你好,AI 助手!"
count, tokens = count_qwen_tokens(test_text)
print(f"原始文本: {test_text}")
print(f"Token 数量: {count}")
print(f"Token ID 列表: {tokens}")
- 3.📦 输出示例:
原始文本: 你好,AI 助手!
Token 数量: 9
Token ID 列表: [1234, 4567, 789, ...]
- ⚠️ 注意:不同 Qwen 版本(如 Qwen1.5-7B、0.5B)Tokenizer 可能略有差异;
- 推荐使用与你部署模型版本一致的 tokenizer。
- 4.📚 参考模型库:
- Qwen1.5 模型仓库 (Hugging Face)
- 推荐使用:Qwen/Qwen1.5-0.5B, Qwen/Qwen1.5-1.8B, 等
更多推荐
所有评论(0)