你想开一家“智能餐厅”:顾客进门报一句“我想吃点开胃的”,后厨不用人动手,自动从食材库里翻出合适的食材,交给主厨现场加工,几十秒就能把菜端上桌。这家餐厅,就是我们要建设的 RAG(检索增强生成)客服系统——把企业的知识文档装进一个“智能大冰箱”,用户提问时系统先翻冰箱找答案素材,再让大模型“主厨”组织语言回答问题。 但任何一家餐厅,都不可能先买灶台再想菜单。你首先要回答两个问题:谁来吃饭?他们的用餐体验如何?这对应需求分析。接着你要画一张蓝图:后厨分成几个区域、冰箱要多大、高峰期能扛住多少人?这对应架构设计。本文用“开一家智能餐厅”的完整故事,带你走完从用户旅程映射、知识域划分、技术栈选型,到容量规划、风险评估、迭代路线图与持续优化的七步全程。你会发现,需求与架构不是画在文档里的漂亮图表,而是决定系统能不能活下来的生存蓝图。

岗位关联

掌握这套方法论,你就能在项目起步阶段把“业务目标”翻译成“技术蓝图”,让 RAG 系统少走三个月返工弯路——这是从技术原型走向规模生产的核心能力。

目录
  1. 可视化演示
  2. 用户旅程映射
  3. 知识域划分
  4. 技术栈选型
  5. 容量规划
  6. 风险评估
  7. 迭代路线图
  8. 持续优化
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

用户旅程映射与触点分析 用户痛点与RAG解决映射 知识域划分与模块化架构 统一检索层 MVP场景:售前FAQ + 产品信息查询 (高流量 × 高自动化 × 低风险)

用户旅程映射

你决定开一家智能餐厅。开业前,你做了件让合伙人看不懂的事:站在门口拿小本子记笔记。顾客从哪进来?等位时在刷手机还是干瞪眼?报菜名时磕巴了吗?菜端上来先看颜色还是先问分量?别笑,这些细节决定了你要不要设外卖窗口、要不要排队叫号系统、菜单要不要配图。在买任何厨具之前,你得先把“顾客的一天”完整画出来。

这套方法在 RAG 客服系统里叫用户旅程映射(User Journey Mapping)。它把一次完整的人机对话拆成一个个触点(Touchpoint):用户从哪个入口进来、输入问题时是否犹豫、等待检索结果时会不会催促、得到答案后是否满意、不满意时会不会追问或转人工。每个触点都是一次体验的评分点,也都是架构设计要支撑的服务点。

旅程映射要产出三类东西:场景剧本,描述“用户在什么情境下带着什么意图来提问”,比如“深夜十一点,用户刚收到破损快递,怒气冲冲来索赔”;痛点清单,标注每个触点的摩擦点,比如“超过三十秒没有首响,用户直接流失”;价值目标,把体验量化为可验收的指标,比如“首响时间小于两秒、一次解决率大于八成”。

还记得你站在门口的小本子吗?第一次和顾客说“您好”的时机、递菜单的方式、上菜的节奏,都是触点。需求分析阶段不画这张旅程图,架构师就只能靠拍脑袋决定厨房多大、装几个传菜窗口——等开业再改,代价是拆墙重砌。

S=∑i=1nwi×ei\displaystyle S = \sum_{i=1}^{n} w_i \times e_i
用户整体体验分 S,等于每个触点体验分 e_i 乘以该触点权重 w_i 的总和。
  1. 体验分 S用户对整段对话体验的加权总分,是需求分析阶段定下的北极星指标。
    SS
  2. 触点计数 i 与总数 ni 从 1 数到 n,n 是旅程中识别出的触点总数,比如“进入页面、发起提问、等待回复、获取答案”共四个。
    i=1,2,…,ni = 1, 2, \dots, n
  3. 触点体验分 e_i第 i 个触点上用户的主观感受打分,例如“等待回复”只有 5 分。
    eie_i
  4. 触点权重 w_i第 i 个触点对最终体验的影响比重,所有权重之和为 1。
    ∑i=1nwi=1\sum_{i=1}^{n} w_i = 1
  5. 加权求和每个触点的分数乘权重再累加,得到整体体验分,越接近 10 说明旅程越顺滑。
    S=w1e1+w2e2+⋯+wnenS = w_1 e_1 + w_2 e_2 + \cdots + w_n e_n

