Token 到底是什么?揭开大模型背后"文字压缩术"的神秘面纱

你每次调用 AI 都在花 Token,但你真的知道 Token 是什么吗?为什么同一段话中文比英文贵?为什么有时候模型会"截断"你的内容?这篇文章彻底讲清楚。


先从一个账单问题开始

你用 GPT-4 或 Claude API,账单是按什么算的?

答案是 Token。不是按字数,不是按请求次数,是 Token。

那 Token 是什么?很多人的理解停留在"大概就是字"------但这个模糊的认知,会让你在写 Prompt、算成本、管 Context 的时候踩一堆坑。


Token 的本质:亚词级别的文本单元

Token 是大模型处理文本的最小基本单位,由分词器(Tokenizer)切分产生。

关键点 :Token 既不等于字,也不等于词,而是介于两者之间的亚词(subword)单元

英文的分词规律

arduino 复制代码
"Hello, World!" → ["Hello", ",", " World", "!"]
→ 4 个 Token

"unbelievable" → ["un", "believ", "able"]  
→ 3 个 Token(常见词是整词,罕见词被拆分)

常见英文单词通常是一个 Token,长词或罕见词会被拆成多个。

中文的分词规律

css 复制代码
"人工智能" → ["人工", "智能"] 或 ["▁人工", "▁智能"]
→ 通常 2-4 个 Token

"中国" → ["中国"]
→ 1 个 Token(高频词)

"瞻前顾后" → ["瞻", "前顾", "后"] 或类似拆分
→ 2-3 个 Token(低频词组被拆)

经验换算比

语言 换算比
英文 1 字符 ≈ 0.3 Token
中文 1 汉字 ≈ 0.6 Token
代码 1 字符 ≈ 0.25 Token

所以,同样表达一个意思,中文比英文更"贵"(每个汉字对应更多 Token)。


为什么要用 Token 而不是字符?

这是个好问题。答案在于训练效率和语义密度的平衡。

纯字符级别的问题

  • 序列太长,计算量爆炸(一篇文章 = 数万个字符)
  • 字符本身没有语义,模型需要更长的序列才能"学会"语言

纯词汇级别的问题

  • 词表爆炸(中文、多语言词汇量巨大)
  • 新词、专业术语、代码变量无法处理

BPE(字节对编码)这类亚词分词方案的优势

  • 词表大小可控(通常 3-10 万个 Token)
  • 能处理任意文本,包括新词和代码
  • 高频词完整保留,低频词被拆分,兼顾效率和覆盖率
markdown 复制代码
BPE 简化原理:
1. 初始词表 = 所有字符
2. 统计相邻字符对出现频次
3. 合并最高频的字符对为新 Token
4. 重复直到词表大小达到目标

Token 影响的三件大事

一、API 计费

大模型 API 通常分别计算输入 Token输出 Token,输出通常更贵。

ini 复制代码
以 Claude 3.5 Sonnet 为例(参考价格):
输入:$3 / 百万 Token
输出:$15 / 百万 Token

一次对话如果输入 1000 Token、输出 500 Token:
成本 = (1000 × 3 + 500 × 15) / 1,000,000
     = 0.003 + 0.0075
     = $0.0105 ≈ 0.08 元

看起来很便宜?Agent 任务通常需要几十轮甚至上百轮调用,成本会快速累积。这就是为什么 OpenClaw 这类 Agent 工具一个月能烧掉 10.2 万亿 Token。

二、Context Window 的边界

模型的 Context Window 就是它一次能"看到"的最大 Token 数量。

diff 复制代码
典型 Context Window:
- Claude 3.5 Sonnet:200K Token ≈ 10 万汉字
- GPT-4o:128K Token ≈ 6.5 万汉字
- Gemini 1.5 Pro:1M Token ≈ 50 万汉字

超出 Context Window 会怎样?

早期模型会直接截断,丢弃超出部分。现代模型通常会用"滑动窗口"或压缩策略处理,但准确度会有损失。

在 Agent 场景下,随着任务执行,Context 中会积累:

  • System Prompt(固定占用)
  • 历史对话(随轮数增加)
  • 工具调用结果(可能很大)
  • 文件内容(如果有读文件操作)

Context 管理是 Agent 工程的核心难题之一。

三、模型的推理速度

