一、前言

  • 大模型中的 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。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