知识域划分

智能餐厅的后厨不能是一个大平间。凉菜、热菜、汤品、甜品,各有各的食材、调料和保存温度。你把后厨分成四个独立小间:凉菜间恒温冷藏、热菜间猛火快炒、汤品间文火慢炖、甜品间深冷锁鲜。每间配独立冰箱和案板,互不串味,厨师闭着眼都知道去哪间拿什么。

对应到 RAG 客服系统,这就是知识域划分。企业的知识库同样五花八门:商品参数、价格政策、售后规则、物流时效、活动玩法。如果全部倒进一个“大杂烩”索引,用户问“能退款吗”时,检索结果会同时混入活动规则和商品介绍,模型只能对着四不像的素材胡编,答非所问。

知识域划分包含四个决策。第一是业务模块:按组织架构和用户意图切分知识,如商品域、订单域、物流域、售后域。第二是知识分类:域内部再按类型分,政策、FAQ、操作指南各自归位。第三是权限边界:区分对客可见与仅内部可见的知识,防止模型把内部赔付规则当话术讲给用户。第四是检索粒度:决定知识切片(Chunk)的大小——切太粗命中噪声多,切太细上下文断裂。这四条线,就是架构图上“厨房隔间”的边界线。

回到餐厅:知识域划分决定了冰箱贴什么标签、案板放哪个位置。看似是收拾屋子的小事,却决定了高峰时段厨师能不能三秒摸到一块姜。架构层面,“想清楚每个域的数据源、更新节奏、访问权限”比急着堆字库重要得多——分类不清的厨房,菜越多越混乱。

C=K支撑K需求\displaystyle C = \frac{K_{\text{支撑}}}{K_{\text{需求}}}
知识覆盖率 C 等于已被知识库支撑的需求数 K_支撑 除以用户旅程中梳理出的总需求数 K_需求。
  1. 覆盖率 C衡量知识库对业务需求的支撑程度,C 越接近 1 表示库越完备。
    CC
  2. 被支撑的需求数 K_支撑用户旅程里梳理出的高频问题中,知识库已经能给出可靠答案的数量。
    K支撑K_{\text{支撑}}
  3. 总需求数 K_需求旅程映射中识别出的所有知识诉求总数,是需求清单的规模线。
    K需求K_{\text{需求}}
  4. 比值含义取商后 C 落在 0 到 1 之间,低于 0.8 时建议在 MVP 阶段就优先补库。
    C=K支撑K需求∈[0,1]C = \frac{K_{\text{支撑}}}{K_{\text{需求}}} \in [0, 1]

技术栈选型

现在该买厨具了。你走进厨具城,导购热情推荐一台能连 WiFi、会跳舞的顶级电灶——但你后厨电压只有 220 伏,团队里没人用过触屏灶,坏了还要等三周进口配件。你最后选了那台皮实耐操的大火灶:够用、好修、团队闭着眼都会操作。买完你才明白,选厨具不是选广告,是选“十年不换的伙计”。

技术栈选型是同样的逻辑。RAG 客服系统的核心选型点有四个:数据存储——关系型数据库存订单状态,向量数据库存知识切片,Redis 做热点缓存;向量检索——FAISS 适合离线小规模召回,Milvus 或 Elasticsearch 适合在线大规模服务;模型部署——调用云端大模型 API 起步快,私有化部署开源模型则数据不出域;应用框架——LangChain 等框架的成熟度,必须与团队的熟悉程度匹配。

选型不是追最新,而是同时画两张表:延迟预算和运维账本。每个环节都会往链路里加时间、加故障点:一次提问要经过“检索、重排、生成”三站。如果产品要求首响两秒内,检索必须控制在 200 毫秒、重排 100 毫秒、生成最多一秒半——预算超了就得砍环节、加缓存或换方案。运维账本同理:每个组件都是一份要人保养的保修单,新框架社区小、招人难、踩坑没人答,都是隐性成本。

