
一、Token 的含义详解
在 AI 应用开发中,尤其是在基于大语言模型(LLM)的系统中,token 是模型处理和生成文本的基本单位。它可以是一个单词、一个标点符号、一个子词(subword),甚至是一个特殊符号。
1. 什么是 Token?
- 模型不会直接理解人类语言,而是将文本切分成更小的单元进行处理。
- 这些单元就是 token,是模型输入输出的最小语义/语法单位。
2. Token 的来源:分词器(Tokenizer)
- 每个大语言模型都依赖一个特定的 分词器(Tokenizer) 来将文本转换为 token。
- 常见的分词方式包括:
- Word-based(基于单词)
- Character-based(基于字符)
- Subword-based(基于子词),如 BPE(Byte-Pair Encoding)、WordPiece 等。
例如:
输入文本:"Hello, world!"
分词结果(token列表):["Hello", ",", " world", "!"]
二、Token 在 AI 应用中的作用
作用分类 | 描述 |
---|
输入处理 | 将用户输入文本编码成模型可理解的数字序列(token IDs)。 |
输出生成 | 模型根据内部计算逐个生成 token,最终组合成完整回复。 |
长度限制控制 | 模型有最大上下文长度限制(如 4096 tokens),影响输入输出内容的长度。 |
性能与成本评估 | API 调用通常按 token 数量计费(如 OpenAI GPT 系列)。 |
三、Token 相关的关键概念
概念名称 | 解释 |
---|
Tokenization | 将原始文本转化为 token 序列的过程。 |
Vocabulary(词表) | 所有支持的 token 集合,每个模型都有自己的词表大小(如 GPT-3 词汇量约 50k)。 |
Context Length | 模型一次能处理的最大 token 数量,决定了对话历史或文档长度上限。 |
Input Tokens | 用户输入所占用的 token 数量。 |
Output Tokens | 模型生成回复所占用的 token 数量。 |
Prompt Tokens | 输入提示词部分的 token 总数。 |
Completion Tokens | 模型生成的内容所占 token 数量。 |
四、不同模型的 Token 处理差异
模型名称 | 分词器类型 | 词表大小 | 最大上下文长度 | 示例 token 切分说明 |
---|
GPT-3 / GPT-3.5 | BPE | ~50k | 4096 | 子词切分,如 “playing” → [“play”, “ing”] |
GPT-4 | BPE | ~100k | 8192 或 32768 | 更精细的子词划分,支持更多语言 |
Llama / Llama2 | SentencePiece | ~32k | 4096 | 支持中文等非空格语言,中文多为单字或词组 |
Qwen(通义千问) | 自研 tokenizer | ~150k | 可达 32768 | 中英文混合优化,中文以词语为主 |
BERT | WordPiece | ~30k | 512 | 主要用于英文任务,中文需额外适配 |
五、Token 计算与费用关系(以 OpenAI 为例)
模型名 | 输入 token 单价(USD) | 输出 token 单价(USD) | 典型应用场景 |
---|
gpt-3.5-turbo | $0.0005 / 1K tokens | $0.0015 / 1K tokens | 聊天、客服、基础写作 |
gpt-4 | $0.03 / 1K tokens | $0.06 / 1K tokens | 高级推理、复杂任务 |
gpt-4-32k | $0.06 / 1K tokens | $0.12 / 1K tokens | 长文档处理、知识问答 |
gpt-4o | $0.005 / 1K tokens | $0.015 / 1K tokens | 多模态交互、语音聊天 |
六、Token 在实际应用中的优化建议
优化方向 | 实施方法 |
---|
减少输入 token 数量 | 精简提示词内容,去除冗余信息,使用更简洁表达。 |
压缩上下文长度 | 控制对话历史长度,采用摘要机制保留关键信息。 |
合理选择模型 | 根据任务复杂度选择合适的模型,避免“杀鸡用牛刀”。 |
缓存常用 token | 对于固定模板或高频提示词进行缓存复用。 |
本地化 token 统计 | 在客户端或服务端预统计 token 数量,提前判断是否超限。 |
七、总结表格
项目 | 内容描述 |
---|
Token 定义 | 模型处理文本的最小单位,由分词器将文本切分为 token 序列 |
主要作用 | 输入编码、输出生成、长度控制、成本计量 |
常见分词器 | BPE、WordPiece、SentencePiece 等 |
典型模型 token 差异 | GPT-3/BERT 词表较小,Llama/Qwen 支持更大词表和中文 |
API 成本参考 | OpenAI 按 token 收费,gpt-3.5-turbo 成本最低,gpt-4 成本较高 |
优化策略 | 减少输入、控制上下文、合理选模型、缓存、本地统计 |
八、附注:如何查看 Token 数量?
-
使用 HuggingFace 的 transformers
库:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
tokens = tokenizer.tokenize("Hello, world!")
print(len(tokens))
-
使用 OpenAI 提供的 tiktoken 库进行快速 token 统计。