按下回车之后,
AI 的肚子里发生了什么
三个日常困惑的答案都在这一章:为什么第一个字等半天,后面的字却刷刷地出? 为什么聊得越久越慢越贵?想在自己电脑上跑 AI,显卡够不够? 顺便讲清两个高频词:Prefill(读题)、 KV Cache(草稿纸)。
3.1 你按下发送后,后台跑了六步
先看全景。你在聊天框打一句话、点发送,后台实际发生六件事——包括你看到的「打字机效果」是怎么来的:
最后一步「边写边发」就是你看到的打字机效果:模型每写完一个字就立刻推给你(流式返回), 而不是憋完一整段。所以你感觉的「等待快慢」,主要是下一节的「第一个字」决定的。
3.2 为什么第一个字最慢:它得先「读题」
回答之前,AI 要先把你的问题 + 系统设定 + 之前全部聊天记录一口气读完——这一步叫 Prefill。好消息:读题是并行的,所有积木同时处理; 坏消息:题目越长,这一口就越大。所以 首字延迟(TTFT) 大致跟你的输入长度成正比——这也是为什么超长的系统提示词会让开头变慢。
读题的同时它会把要点记在一张「草稿纸」上(KV Cache,3.4 节), 之后写答案就不用回头重读了。
3.3 一个字一个字往外蹦,快不起来
第一个字出来后,AI 进入「写答案」循环(Decode): 写一个字 → 拼回句尾 → 算出下一个字的概率表 → 从表里抽一个 → 再写。 每个字都要跑一遍完整计算,而且没法并行——第 N 个字得等第 N-1 个字抽完才知道。
这就是 1000 字的回答再快也要等一阵的原因;也是「推理模型」(2.9 节)先长篇打草稿会更慢的原因——草稿也是字,也是一个个蹦出来的。 写字的速度用 TPS(每秒字数)衡量。
3.4 草稿不重抄:提速第一功臣
写每个字都要「回顾」之前全部内容。要是每写一个字就把前面所有内容重算一遍,代价会平方级爆炸。 解决办法简单粗暴:KV Cache——算过一遍的内容存进草稿纸,以后只算新字。 写字速度立刻从「越写越慢」变成「匀速前进」。
3.5 一车拉多人,和更多提速术
显卡的天性是「一次干一大批活才划算」。批处理就是把多个用户的请求 拼成一车一起算:每人多等一点点,单卡吞吐翻好几倍。更进阶的「连续批处理」还支持随时上下车——这是 vLLM 等推理框架的核心。
🔮 抄近道(投机解码)
让小模型先一口气猜 4~8 个字,大模型一次性验收:全对就白赚,错了从错处重来。串行的「一字一算」被局部打破,速度常翻倍,且结果和大模型亲自写的一字不差。
♻️ 读题缓存(Prefix Cache)
同一个系统提示词/文档前缀,读题结果直接复用——「重读」变「续读」。企业应用里同一句系统提示被调用上万次,省得非常可观。
✂️ 多卡分工
把一层切开多卡同时算(省时间),或把层分到多卡(省显存)。代价是显卡之间要不停传话。
3.6 书桌大小:AI 一次能看多少字
AI 一次能「看见」的字有硬上限,叫上下文窗口(4K / 128K / 1M 块积木)。 把它想成一张固定大小的书桌:系统设定、全部聊天记录、你的新问题、还有它将写的答案,都得摆在这张桌上。
摆不下怎么办?要么把最早的对话收进抽屉(截断——AI 从此「看不见」它们), 要么把旧内容压缩成便签再摆回桌上(摘要,下一章的主角)。
3.7 行李压缩:把大模型塞进你的显卡
模型文件动辄几十上百 GB,家里的显卡装不下怎么办?量化——压缩打包: 把每个数字从 16 档精度压成 4 档存储。体积砍到四分之一,速度反而更快(要搬的数据少了),代价是轻微变笨。
单次请求讲完了。但聊天是连续的——历史消息怎么带?为什么它记得上一句却忘了第一句?下一章把「上下文、会话、记忆」三个最容易混淆的词彻底拆开。