厨具城的教训在架构里同样成立:最好的技术不如最合适的组合。选每一件“厨具”前,先问三个问题——团队会用吗、坏了修得起吗、放进链路后总时间还够吗?三个答案都是“是”,这东西才配进你的厨房。

T总=T检索+T重排+T生成\displaystyle T_{\text{总}} = T_{\text{检索}} + T_{\text{重排}} + T_{\text{生成}}
用户从提问到看到回答的总延迟 T_总,等于检索延迟、重排延迟与生成延迟之和,选型时必须让这个和小于产品响应上限。
  1. 总延迟 T_总用户可感知的端到端响应时间,是服务 SLA 的核心指标。
    T总T_{\text{总}}
  2. 检索延迟 T_检索向量数据库召回候选知识片段所花的时间,数据量翻倍时它最容易失控。
    T检索T_{\text{检索}}
  3. 重排延迟 T_重排重排模型对候选片段精排打分的时间,通常是小几十毫秒量级。
    T重排T_{\text{重排}}
  4. 生成延迟 T_生成大模型组织最终回答的时间,往往占大头,是优化的主战场。
    T生成T_{\text{生成}}
  5. 预算约束选型时必须保证总延迟不超过产品规定的响应上限,否则就要优化某一环节。
    T总≤T上限T_{\text{总}} \le T_{\text{上限}}

容量规划

你开始算账:预计一天来 2000 个客人,但没人会均匀分布——工作日中午十一点半到一点是高峰,周末晚上六点到八点是另一个高峰。如果按“平均每小时 83 人”布置 10 张桌子,高峰时段 300 人同时涌进来,前厅瞬间失控。你意识到,餐厅的规模不能按平均值定。

容量规划解决的就是这个问题:不算平均,算峰值,再乘上余量。对 RAG 客服系统,核心指标是 QPS(每秒查询数)。你要估算:日活跃用户(DAU)多少人、人均每天问几次、请求集中在哪几个小时、峰值因子是多少(通常取 3 到 10 倍)。还要考虑重试放大——一旦系统变慢,用户会疯狂重试点击,流量自己会膨胀,等于在伤口上撒盐。

容量规划还要覆盖存储和成本测算:知识切片的向量索引占用空间、对话日志的归档成本、GPU 实例的规模与费用。这些数字直接决定架构形态——是上一台大机器还是三台小机器、要不要加缓存层、日志保留三十天还是九十天。成本核算不是财务的事,是架构师的事:每一个 QPS 背后都是真金白银。

回到餐厅的账本:容量规划不是算“平均每天多少人”,而是算“最挤的那十分钟多少人”,再预留三成空位和一叠备用折叠桌——折叠桌就是架构里的限流和降级方案。算错了,不是在高峰期崩盘,就是在淡季浪费租金。

QPS峰值=D×P3600×H\displaystyle \text{QPS}_{\text{峰值}} = \frac{D \times P}{3600 \times H}
峰值 QPS 等于日总请求数 D 乘以峰值因子 P,再除以高峰小时数 H 换算出的总秒数。
  1. 峰值 QPS系统必须扛住的每秒最大请求数,是容量设计、集群规模的基准值。
    QPS峰值\text{QPS}_{\text{峰值}}
  2. 日总请求数 D日活跃用户数乘以人均提问次数,例如 20 万用户每人 3 次,D 就是 60 万。
    DD
  3. 峰值因子 P反映请求不均衡的放大系数,取 3 到 10,节假日大促时取更高。
    PP
  4. 高峰小时数 H流量集中的时长,比如客服场景 8 小时,突发活动场景可能只有 1 小时。
    HH
  5. 单位换算3600 是一小时的秒数,把日请求分摊到高峰时段内,得到每秒请求数。
    D×P3600×H\frac{D \times P}{3600 \times H}

风险评估

开业前最后一晚,你把合伙人拉来开会:“如果停电怎么办?如果主厨请病假怎么办?如果冷冻柜坏了、三百斤牛肉全臭了怎么办?”合伙人说你乌鸦嘴,你却说:问题迟早会来,我们赌的不是它来不来,而是它来的时候我们倒不倒。

