Skip to content

Token 计算详解

什么是 Token

Token 是大语言模型处理文本的最小基本单位。模型不直接处理原始文本,而是将文本转换为 token 序列进行处理。

Tokenizer(分词器)

Tokenizer 负责将文本转换为 token 序列:

输入文本 → Tokenizer → Token 序列
"今天天气很好" → [192, 3847, 2093, 3847, 452, 2398]

Detokenizer(反分词器)

Detokenizer 负责将 token 序列转换回文本:

Token 序列 → Detokenizer → 输出文本
[192, 3847, 2093, 3847, 452, 2398] → "今天天气很好"

Token 计算规则

中英文差异

文本类型平均 Token 数示例
英文单词1 Token ≈ 0.75 单词"hello" → 1 token
中文汉字1 Token ≈ 1-2 字符"今天" → 2 tokens
标点符号1 个 ≈ 1 Token"。" → 1 token
空格英文空格计入"hello world" → 2 tokens

实际计算示例

英文: "hello world"
Tokens: [15339, 1917]
数量: 2 tokens

中文: "今天天气很好"
Tokens: [192, 3847, 2093, 3847, 452, 2398]
数量: 6 tokens

常见 Token 计算工具

平台内置计算

在 ai.TokenHub 平台的 API 响应中,会返回实际消耗的 token 数量:

json
{
  "id": "chatcmpl-xxx",
  "model": "gpt-4o",
  "usage": {
    "prompt_tokens": 28,       // 输入消耗
    "completion_tokens": 45,    // 输出消耗
    "total_tokens": 73         // 总消耗
  }
}

常用 Token 计算公式

英文文本

Token数量 ≈ 字符数 ÷ 4
Token数量 ≈ 单词数 × 1.33

中文文本

Token数量 ≈ 字符数 × 1.3 ~ 1.5

在线计算工具

工具网址说明
OpenAI Tokenizerplatform.openai.com/tokenizer官方工具
AiTokenaitoken.fly.dev在线计算

ai.TokenHub 平台 Token 计费

计费组成

类型说明计费
Prompt Tokens输入文本消耗✅ 计费
Completion Tokens输出文本消耗✅ 计费
Total Tokens总消耗✅ 计费

计费示例

python
# 用户输入
user_input = "请写一首关于春天的诗"

# 假设转换为 14 个 tokens
# 模型输出
model_output = "春风拂面,万物复苏。\n花开遍地,绿意盎然。"

# 假设输出转换为 28 个 tokens
# 总计: 14 + 28 = 42 tokens

平台 Token 计算页面

在 ai.TokenHub 后台的「用量统计」页面,可以查看:

  • 每日/每周/每月 Token 消耗明细
  • 各模型的 Token 消耗占比
  • Token 消耗趋势图表

如何节省 Token

1. 精简 Prompt

python
# ❌ 不推荐 - 冗余描述
messages = [
    {"role": "user", "content": "请你作为一个非常专业的、经验丰富的程序员来帮我写一段代码,这段代码的功能是计算两个数的和,请写得详细一些,包括注释和错误处理"}
]

# ✅ 推荐 - 简洁明确
messages = [
    {"role": "user", "content": "写一个Python加法函数,包含错误处理"}
]

2. 使用系统消息

将固定的角色设定放在系统消息中:

python
messages = [
    {"role": "system", "content": "你是一个专业的Python程序员"},
    {"role": "user", "content": "写一个排序算法"}
]

3. 控制回复长度

明确指定回复格式和长度:

python
{"role": "user", "content": "用一句话解释量子计算"}

4. 多轮对话优化

python
# ❌ 每次重复上下文
messages = [
    {"role": "user", "content": "解释什么是机器学习,包括定义、原理、应用场景"},
    {"role": "assistant", "content": "机器学习是..."},
    {"role": "user", "content": "请再详细解释一下机器学习的定义、原理、应用场景"}
]

# ✅ 利用历史上下文
messages = [
    {"role": "user", "content": "解释什么是机器学习,包括定义、原理、应用场景"},
    {"role": "assistant", "content": "机器学习是..."},
    {"role": "user", "content": "举一个具体的例子"}  # 自动理解上下文
]

Token 与上下文窗口

Token 数量影响上下文

上下文窗口: 4096 tokens

输入: 3000 tokens
可用输出: 4096 - 3000 = 1096 tokens

输入: 4000 tokens
可用输出: 4096 - 4000 = 96 tokens  ⚠️ 几乎无法输出

平台上下文窗口

模型上下文窗口说明
GPT-4o128K Tokens128,000
Claude 3.5 Sonnet200K Tokens200,000
Gemini 3 Pro1M Tokens1,000,000

常见问题

Q: 为什么我的输入很短但 Token 很多?

可能原因:

  • 包含特殊字符或代码
  • 中文标点符号较多
  • 包含 URL 或邮箱地址

Q: Token 计算有误差吗?

不同模型使用不同的 Tokenizer,计算结果可能略有差异。建议以 API 响应返回的 usage 字段为准。

Q: 如何准确计算 Token?

最准确的方式是通过 API 响应获取:

python
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "你好"}]
)

# 从响应中获取准确数量
print(f"Total Tokens: {response.usage.total_tokens}")