:RAG 系统从 0 到 1(10 题))
场景设计题和手撕代码的评分逻辑完全不同。手撕题看每一步对不对,场景题看的是分层:面试官抛一个模糊的业务场景,他要听你把问题拆成几层、每层有哪些选项、你选了哪个以及为什么。最差的回答是背功能清单,「我们会做切分、做向量化、做检索」,这句话零信息量,因为人人都会说。中位的回答是给方案但不给理由。拿到高分的回答长这样:先在白板上画分层架构,再沿着数据流走一遍,在两三个有分叉的路口停下来讲权衡,配上数字。数字尤其值钱:块大小 512 token、overlap 设 10% 到 20%、粗排 top 20 精排 top 5,这种张口就来的数字说明你真上线过,不是看博客背的。题目结构说明:每题四部分。考点定位讲面试官到底在筛什么;答题框架是白板上先画什么后讲什么的顺序;参考架构与关键决策给一套能落地的方案,带具体数字和决策理由;追问链是讲完方案后 80% 会跟上的问题,附一句话答法。伪代码只在检索链路这种画图说不清的地方给。标记:⭐ 高频(出现率过半)、🔥 近两年新增。Q1 开放题:给公司内部 10 万份文档建知识问答,怎么设计?⭐考点定位:几乎所有 RAG 面试的第一题,也是定调题。面试官在筛三件事:能不能先问澄清问题(文档什么格式、多少并发、允不允许外部 API)、有没有分层意识(离线链路和在线链路分开)、知不知道落地时死在哪(权限、更新、评估)。一上来就报 LangChain 组件名的,基本被归为教程选手。答题框架:先反问三个澄清问题,再画分层图,最后按数据流讲一遍并主动说出两个风险点。顺序别乱:澄清 - 架构 - 数据流 - 风险。参考架构与关键决策:离线(文档侧,天级跑批) 在线(查询侧,秒级响应) ┌────────────────────┐ ┌────────────────────┐ │ 文档接入: Confluence/ │ │ 查询理解: 改写/指代消解 │ │ PDF/Word - 纯文本 │ │ ↓ │ │ ↓ │ │ 混合检索: 向量+BM25 │ │ 预处理: 去页眉页脚、 │ │ 粗排 top 20 │ │ 表格转 Markdown │ │ ↓ │ │ ↓ │ │ Rerank 精排 - top 5 │ │ 分块: 递归切分 │ │ ↓ │ │ ↓ │ │ 阈值过滤 + 兜底 │ │ Embedding + 入库 │ ─── │ ↓ │ │ (向量库 + 倒排索引) │ 共享 │ Prompt 拼接 - LLM │ │ ↓ │ 存储 │ ↓ │ │ 增量更新: 文档指纹去重 │ │ 引用标注 + 日志埋点 │ └────────────────────┘ └────────────────────┘关键决策:10 万份文档按平均 20 页算约 200 万块,单机 FAISS 够用,但考虑到后续权限过滤和增量更新,选 Milvus 或 ES 更稳;embedding 选中文强的 BGE 系列(1024 维);10 万文档全量重建索引要数小时,所以用文档内容 hash 做指纹,只重灌变化的文档。风险点主动提两个:权限(Q8 展开)和评估(Q9 展开)。追问链:「一天后有人改了文档,怎么生效?」- 指纹比对定位变更文档,删旧块插新块,分钟级;全量重建留给周末。「为什么不直接拿长上下文模型塞文档?」- 长上下文解决单次塞多少,检索解决从海量里选哪些,10 万份文档约 2 亿 token,塞不动也检索不了。「先做