风险评估就是提前问“什么会杀死这个系统”。RAG 客服系统有四类常见风险。依赖风险:大模型 API 抖动、被限流、突然涨价甚至下架;数据风险:知识库内容过期,模型却自信地把错答案讲给用户;性能瓶颈:检索在数据量翻倍后从 200 毫秒恶化到 2 秒;合规风险:用户隐私数据未经脱敏就进向量库,一旦泄露就是事故。

每个风险都用两个维度打分:发生概率 P 和影响程度 I,二者相乘得到风险值 R。风险值高的先做预案:API 可能挂就配一个本地小模型兜底;知识可能过期就建每周巡检任务;检索可能变慢就上分片和缓存;隐私数据敏感就做脱敏与权限隔离。风险值低的也要记入监控清单,防止它某天悄悄升级。

风险评估不会让风险消失,但它让团队从“赌徒”变成“消防员”——提前知道哪栋楼最容易起火,把灭火器放在正确的走廊里。餐厅后厨的灭火器和备用发电机,就是架构里的熔断器、降级开关和备用模型。

R=P×I\displaystyle R = P \times I
风险值 R 等于风险发生概率 P 与影响程度 I 的乘积,用于给风险排序、决定先处理谁。
  1. 风险值 R给风险排序用的数值,越大越要优先投入预案资源。
    RR
  2. 发生概率 P该风险在未来出现的可能性,取值 0 到 1,越接近 1 越可能发生。
    P∈[0,1]P \in [0, 1]
  3. 影响程度 I风险真发生后造成的损失大小,用 1 到 10 打分,10 代表伤筋动骨。
    I∈[1,10]I \in [1, 10]
  4. 相乘排序P 与 I 相乘后按 R 从大到小排优先级,为排在前面的风险写应对预案。
    R=P×IR = P \times I

迭代路线图

你没有立刻租 500 平的店面,而是推着一辆小推车,在学校后门口支了个摊,只卖三样:牛肉面、凉皮、酸梅汤。验证一周后发现,牛肉面排队最长,凉皮几乎无人问津。你砍掉凉皮,租下 30 平的小店,菜单扩到十样。六个月后,才敢开大店。小摊看似寒酸,却用最低成本换来了最真实的答案。

这就是迭代路线图的核心思想:最小可行版(MVP)先行。RAG 客服系统的 MVP 是一条纵向打通的最小链路——只覆盖最高频的两三个知识域(比如物流查询和订单状态),用最简单的“检索加生成”架构跑通,配上基础日志。它的目标不是完美,而是验证三件事:回答质量用户买不买账、延迟能不能接受、维护成本是否可控。

路线图还要拆里程碑与发布策略。里程碑按“可演示、可验证”来拆:第一周搭好知识导入和检索,第二周接入模型生成,第三周上线灰度。发布采取灰度:先放 5% 的流量,观测质量指标,确认无误再逐步放到 100%。每一步都带上反馈回路——把“回答失败、用户转人工、用户点踩”这些信号回流到需求池,成为下一轮迭代的输入。

小推车之后的每一步,你都在验证而不是赌博:先小后大、先窄后宽、每一版都带着真用户的声音往前走。“先开小摊”不是怂,而是用最小成本换最真实的答案——这正是从技术原型到规模生产的正确姿势。

T迭代=T开发+T验证+T反馈\displaystyle T_{\text{迭代}} = T_{\text{开发}} + T_{\text{验证}} + T_{\text{反馈}}
一个迭代周期的时间 T_迭代,等于开发时间、验证时间与反馈吸收时间之和,三段时间要一起压缩。
  1. 迭代周期 T_迭代从需求提出到改进效果可见的完整周期,控制它是保持敏捷的关键。
    T迭代T_{\text{迭代}}
  2. 开发时间 T_开发完成本轮功能改动的时间,比如新增一个知识域或优化提示词模板。
    T开发T_{\text{开发}}
  3. 验证时间 T_验证灰度期间观测指标、判断效果的时间,压得太短会得出错误结论。
    T验证T_{\text{验证}}
  4. 反馈时间 T_反馈把线上日志和用户反馈消化成下一轮需求输入的时间,常被忽视。
    T反馈T_{\text{反馈}}
  5. 迭代节奏想让周期变短,三段时间要一起压缩,只砍开发时间是自欺欺人。
    T迭代→min⁡T_{\text{迭代}} \to \min

