CHAPTER 03 · 推理

按下回车之后,
AI 的肚子里发生了什么

三个日常困惑的答案都在这一章:为什么第一个字等半天,后面的字却刷刷地出? 为什么聊得越久越慢越贵?想在自己电脑上跑 AI,显卡够不够? 顺便讲清两个高频词:Prefill(读题)、 KV Cache(草稿纸)。

4 个交互演示读完约 15 分钟

3.1 你按下发送后,后台跑了六步

先看全景。你在聊天框打一句话、点发送,后台实际发生六件事——包括你看到的「打字机效果」是怎么来的:

🛤️演示 · 一次请求的六个阶段(滚到这里会自动播放)可单步细看
⌨️输入
→
✂️切积木
→
⚡读题
→
🥇第一个字
→
🔁逐字写
→
✅边写边发

最后一步「边写边发」就是你看到的打字机效果:模型每写完一个字就立刻推给你(流式返回), 而不是憋完一整段。所以你感觉的「等待快慢」,主要是下一节的「第一个字」决定的。

3.2 为什么第一个字最慢:它得先「读题」

回答之前,AI 要先把你的问题 + 系统设定 + 之前全部聊天记录一口气读完——这一步叫 Prefill。好消息:读题是并行的,所有积木同时处理; 坏消息:题目越长,这一口就越大。所以 首字延迟(TTFT) 大致跟你的输入长度成正比——这也是为什么超长的系统提示词会让开头变慢。

读题的同时它会把要点记在一张「草稿纸」上(KV Cache,3.4 节), 之后写答案就不用回头重读了。

⚡演示 · 并行读题 vs 逐字读题拖滑杆加长题目试试
120 块积木
题目(正在读题…)
回答(写答案中…)
—
首字等待(模拟)
8.3 字/秒
写答案速度
—
全程耗时(模拟)
时间经过压缩模拟,比例是真的:并行读题的耗时 ∝ 题目长度;逐字读题则是 长度 × 单字耗时,直接爆炸。
说人话 Prefill = 读题,一口气并行读完;题目越长,第一个字来得越晚。 所以「别把用不着的资料全塞进对话」不只是省钱,也是在保你的首字速度。

3.3 一个字一个字往外蹦,快不起来

第一个字出来后,AI 进入「写答案」循环(Decode): 写一个字 → 拼回句尾 → 算出下一个字的概率表 → 从表里抽一个 → 再写。 每个字都要跑一遍完整计算,而且没法并行——第 N 个字得等第 N-1 个字抽完才知道。

这就是 1000 字的回答再快也要等一阵的原因;也是「推理模型」(2.9 节)先长篇打草稿会更慢的原因——草稿也是字,也是一个个蹦出来的。 写字的速度用 TPS(每秒字数)衡量。

🔁演示 · 写答案循环逐帧看每按一步 = 跑一遍完整计算
↓ 一遍完整计算 → 得到下一字的概率表(第五章的主角)

3.4 草稿不重抄:提速第一功臣

写每个字都要「回顾」之前全部内容。要是每写一个字就把前面所有内容重算一遍,代价会平方级爆炸。 解决办法简单粗暴:KV Cache——算过一遍的内容存进草稿纸,以后只算新字。 写字速度立刻从「越写越慢」变成「匀速前进」。

🏁演示 · 写 12 个字:抄草稿 vs 不抄草稿竞速(自动开跑)时间比例是真的
不用草稿每写一字全部重算,越写越慢
用草稿(KV Cache)只算新字,一路匀速
代价 草稿纸本身要占显存(VRAM),而且越聊越厚、同时服务的人越多越厚。 行业用各种结构(GQA 等)给草稿「减肥」——3.7 的计算器里也算了这笔账。

3.5 一车拉多人,和更多提速术

显卡的天性是「一次干一大批活才划算」。批处理就是把多个用户的请求 拼成一车一起算:每人多等一点点,单卡吞吐翻好几倍。更进阶的「连续批处理」还支持随时上下车——这是 vLLM 等推理框架的核心。

用户 A ← 刚到,读题中
用户 B ← 写答案中
用户 C ← 写完离场,新人随时顶上

🔮 抄近道(投机解码)

让小模型先一口气猜 4~8 个字,大模型一次性验收:全对就白赚,错了从错处重来。串行的「一字一算」被局部打破,速度常翻倍,且结果和大模型亲自写的一字不差。

♻️ 读题缓存(Prefix Cache)

同一个系统提示词/文档前缀,读题结果直接复用——「重读」变「续读」。企业应用里同一句系统提示被调用上万次,省得非常可观。

✂️ 多卡分工

把一层切开多卡同时算(省时间),或把层分到多卡(省显存)。代价是显卡之间要不停传话。

3.6 书桌大小:AI 一次能看多少字

AI 一次能「看见」的字有硬上限,叫上下文窗口(4K / 128K / 1M 块积木)。 把它想成一张固定大小的书桌:系统设定、全部聊天记录、你的新问题、还有它将写的答案,都得摆在这张桌上。

摆不下怎么办?要么把最早的对话收进抽屉(截断——AI 从此「看不见」它们), 要么把旧内容压缩成便签再摆回桌上(摘要,下一章的主角)。

📦演示 · 把书桌塞满(8K 窗口)拖滑杆加长对话
8 轮
系统设定固定占 ~350 积木
注意 「桌子大」≠「用得好」。桌上东西太多,AI 会顾头不顾尾(中间的内容容易被忽略), 而且每多 1K 积木:读题更慢、草稿更厚、账单更长。长窗口是稀缺资源,省着用。

3.7 行李压缩:把大模型塞进你的显卡

模型文件动辄几十上百 GB,家里的显卡装不下怎么办?量化——压缩打包: 把每个数字从 16 档精度压成 4 档存储。体积砍到四分之一,速度反而更快(要搬的数据少了),代价是轻微变笨。

就像音乐转 MP3 无损 → 320k 几乎听不出差别(Q8)→ 128k 明显但有损还能听(Q4)→ 再压就破音(Q2/Q3)。 本地玩家天天挂嘴边的 GGUF 文件、Q4_K_M,就是不同的压缩档位。经验值:Q4_K_M 是质量与体积的甜点位。
🧮演示 · 显存计算器:我的卡到底能不能跑?选完看绿勾
8K 积木

估算 = 模型体积 + 草稿纸(KV Cache)+ 约 1.2GB 运行开销。粗略值,够做决策。

—
模型文件体积
—
草稿纸占用
—
共需显存
常见显卡能不能装下:

单次请求讲完了。但聊天是连续的——历史消息怎么带?为什么它记得上一句却忘了第一句?下一章把「上下文、会话、记忆」三个最容易混淆的词彻底拆开。