专业书籍精读 · Generative AI System Design Interview · 第 1 章
Generative AI System Design Interview · Ch 1 · Ali Aminian, Hao Sheng & Alex Xu · 2024
你让 AI 补完一句邮件、帮你写周报、按一句话画张图——这些产品背后都不只是「一个聪明的模型」,而是一整套系统。这本书专讲怎么设计这类系统,第 1 章先给一张通用的施工图:拿到「做一个会生成东西的产品」这种活,该按什么顺序想问题,哪一步最容易翻车。
以前的 AI 更像分拣员:给它一张照片,它说「猫」还是「狗」——答案只有一个,对错一目了然。现在的 AI 像厨师:你说「做个番茄炒蛋」,他能端出一百种都说得过去的版本,没有标准答案。听着只是换了个活儿,可对造系统的人来说,这一下把三条最基本的规矩全掀翻了。
第一,没法判卷。 分拣员对不对,跟答案一比就知道;厨师做得好不好,得有人尝,而「好吃」本来就人人不同。
第二,开始按字数收钱。 以前做一次判断几乎不花钱;现在它每吐一个字都在烧算力,一个爱啰嗦的版本能把账单翻几倍。
第三,它出错时不喊疼。 老式系统坏了会报错、会卡住;现在这个会一脸认真地把错的说得特别顺——你不去核对,根本看不出来。
这一章的核心,就是把「造一个这样的产品」拆成七步,每步回答一个很具体的问题:① 先问清要什么——多快出结果、每次能花多少钱、什么话绝对不能说;② 这活到底是让它写字、画图还是配音,把进去什么、出来什么定死;③ 备料,数据从哪来、脏的怎么洗;④ 挑做法(下面单说);⑤ 试吃——凭什么说这一版比上一版好;⑥ 上菜,把它放到真实用户面前,还得又快又便宜;⑦ 盯着,它会随着世界变化悄悄变差。
第四步最值钱的其实是一句省钱的话:本事有四级台阶,先从最便宜的一级试,不够再往上爬。
一级,好好跟它说话——把要求写清楚,几小时就试完了。二级,给它一摞资料现查——回答之前先翻自家文档,治「它不知道你们公司的事」。三级,专门培训它——拿几百上千条自己的例子调教一遍,治「知道,但口吻不对、格式不对」。四级,从头养一个——月级的时间、成千上万张显卡,绝大多数团队这辈子用不上。越往上效果越可控,但花的钱和时间可能差出上千倍。
做生成式产品,难的不是找一个更聪明的模型,而是三条旧规矩全变了:没有标准答案,所以得自己定一套「怎么才算好」;每个字都在花钱,所以省钱是设计问题、不是财务问题;它出错时一脸认真,所以必须有人(或另一个模型)专门去核对。剩下的,照那七步一步步来。
想进到具体机制、记号和示意图? → 切到精读版
你以为生成式系统设计考的是「选哪个模型」,其实考的是模型之外的一切。本章是全书总纲,把「设计一个会生成内容的系统」拆成七步——澄清需求、定义成生成式任务、数据准备、模型开发、评估、部署与服务、监控与持续改进;并点破它与同系列上一部《ML 系统设计面试》的三处根本差别:评估没有标准答案、成本按 token 走、失败方式是「错得流畅」。这三点决定了后面十道真题的几乎所有取舍。
这是 Aminian、Sheng 与 Xu《Generative AI System Design Interview》(2024)Part I 唯一的一章,也是后面 Ch2–11 十道真题共用的模板。它上承同系列《ML 系统设计面试》的七步框架,但换了对象:那一部设计的是判别式系统(输出是一个标签或一个分数),这一部设计的是生成式系统(输出是一段序列、一张图、一段视频)。对应现实里的智能补全、机器翻译、对话助理、RAG 问答、文生图与文生视频这一整类产品。
拿到「设计一个 ChatGPT」「设计一个文生图产品」这种题,最常见的失败是一头扎进模型架构,聊 Transformer 多少层、扩散跑多少步——技术上不算错,却跳过了真正决定成败的几件事:延迟预算是多少(补全型要赶在用户下一次击键前出结果,业界常压在几十到一百毫秒;对话型首 token 等几百毫秒可以忍,但必须持续吐字)、单次请求能花多少钱、凭什么说这一版比上一版好、上线后怎么发现它在悄悄变坏。
更根本的痛点是失败方式变了。判别式系统错了,错得「显眼」:概率偏了、指标掉了、告警响了。生成式系统错了,错得流畅:HTTP 200、延迟正常、错误率为零,只是内容是编的。没有任何一个基础设施指标会告诉你这件事。 不解决它的后果是:一个 demo 惊艳、上线三个月后被用户截图挂到社交媒体上的系统。
判别式模型把输入映射到一个有限的输出空间;生成式模型的输出空间是组合爆炸的——一段 500 token 的回答,可能性大致是词表大小的 500 次方量级(|V|^500,这里只要知道「大到不可能枚举」就够了)。三个后果贯穿全书:
(一)没有唯一正确答案,所以没有 accuracy 可算。两个回答可以都对、都好,只是风格不同——评估必须被设计出来,而不是选一个现成指标。
(二)成本从「一次推理」变成「按 token 计量」。 判别式模型一次前向就出结果,单次成本近似常数;生成式模型要自回归地吐 N 个 token,就是 N 次前向——输出长度直接等于成本,也直接等于延迟。这条约束在后面每一章都会回来咬人。
(三)失败是流畅的。 判别式模型不确定时会给出接近 0.5 的概率,这个信号能拿来设阈值、转人工;生成式模型不确定时照样一字一句说得很顺,置信度不外显。所以生成式系统必须额外造一层可见性——引用、接地检查、护栏、抽样复核——才知道它什么时候错了。
和上一部的框架对照,最显眼的是两处变化:
特征工程基本退场。 判别式系统里最费工的那一步——把原始数据算成一列列特征——在生成式系统里被两件事取代:训练侧的数据策展(去重、过滤、配比)与推理侧的上下文构造(检索什么、放在提示的哪个位置、怎么在上下文窗口里排下)。上下文窗口就是新的特征预算:它有硬上限,塞什么、不塞什么是设计决策。
评估从一个环节变成一条主线。 上一部的评估是「离线算指标 → 线上 A/B」,两步就交代清楚;这一部因为没有标准答案,评估本身要先被设计出来:先定义什么算好,再决定谁来判、判多少条、怎么控成本。书里十道真题,几乎每题都要单独配一套。
澄清需求这一步在生成式题里比判别式题更重,因为要钉死的是四条互相打架的预算:
判据很硬:这四条没钉死之前,谈模型选型都是空的。
第四步「模型开发」在生成式系统里很少意味着「从头训一个」,而是在一条能力阶梯上选一级:提示工程 → RAG → 微调 → 继续预训练 / 从头训。每上一级,可控性变强,周期与单位成本各涨一个量级。
选级的判据朴素得出人意料:先问这一级治的是不是你的病。模型「不知道你们公司的事」是知识缺口,该上 RAG;「知道,但口吻不对、格式不对、不肯按流程走」是行为缺口,该上微调。把这两件事搞反——用微调去灌知识、用提示词去纠行为——是这行最常见也最贵的错。
三条路并用。自动指标(BLEU / ROUGE 比对参考答案、困惑度、图像用 FID)便宜到可以每次提交都跑,但它只量表面相似度,对开放式回答几乎失效——换一种说法说同一件事,分数会掉。模型裁判(LLM-as-judge)拿一个强模型按评分标准打分,能规模化到几万条、几分钟出结果,代价是它自带偏好:更爱长回答、受选项顺序影响、也偏爱同家族模型的输出。人工评审最准,但一条几十秒到几分钟,成本决定它只能抽样。
现实做法是分层:模型裁判跑全量当日常回归,人工抽样校准裁判本身,线上再用 A/B 或并排对战(Elo 评分)看真人偏好。一条可直接抄走的技巧来自 KDDI 做 RAG 应用的实践:把裁判评分从 1–5 分改成二元通过 / 不通过以压低方差,并按「文件格式 × 媒体构成」二维网格抽样,把评估工作量砍掉 75%。
生成式服务的延迟不能用一个数概括,至少拆成 TTFT(首 token,决定「它有没有反应」的观感)与 TPOT(每个后续 token 的间隔,决定吐字跟不跟得上阅读——人的舒适阅读速度大致每秒十几个词)。这解释了为什么流式输出是几乎所有对话产品的默认:它把用户感知的等待从「总时长」压缩成 TTFT。
服务侧的三招全围着 token 转:连续批处理(把不同请求的解码步拼进同一批,GPU 不空转)、KV 缓存 / 前缀缓存(相同的系统提示只算一次)、量化与蒸馏(用更小的模型换单位 token 成本)。开源推理引擎 vLLM 把前两者直接写成了卖点:用 PagedAttention 管理注意力的键值显存,加上「连续批处理、分块预填充、前缀缓存」。
监控要盯的也不止 5xx:质量漂移(裁判分数缓慢下滑)、成本漂移(平均输出长度悄悄变长)、护栏命中率与用户否决率(重试、点踩)。
表 1 · 能力从哪来:四级阶梯(周期与成本为业界常见量级,非书中数字)
| 提示工程 | RAG | 微调 / PEFT | 继续预训练 / 从头训 | |
|---|---|---|---|---|
| 治什么病 | 任务没说清、格式要求 | 知识缺口:不知道你们的事、时效性 | 行为缺口:口吻、格式、流程遵从 | 领域语言本身不在分布内 |
| 上手周期 | 小时 | 天 ~ 周 | 周 | 月 |
| 要准备什么 | 几十条示例 | 语料入库 + 检索与重排一整套 | 几百 ~ 上万条高质量样本 | TB 级语料 + 千卡量级算力 |
| 代价 | 可控性最弱,提示一长就贵且脆 | 每请求多一跳检索延迟,上下文变长推高账单 | 要维护训练与版本流水线;换基座要重来 | 绝大多数团队不划算 |
表 2 · 三条评估路线:谁来判、判得起多少
| 自动指标 | 模型裁判(LLM-as-judge) | 人工评审 | |
|---|---|---|---|
| 怎么打分 | 比对参考答案(BLEU / ROUGE / FID / 困惑度) | 强模型按评分标准逐条判 | 真人打分或并排选优 |
| 单条成本 | 几乎为零 | 一次模型调用 | 几十秒 ~ 几分钟人力 |
| 规模 | 全量、每次提交都能跑 | 万条级、几分钟 | 只能抽样 |
| 挡得住 | 格式崩坏、明显退化 | 相关性、忠实度、指令遵从 | 细微事实错误与体验差异 |
| 挡不住 | 换个说法说对会被判低分 | 自带长度 / 顺序 / 同家族偏好 | 标注者之间不一致、且贵 |
这一章的价值是给了一套跨产品的共同语言:无论做补全、翻译、对话、RAG 问答还是文生图,都落到同样几个问题上——延迟与成本预算多少、能力从阶梯哪一级来、评估谁来判、坏了怎么被看见。它也对应着真实团队的分工:检索与索引、推理服务(vLLM、TensorRT-LLM 这类引擎)、评估平台、安全护栏——今天这四摊活各自都是独立岗位。
70+ 个模型、超过 1000 万次对话请求,收集了超过 150 万条真人投票;自动化路径则写明是「prompt strong LLMs like GPT-4 to act as judges」。印证了评估要被设计出来、且必须人机分层。lm-sys/FastChat README ↗25%、端到端延迟下降 38%、TTFT 改善约 18%、评估工作量减少 75%。印证了评估设计本身就是工程量大头。Google Cloud Blog「How KDDI built Buffmee」↗1000 token,全站每次请求都要付一次;到百万日活量级,这是把架构决策直接写进账单。① 全书总纲:七步——澄清需求、定义成生成式任务、数据准备、模型开发、评估、部署与服务、监控与迭代;而且它是个圈,不是直线。
② 与判别式系统的三处根本差别:没有标准答案、成本按 token 走、失败是流畅的。
③ 输出长度同时等于成本和延迟,是贯穿全书的硬约束。
④ 特征工程退场,换成数据策展(训练侧)与上下文构造(推理侧)——上下文窗口就是新的特征预算。
⑤ 第一步要钉死四条互相打架的预算:延迟、成本、质量、安全。没钉死之前谈模型选型都是空的。
⑥ 能力四级阶梯:提示 → RAG → 微调 → 预训练。知识缺口上 RAG,行为缺口上微调,搞反最贵。
⑦ 评估要分层:自动指标跑全量、模型裁判跑回归、人工抽样校准裁判、线上用 A/B 或并排对战看真人偏好。
⑧ 延迟拆成 TTFT 与 TPOT;服务优化三招是连续批处理、KV / 前缀缓存、量化蒸馏。
⑨ 因为失败不报错,生成式系统必须额外造一层可见性:引用、接地检查、护栏命中率、用户否决率。