持续优化

餐厅开业第 30 天的晚上,打烊后你没有走。你翻看数据:牛肉面卖了 200 碗,但备注“微辣”的顾客里有三成在评价里写“太辣”;酸梅汤复购率高得离谱,备货却只备了昨天的量,晚上八点就售罄了。你掏出本子记下两行字:调低辣度、加大酸梅汤备货。第二天,营业额涨了 8%。

持续优化就是这套“每日复盘”的工程化版本。RAG 系统上线后,真正的战斗才开始。你需要一套质量指标体系:答案匹配率(检索是否召回正确知识)、首答采纳率(用户是否直接满意)、转人工率、回答置信度。每个指标都要能从线上日志里自动算出来,而不是靠客服主管拍脑袋。

优化循环包含四个动作。日志分析:从失败的会话里挖出共性问题——如果所有“发票”类问题都答错,多半是知识库里的发票政策过期了;知识更新:建立知识库的定期刷新机制,业务一变库必须跟着变;A/B 实验:同一批流量分成两组,对比不同的提示词策略、检索 Top-K 数量或重排阈值,用数据而不是感觉做决策。四步循环往复,直到质量指标收敛到当初定下的价值目标。

餐厅的秘诀不是开业那晚的烟花,而是每个打烊后的复盘。RAG 系统也一样:上线只是马拉松的发令枪,需求分析、架构设计、容量规划、风险评估,最终都要落到这个日夜循环的优化飞轮上——越转越快,越转越准。

Qˉ=1m∑j=1mQj\displaystyle \bar{Q} = \frac{1}{m} \sum_{j=1}^{m} Q_j
系统综合质量分 Q̄,等于 m 个评估样本质量分 Q_j 的算术平均,用于跨版本对比。
  1. 平均质量分 Q̄衡量系统整体回答质量的汇总指标,用于版本之间做横向对比。
    Qˉ\bar{Q}
  2. 样本数 m评估集中用于统计的问答对数量,样本太少结论不可信。
    mm
  3. 单个样本分 Q_j第 j 个问答对的质量分,可以由人工标注,也可以由自动打分模型给出。
    QjQ_j
  4. 求和平均把 m 个样本分累加再除以 m,得到整体平均值,反映系统当前水位。
    Qˉ=Q1+Q2+⋯+Qmm\bar{Q} = \frac{Q_1 + Q_2 + \cdots + Q_m}{m}

AI 应用场景

电商大促前的架构评审会

阶段:容量规划 + 风险评估

解决的问题:传统做法靠“感觉”扩机器,大促当天流量冲上来才发现扛不住,只能手忙脚乱地临时扩容,甚至直接宕机。用容量规划公式提前估算峰值 QPS,再结合风险矩阵给每个薄弱环节写好预案,把“赌大促”变成“算大促”。

具体案例:双十一前,某电商客服团队用“DAU × 人均咨询量 × 峰值因子”算出峰值 QPS 是当前集群容量的 4 倍。他们提前加了一层 Redis 热缓存,给模型 API 配置了双供应商自动切换,并设计了限流降级开关。大促当天系统扛住了 6 倍日常流量,零宕机。

知识库运营团队的“打烊复盘”

阶段:持续优化

解决的问题:知识库静态更新、业务政策一变,模型还在用旧知识自信地犯错,用户投诉率居高不下。把“打烊复盘”自动化,用日志分析驱动知识更新,让知识库永远追上业务的变化。

具体案例:某售后团队建立每周自动化流程:从对话日志中挖出“答非所问”的 Top 主题,自动比对知识库版本,把过期条目送进待办清单。一周内人工介入修补,一个月后转人工率下降了 15%,回答匹配率提升了 12 个百分点。

新业务线 MVP 快速验证

阶段:迭代路线图