Token 数量直接影响推理延迟。

diff 复制代码
输出速度大约:
- GPT-4o:约 50-100 Token/秒
- Claude 3.5 Sonnet:约 80-120 Token/秒
- 本地 Llama(8B):约 20-40 Token/秒(M1 Mac)

生成一篇 1000 字的文章(约 600 Token),需要约 5-30 秒,取决于模型和硬件。


Token 计数的实用工具

OpenAI Tokenizer(在线工具):

arduino 复制代码
https://platform.openai.com/tokenizer

粘贴任意文本,实时显示 Token 数和分词结果,直观感受分词粒度。

Python 代码估算

python 复制代码
import tiktoken

# 用于 GPT-4 和 Claude 的近似计算
enc = tiktoken.get_encoding("cl100k_base")

text = "帮我写一段 Python 代码,实现冒泡排序算法"
tokens = enc.encode(text)
print(f"Token 数量:{len(tokens)}")
print(f"Token 列表:{[enc.decode([t]) for t in tokens]}")

经验估算规则(不想写代码时):

  • 中文文本:字数 × 0.6 ≈ Token 数
  • 英文文本:单词数 × 1.3 ≈ Token 数
  • 代码:字符数 × 0.25 ≈ Token 数

Token 与 Prompt 工程的关联

理解 Token 之后,Prompt 工程中有几个之前看不懂的现象就说得通了:

现象一:为什么"简洁的 Prompt"往往效果更好?

不是因为模型"偏爱"简洁,而是简洁的 Prompt 占用的 Context 更少,模型能把更多注意力集中在关键信息上。

现象二:为什么要把关键信息放在 Prompt 的开头或结尾?

研究表明,模型对上下文开头和结尾的注意力更强("Lost in the Middle"效应)。关键指令放在中间容易被"淡化"。

现象三:为什么 System Prompt 不能太长?

System Prompt 每次都要占用固定的 Token,长度越大,留给对话和工具结果的空间越小。


不同模型的分词差异

不同模型用不同的 Tokenizer,同一段文本的 Token 数量可能不同:

arduino 复制代码
"Model Context Protocol":
- GPT-4:4 Token("Model", " Context", " Protocol"可能合并)
- Claude:可能 3-5 Token
- 中文模型(Qwen等):对中文有更好的分词优化,中文 Token 效率更高

这意味着跨模型的成本估算不能直接对比 Token 数,还要考虑 Token 价格和分词效率的差异。


总结:Token 的五个关键认知

  1. Token ≠ 字:是亚词单元,中文约 0.6 Token/字,英文约 0.3 Token/字符
  2. Token 是计费单位:输入+输出分别计费,输出通常更贵
  3. Token 决定 Context 边界:超出 Context Window,模型"看不到"
  4. Token 影响速度:生成的 Token 越多,等待时间越长
  5. Prompt 优化本质上是 Token 优化:用更少的 Token 传递更多有效信息

理解了 Token,你就理解了和 AI 交互的"货币单位"和"能源系统"。所有关于成本、速度、上下文长度的问题,都能从 Token 角度得到解答。


相关推荐
_遥远的救世主_2 小时前
Claude HUD:给你的 Claude Code 装一块「仪表盘」
人工智能
数字生命卡兹克2 小时前
第一个同时为人类和Agent设计的AI视频产品,它叫,LibTV。
人工智能
程序员小明儿2 小时前
OpenClaw-RL 实战 06|异步无阻塞日志系统:如何在服务不中断的前提下记录每一轮交互的“学习数据”?
人工智能
@不误正业2 小时前
从LangChain到OpenClaw:AI Agent框架选型指南(性能对比+源码分析)
人工智能·langchain
StoneWei2 小时前
OpenClaw多Agent协同工作配置实战
人工智能
程序员小明儿2 小时前
OpenClaw-RL 实战 04|捕捉“指导信号”实战:如何从用户纠正中提取Token级监督?
人工智能
ZhengEnCi2 小时前
08d-布隆过滤器是什么?
人工智能
工业甲酰苯胺2 小时前
低代码AI化:是否正在重构开发行业格局?
人工智能·低代码·重构
掘金安东尼2 小时前
国内龙虾生态图谱:谁在做入口,谁在做技能,谁在做场景落地(v2026.3.18)
人工智能