大模型技术全景(六):AI 的“逐字接龙“——Token 与自回归生成背后的真相

你有没有好奇过:大模型回答问题时,是像人一样"想好整句话再写",还是别的方式?

答案是------它根本不会先想好整句话。它是像一个"逐字接龙"游戏:根据已经写下的内容,一个字一个字地猜下一个最可能出现的词,直到写完。

这篇把这个机制彻底拆开:它怎么选词、Token 是什么、词表为什么重要、为什么"输出比输入贵"、以及 AI 是怎么"记住"你的。


目录

目录

​编辑

目录

一、大模型是怎么"蹦"出回答的:逐字预测

[1.1 选词不是"猜一个",而是"按概率抽一个"](#1.1 选词不是"猜一个",而是"按概率抽一个")

[1.2 完整过程](#1.2 完整过程)

[1.3 自回归生成](#1.3 自回归生成)

[二、Token 是什么:AI 眼中的最小语言单位](#二、Token 是什么:AI 眼中的最小语言单位)

[2.1 切分形态](#2.1 切分形态)

[2.2 为什么需要 Token](#2.2 为什么需要 Token)

三、词表:模型只能在"认识的词"里选

[3.1 生成范围](#3.1 生成范围)

[3.2 字节级回退:一个字符都不漏](#3.2 字节级回退:一个字符都不漏)

四、为什么输出比输入贵

[4.1 致命伤一:算力闲置](#4.1 致命伤一:算力闲置)

[4.2 致命伤二:显存带宽被榨干](#4.2 致命伤二:显存带宽被榨干)

[4.3 致命伤三:KV Cache 占显存](#4.3 致命伤三:KV Cache 占显存)

[五、多轮对话:AI 是怎么"记住"你的](#五、多轮对话:AI 是怎么"记住"你的)

[5.1 为什么需要多轮对话](#5.1 为什么需要多轮对话)

[5.2 上下文超限:AI 也会"失忆"](#5.2 上下文超限:AI 也会"失忆")

[5.3 推理效率:长对话为什么又慢又贵](#5.3 推理效率:长对话为什么又慢又贵)

[5.4 模型能力局限:中间遗忘](#5.4 模型能力局限:中间遗忘)

六、面试官追问


一、大模型是怎么"蹦"出回答的:逐字预测

核心原理一句话:给定前文,计算下一个最可能出现的词是什么。

1.1 选词不是"猜一个",而是"按概率抽一个"

模型决定下一个 Token 的完整机制:

基于前文,算出词表里所有 Token 的概率分布,再用采样策略选出一个。

类比:像玩文字接龙。你写"今天天气真",正常人会接"好",但也可能接"棒""不错"。模型做的是同一件事------给每个候选词一个概率,再按概率挑一个。

1.2 完整过程

用户输入"中国的首都是哪里?":

轮次 模型"看到"的内容 预测下一个
1 中国的首都是哪里?
2 中国的首都是哪里?北
3 中国的首都是哪里?北京
... 不断拼接 ...
最后 ...北京是... <终止符>

每预测出一个 Token,就拼到后面当新的输入,继续预测下一个,直到碰到终止符

注意:终止符因模型而异------DeepSeek 默认的是 <|end▁of▁sentence|>,别家模型可能不同。

1.3 自回归生成

定义 :这种"用自己刚生成的,作为预测下一个的依据,像滚雪球一样一步接一步往外推"的方式,叫自回归生成(Autoregressive Generation)

它是当前所有主流大模型(GPT 系)的工作方式。


二、Token 是什么:AI 眼中的最小语言单位

定义 :Token(词元)是大语言模型理解和处理文本的最小基本单位

类比 :人读书要"断句"------"我爱大模型开发"会断成"我/爱/大模型/开发"再理解。AI 也一样,它不读完整句子,而是把句子拆成一个个 Token 来理解。这个"断句"过程叫分词(Tokenization)

2.1 切分形态

形态 例子
完整单词 Hello = 1 个 Token
单词的一部分 unbelievable = un / believe / able(3 个 Token)
标点 逗号、句号、感叹号通常各占 1 个 Token
中文 1 个汉字通常占 1~2 个 Token(视词频)

不同厂商分词器不同,同一句话切出的 Token 可能不一样------就像有人把句子断成"大/模型",有人断成"大模型"。

2.2 为什么需要 Token

原因一:数字化,让机器能听懂

计算机只能处理数字。把文本变成数字要两步:

步骤 做什么 关键点
① 切分编号 把文本拆成 Token,每个分配整数 ID ID 只是代号,没有大小含义------891 不比 432"更开心",直接拿 ID 做加减法毫无意义
② 映射向量 把每个 ID 映射成一串高维浮点数(向量) 语义越近,向量在空间里越近:happy 和 glad 的向量距离很近

原因二:解决"词汇爆炸"问题

切法 问题
按字母切 太细,序列巨长,算力平方级增长,效率极低
按单词切 词表爆炸(英语几十万词+派生词),新造词没法处理
折中:子词(BPE) 词表适中,又能拼出任意新词

主流 Tokenizer(BPE、SentencePiece)把文本切成"介于字和词之间"的子词单元------所以 unbelievable 被切成 un/believe/able。


三、词表:模型只能在"认识的词"里选

定义 :词表(Vocabulary)是模型预定义的一个映射字典,包含模型"认识"的所有 Token,每个 Token 对应一个唯一数字 ID。

类比 :一本"模型专用字典"。LLM 本质是数学函数(输入数字、输出数字),词表就是连接"人类语言"和"模型数字世界"的桥梁

3.1 生成范围

  • 模型不能生成词表之外的 Token ,但可以组合 词表里的 Token 拼出新词
    • 例:un + believe + able → "unbelievable"
  • 词表大小是固定的(如 GPT-2 是 50,257),模型永远不可能输出编号 50,258
  • 代价 :词表里有的词,1 个 Token 就输出;没有的"新词",可能要 5~10 个 Token
    • 这就是为什么处理冷门专业术语或罕见语言时,LLM 又慢又贵

3.2 字节级回退:一个字符都不漏

问题:词表里没有 😊 这个表情怎么办?

方案 做法 结局
传统分词器 直接抛"未知"标记 UNK 模型看不懂,两眼一抹黑
Byte-fallback 把 😊 按 UTF-8 拆成 4 个字节,每个字节映射一个专用字节 Token 表情被切成 4 个 Token 正常送入模型

为什么说它精妙? 对比历史方案:

方案 问题
纯字节级 BPE(GPT-2 早期) 词表只有 256 字节,apple 占 5 个 Token、中文"苹果"占 6 个,上下文窗口被迅速吃满
Byte-fallback 完美结合:正常词用大 Token 保效率,生僻字/Emoji 降级到字节保鲁棒,100% 不漏字符

四、为什么输出比输入贵

同样长度的内容,模型"写出来"比"读进去"贵得多。原因藏在两个阶段的本质差异里,课件总结了三个"致命伤"。

4.1 致命伤一:算力闲置

阶段 怎么算 特点
输入(Prefill) 1000 个 Token 打包成大矩阵,一次算完 GPU 满载,利用率近 100%,但 0.1 秒干完
输出(Decode) 每次只算 1 个 Token,还得搬出前面 1000 个缓存做计算 GPU 闲置约 95%,生成 1000 Token 要串行跑 1000 步

类比 :输入像满载货车走高速 (费油但跑得快);输出像市区堵车(不费油但耗时极长)。出租车按打表收费,堵车当然更贵。

搬砖类比:盖房子要 1000 块砖------

  • 输入:1000 个工人同时搬,1 轮搞定
  • 输出:只有 1 个工人(下一个词依赖上一个),来回搬 1000 趟,而且搬得越多、每趟还要清点前面搬过的砖(KV Cache 越来越大),越走越慢

4.2 致命伤二:显存带宽被榨干

  • 输入:消耗计算单元,这是 GPU 强项
  • 输出:瓶颈变成显存搬运速度(Memory Bound)------每算一个新 Token,要把缓存里几千个 K 向量从显存搬到缓存
  • 显存带宽是 GPU 最稀缺的资源之一(如 H100 带宽 3.35TB/s),输出阶段疯狂搬运,直接把带宽打满

4.3 致命伤三:KV Cache 占显存

阶段 显存占用
输入 算完就释放,不占地方
输出 每生成一个 Token,它的 K/V 就永久追加进显存,直到对话结束
  • 生成 1000 Token = 占 1000 份显存空间
  • 对云厂商:显存 = 钱。一张 A100 只有 80GB,一个用户生成长文本占了 40GB,这张卡能同时服务的用户就急剧减少

结论:不是厂商"黑",是输出阶段的计算方式(串行 + 高缓存 + 占显存)天然决定了它更贵。


五、多轮对话:AI 是怎么"记住"你的

先泼冷水:大模型本身没有记忆。

核心事实:LLM 本质是"无状态(Stateless)"的------模型处理每条指令时,默认并不知道你之前说过什么。你换个新会话,它连你叫什么都不记得。

那多轮对话怎么实现的? 靠应用层模拟:把历史对话记录连同当前新问题一起,重新打包发给模型。所谓"记住",其实是每次请求都把之前的话再发一遍

类比:像你每次找同事帮忙,都得把前因后果重新讲一遍------不是同事记性好,是你每次都把背景带上了。

5.1 为什么需要多轮对话

原因 说明 例子
上下文依赖 语境是理解代词/隐喻的关键 先问"龙是什么",再问"它的头像什么"
复杂问题逐步清晰 用户不会一次说清所有信息 看病:先"我头痛",再一步步补充
纠错与对齐 给用户机会纠正模型的错 模型说错刊物,用户纠正后它改对

5.2 上下文超限:AI 也会"失忆"

对话越长,历史 Token 越多,一旦超过上下文窗口上限(如 32K),最早的信息就被截断遗忘

一个经典案例:你开头说"我对花生过敏",聊了 20 轮烘焙后,模型忘了这条,推荐了花生酱玛芬蛋糕。

解决思路:选择性记忆,而非全记住

方案 做法
对话摘要 超长后把旧对话压缩成简短摘要,之后基于摘要继续
滑动窗口 只保留最近 N 轮,更早的一刀切掉
RAG 检索 把历史存入向量库,按需检索相关片段(后篇专讲)
5.2.1 对话摘要
5.2.2 滑动窗口
5.2.3 RAG检索

5.3 推理效率:长对话为什么又慢又贵

每轮都要重新处理整个历史 → Token 消耗和延迟随轮次线性增长

解决技术:

  • 提示词缓存(KV Cache):缓存已算过的历史结果,每轮只算新内容(生产级服务都用)
  • 上下文剪枝:移除对当前生成无用的历史 Token(比如删掉闲聊轮次,只留正题相关)

5.4 模型能力局限:中间遗忘

模型更容易记住上下文开头和结尾的信息,中间部分常被忽略------这就是"大海捞针"测试揭示的现象:关键信息藏在大量无关内容中间时,模型很难找到。


六、面试官追问

Q1:Token 怎么算费用?为什么充的钱一会儿就没了? A:计费按"输入 Token + 输出 Token"总和。输出 Token 单价更高(见第四节),长对话每轮都要把历史重新发给模型,Token 累积很快。所以同样的话,对话越长越费钱。

Q2:中文 1 个字 = 1 Token 吗? A:不一定。中文通常 1 个字 ≈ 1~2 个 Token,取决于切分和词频。常用字可能 1 个 Token,生僻字可能要拆成多个甚至触发字节级回退。精确数量用各家的 Tokenizer 工具可查。

Q3:上下文窗口为什么有限?塞满会怎样? A:因为注意力计算复杂度随长度平方增长,且 KV 缓存占显存、随长度线性增加。塞满后,超出部分会被截断(通常丢最前面的),模型就"忘了"早先的内容。(上下文窗口完整机制在系列后篇专门讲。)

Q4:大模型真的"记住"你说的话了吗?为什么换新会话它就不记得? A:没有真记忆。LLM 本质无状态,多轮对话是应用层把历史重新打包发给模型模拟出来的。换新会话=不带历史=它什么都不知道。所以"记忆"只是"把上下文带上"的假象,超长后连这个假象也会因截断而失效。

Q5:模型输出真的能"无中生有"吗?为什么生僻内容会更贵? A:模型只能从固定词表里选 Token,不能创造词表外的编号。词表里有的词 1 个 Token 就够;没有的新词/生僻字要拆成多个 Token,甚至触发字节级回退。Token 越多,计算越慢越贵------这就是冷门术语、罕见语言处理成本高的原因。


如果这篇让你看清了大模型"逐字接龙"的真相,欢迎点赞收藏。评论区聊聊:你知道 Token 要花钱后,有没有改变和 AI 聊天的方式?

相关推荐
HR研习社1 小时前
绚星AI实战训练场(AI陪练):重塑一线沟通胜任力,赋能金融与零售行业实现业绩破局
大数据·人工智能·机器学习
东坡肘子1 小时前
当 Mac mini 的价格不再 mini -- 肘子的 Swift 周报 #152
人工智能·swiftui·swift
Raas1002 小时前
AI网关和OpenRouter区别?MAI Gateway(魔芋企业级AI网关)企业级方案对比指南
大数据·开发语言·人工智能·gateway·php·ai网关·mai gateway
zzzzzz3102 小时前
Claude Code:把 AI 放进终端,真正值得关注的是什么
人工智能·开源·命令行
Raas1002 小时前
MAI Gateway(魔芋企业级AI网关)技术辨析:AI网关和大模型网关区别?选型必读
大数据·人工智能·大模型·gateway·mai gateway·企业级产品
意图共鸣3 小时前
意图共鸣科技9月7日正式发布《认知智能白皮书2.0:广义具身智能物理宪法》——为一切走进物理世界的AI确立认知底线
人工智能·科技
FII工业富联科技服务9 小时前
Omniverse + Isaac Teleop + 合成数据:工业富联机器人大脑训练+执行落地闭环拆解
大数据·人工智能·深度学习·机器学习·机器人·制造·具身智能
东风破_9 小时前
大模型格式化输出
人工智能
Shockang9 小时前
AI 研究偏好模型
人工智能