解决的问题:新客服系统动辄规划 6 个月,等上线时业务需求早已变化。用 MVP 思维两周跑通最小链路,先验证价值再谈扩张,避免把资源浪费在无人使用的功能上。

具体案例:一家保险公司做 AI 客服,没有贪大求全,只覆盖“保单查询”和“理赔进度”两个最高频知识域,用开源向量库加云端大模型 API 两周打通,灰度放给 5% 的用户。验证首答采纳率达标后,才逐步扩展到新契约、保全等更多域。

Python 演示

python67 行
# -*- coding: utf-8 -*-"""RAG客服系统需求分析与容量规划演练."""  USER_JOURNEY = [    {"touchpoint": "进入页面", "weight": 0.2, "score": 8},    {"touchpoint": "发起提问", "weight": 0.3, "score": 7},    {"touchpoint": "等待回复", "weight": 0.3, "score": 5},    {"touchpoint": "获取答案", "weight": 0.2, "score": 9},] KNOWLEDGE_DOMAINS = [    {"domain": "商品咨询", "needed": 120, "covered": 100},    {"domain": "订单售后", "needed": 80, "covered": 60},    {"domain": "物流查询", "needed": 60, "covered": 58},] RISKS = [    ("模型API抖动", 0.4, 8),    ("知识库过期", 0.6, 6),    ("检索慢查询", 0.3, 7),]  def weighted_experience(steps):    total = sum(s["weight"] * s["score"] for s in steps)    return round(total, 2)  def coverage_rate(domains):    need = sum(d["needed"] for d in domains)    have = sum(d["covered"] for d in domains)    return round(have / need, 3)  def peak_qps(daily_active_users, requests_per_user, peak_factor, busy_hours):    daily_requests = daily_active_users * requests_per_user    return round(daily_requests * peak_factor / (busy_hours * 3600), 2)  def risk_exposure(probability, impact):    return round(probability * impact, 1)  def main():    print("== 1 用户旅程体验分 ==")    exp = weighted_experience(USER_JOURNEY)    print("加权体验总分:", exp, "(满分10)")     print("\n== 2 知识域覆盖率 ==")    cov = coverage_rate(KNOWLEDGE_DOMAINS)    print("当前覆盖率:", cov, "(目标>=0.9)")    for d in KNOWLEDGE_DOMAINS:        print(" -", d["domain"], "缺口:", d["needed"] - d["covered"])     print("\n== 3 容量规划(QPS) ==")    qps = peak_qps(dau=200000, requests_per_user=3, peak_factor=3, busy_hours=8)    print("峰值QPS估算:", qps, "建议预留3倍余量:", round(qps * 3, 2))     print("\n== 4 风险排序 ==")    risks = sorted(RISKS, key=lambda r: risk_exposure(r[1], r[2]), reverse=True)    for name, prob, impact in risks:        print(" -", name, "风险值R =", risk_exposure(prob, impact))  if __name__ == "__main__":    main()
目的:用短短几十行,把需求分析阶段的四个关键计算(体验分、覆盖率、峰值 QPS、风险排序)串成一份可复用的规划脚本,对应正文的四个核心公式。
  1. weighted_experience(steps)对应公式 S = Σw·e,把用户旅程每个触点的体验分按权重汇总成整体体验分。
  2. sum(s["weight"] * s["score"] for s in steps)用生成器表达式累加“权重乘分数”,是加权求和公式的直接翻译。
  3. coverage_rate(domains)计算知识库对所有业务需求的总体覆盖率,对应公式 C = K_支撑 / K_需求。
  4. peak_qps(daily_active_users, requests_per_user, peak_factor, busy_hours)用日活、人均请求、峰值因子和高峰小时数估算峰值 QPS,对应容量规划公式。
  5. risk_exposure(probability, impact)用 R = P × I 计算单个风险的风险值,供排序使用。
  6. sorted(RISKS, key=lambda r: risk_exposure(r[1], r[2]), reverse=True)按风险值从大到小排序,先处理最危险的项。

常见误区

误区用户要什么功能,我就往清单上记什么功能,记满一页纸,需求分析就完成了,剩下交给架构师照着开发就行。

正解需求分析的核心不是“功能堆砌”,而是理解用户旅程和价值目标。就像开餐厅,光把菜名列出来没用,你要知道顾客为什么来、什么时候来、在哪一步会扭头走人。RAG 系统真正要回答的不是“要什么功能”,而是“用户在哪个触点需要什么体验”。功能清单是旅程图的副产品,不是起点。

为何常见:传统软件项目都有“需求文档等于功能列表”的惯性,初学者容易把“收集需求”理解成“记录诉求”,忽略了诉求背后的使用场景。

误区架构选型就该挑最新最火的框架,社区都在讨论它,说明它先进,跟着用肯定不吃亏。

正解技术栈选型像挑厨具:最贵的电灶不一定适配你家的电压。要综合团队熟悉度、运维成本、社区生态和业务规模。RAG 系统中“好用”的标准很朴素:团队能维护、上线能跑稳、出了问题有人修。新框架如果全网找不到踩坑记录,那踩坑的人大概率是你自己。

为何常见:技术圈有“围观效应”,看到别人用新框架就觉得必须跟上,忽略了自身团队的消化能力和业务的实际需要。

误区一天 20 万请求,一天 86400 秒,平均每秒 2.3 个,系统按 5 QPS 设计就绰绰有余了。

正解平均值会杀死系统。餐厅按“平均每天 50 人”装修,周末中午 200 人同时上门就崩了。容量规划必须考虑峰值因子、高峰时段和重试放大:流量在一天内极不均匀,高峰可能是平均值的 3 到 10 倍,系统一慢用户还疯狂重试,真实压力会再翻几倍。永远按峰值加余量设计。

为何常见:平均值最容易计算,数学上“看起来正确”,但流量分布高度偏斜,均值恰好掩盖了最危险的尖峰。

误区风险是上线前才考虑的事,现在先把功能做出来,等架构评审时再让大家提意见、改风险。

正解风险必须在需求分析和架构设计阶段就进入视野,因为架构决策一旦落地,返工成本极其昂贵。就像盖楼前没勘测地质,楼盖到三层才发现地基要换。RAG 系统的依赖风险(API 抖动)、数据风险(知识过期)必须在画蓝图时就设计好预案,而不是等系统上线了再打补丁。

为何常见:风险看不见摸不着,功能需求一看起来就有画面感,人的直觉总是先做看得见的事,把不确定的事往后推。

误区RAG 系统上线那一刻,需求分析的使命就完成了,后续只是服务器的事。

正解RAG 系统的知识库和用户行为都是动态的,需求分析是一个持续循环而非一次性动作。餐厅开业只是开始,每天打烊后的复盘、改菜单、调服务才是经营的本质。持续优化阶段要不断用日志和指标修正当初的需求假设——当初以为用户最关心价格,数据却告诉你他们最在乎物流速度。

为何常见:传统软件以“上线”为终点,而 AI 系统的质量依赖反馈闭环,“上线”只是第一个里程碑。

面试题

Q1. RAG 客服系统需求分析阶段的第一步通常是什么?

单选题 · easy

  • A.选择大模型 API 供应商
  • B.映射用户旅程与关键触点← 正确答案
  • C.搭建向量数据库的集群
  • D.编写后端接口详细文档

答案:B。需求分析要先回答“用户是谁、体验如何”,而不是急着选技术。选 API、搭向量库、写接口都属于架构设计与实现阶段。就像开餐厅,第一步是站在门口观察顾客,而不是先买灶台。

Q2. 知识域划分的主要目的是什么?

单选题 · easy

  • A.减少冗余的代码工作量
  • B.按业务模块组织知识库← 正确答案
  • C.降低服务器运行成本
  • D.增加系统的整体复杂度

答案:B。知识域划分把知识库按业务模块(商品、订单、物流、售后)分治,避免“大杂烩”索引导致答非所问。它不是为了省代码或省钱,而是直接决定检索质量——相当于把后厨分成独立小间,防止串味。

Q3. 容量规划中“峰值因子”的主要作用是什么?

单选题 · mid

  • A.降低存储的额外开销
  • B.放大平均流量模拟高峰← 正确答案
  • C.限制系统的并发连接
  • D.决定模型参数量大小

答案:B。用户请求不会均匀分布,高峰流量可能是平均的 3 到 10 倍。峰值因子就是用来把日平均流量放大成峰值 QPS 的,直接决定集群规模。它是容量规划公式中体现“按峰值设计”思想的关键变量。

Q4. 技术栈选型时,最不应该优先考虑的因素是?

单选题 · mid

  • A.团队当前的熟悉程度
  • B.运维监控的难易程度
  • C.框架社区活跃状态
  • D.框架近期流行热度← 正确答案

答案:D。流行度不等于适用度。团队不熟、没人维护、踩坑没人答,再火的技术也会拖垮项目。选型要像选厨具一样看“会不会用、修不修得起”,而不是看广告打得响不响。

Q5. 风险评估公式 R = P × I 中,I 代表什么?

单选题 · easy

  • A.影响程度打分← 正确答案
  • B.请求调用次数
  • C.用户访问频率
  • D.迭代发布周期

答案:A。R 是风险值,P 是发生概率(0 到 1),I 是影响程度(1 到 10 打分)。相乘后用于给风险排序,值大的先做预案。I 就是“真出事时损失有多大”——就像停电对餐厅来说影响程度高达 9 分。

Q6. 关于 RAG 系统端到端延迟预算,下列哪项正确?

单选题 · mid

  • A.总延迟等于检索加重排加生成← 正确答案
  • B.总延迟等于训练加推理延迟
  • C.总延迟等于吞吐量乘批大小
  • D.总延迟只取决于模型规模

答案:A。一次提问的完整链路是“检索→重排→生成”,总延迟是三者之和。选型时必须让这个和小于产品响应上限,否则要砍环节或加缓存。训练是离线过程,不进入用户可感知的在线链路。

Q7. 灰度发布的主要目标是什么?

单选题 · mid

  • A.用于降低整体部署频率
  • B.小规模流量验证新版本← 正确答案
  • C.增加物理服务器的数量
  • D.完全替代自动化测试

答案:B。灰度先把新版本放给 5% 到 10% 的真实流量,观测质量指标,没问题再逐步放量到 100%。它降低了“全量上新”的回归风险,而不是为了省事或替代测试——相当于新菜先给几桌熟客试吃,再写进菜单。

Q8. 用户旅程映射中需要盘点的“触点”可能包括哪些?

多选题 · mid

  • A.用户输入问题的入口← 正确答案
  • B.等待回复的加载等待← 正确答案
  • C.回答不符合预期的追问← 正确答案
  • D.大模型的训练轮次选择

答案:ABC。触点指用户与系统交互的每个可感知环节——入口、等待、追问都是体验的评分点。训练轮次是模型内部细节,用户根本感知不到,不算旅程触点。就像顾客不会关心后厨用了哪个牌子的锅。

Q9. RAG 客服系统 MVP 版本应包含哪些核心能力?

多选题 · hard

  • A.基础问答链路检索加生成← 正确答案
  • B.高频知识域的完整覆盖← 正确答案
  • C.全部业务领域的全覆盖
  • D.基础日志与质量指标← 正确答案

答案:ABD。MVP 是纵向打通的最小链路:能问能答、覆盖最高频知识、能记录数据,用来验证价值。它刻意不做全业务覆盖——那是后期迭代的事。就像小推车只卖三样面,先验证有人爱吃再扩菜单。

Q10. 关于知识域划分与检索粒度的关系,下列说法正确的是?

多选题 · extreme

  • A.粒度过大会引入无关噪声← 正确答案
  • B.粒度过小会导致上下文断裂← 正确答案
  • C.粒度选择可依赖重排补偿← 正确答案
  • D.粒度与问答场景无关紧要

答案:ABC。检索粒度是切分知识片的粗细。太粗命中噪声多,太细上下文不全;部分场景可适当放宽粒度、靠重排环节精修来兜底。但完全忽视粒度会让检索质量失控——就像后厨不切菜直接整颗下锅,或者剁成碎末夹不起来,都不行。