RAG 与知识库面试模块
RAG 是 AI 应用开发面试里最常被追问的方向,因为它能同时考察数据工程、检索系统、Prompt 设计和业务落地。不要只回答“把文档转向量后检索”,那只是最粗的流程。
标准链路
- 数据接入:PDF、PPT、Word、网页、图片、表格、数据库或内部知识库。
- 文档解析:文本抽取、OCR、版面还原、表格处理、图片说明、编码清洗。
- 清洗与结构化:去页眉页脚、去重复、补标题层级、识别章节、保留来源元数据。
- 切片:按标题、语义段落、Token 长度和业务实体切分,必要时保留重叠窗口。
- 向量化:选择 Embedding 模型,记录版本、维度、归一化策略和语言适配。
- 索引:向量库、关键词索引、元数据过滤、权限字段、更新时间。
- 召回:向量召回、关键词召回、混合召回、多路召回合并。
- 重排:Cross Encoder、LLM rerank 或规则重排,提高相关性。
- 生成:把候选片段、问题、约束和引用格式交给模型。
- 评测:命中率、引用准确率、答案可用率、拒答率、延迟、成本、人工满意度。
高频问题与参考回答
为什么 RAG 不能只靠向量检索?
向量检索擅长语义相似,但对精确词、编号、表格字段、时间、权限过滤和短关键词不一定稳定。生产系统通常会做混合检索:向量召回处理语义问题,关键词或 BM25 处理精确匹配,元数据过滤保证范围正确,再用重排模型做最终排序。
切片长度怎么定?
切片不是固定 500 字就结束。要看文档结构、问题类型和模型上下文。切太短会丢上下文,切太长会引入噪声并增加 Token 成本。常见做法是:先按标题和段落切,再限制 Token 上限;对定义、流程、表格说明保留相邻上下文;用评测集比较不同切片策略的命中率和答案质量。
如何处理 PDF、PPT、图片和网页?
PDF 要区分可复制文本和扫描件,扫描件需要 OCR;PPT 要保留页标题、文本框顺序和备注;图片要做 OCR 或视觉模型描述;网页要清理导航、广告和脚本噪声。关键是保留来源、页码、章节和时间戳,否则回答无法引用和追溯。
RAG 的幻觉怎么降低?
先从召回质量入手:问题改写、多路召回、重排、阈值过滤。再从生成约束入手:要求只基于给定资料回答、引用来源、资料不足时拒答。最后建立评测和人工抽检:如果答案没有引用、引用不支持结论、或跨权限引用,都要判失败。
项目追问清单
- 你的知识库数据从哪里来,更新频率是多少?
- 文档解析失败如何发现,失败文件怎么重试?
- 切片策略为什么这么定,有没有对比实验?
- 向量库选型是什么,数据量、维度、索引类型和查询延迟是多少?
- 是否做了权限过滤,权限是在召回前过滤还是召回后过滤?
- 如何处理相互冲突或过期的知识?
- 如何评估答案是否真的正确?
可落地架构
| 层级 | 组件 | 关键设计 |
|---|---|---|
| 接入层 | 文件上传、网页抓取、数据库同步 | 幂等、去重、权限继承、任务状态 |
| 解析层 | Parser、OCR、表格识别 | 失败重试、版面保留、元数据记录 |
| 索引层 | Embedding、向量库、关键词索引 | 模型版本、增量更新、删除同步 |
| 检索层 | 查询改写、混合召回、重排 | TopK、阈值、过滤、引用片段 |
| 生成层 | Prompt、LLM、结构化输出 | 拒答、引用、格式校验 |
| 评测层 | 样例集、人工标注、线上抽检 | 命中率、引用准确率、满意度 |
关键细节拆解
文档解析
面试官经常从“PDF 怎么处理”开始追问。可复制 PDF 和扫描 PDF 是两类问题:前者重点是版面和段落顺序,后者重点是 OCR 准确率。PPT 要保留页标题、层级和备注,表格要尽量转成结构化 Markdown 或 CSV,图片如果包含关键文字要做 OCR 或视觉描述。解析结果必须保存页码、章节、标题、来源路径和更新时间,否则后续引用无法追溯。
切片策略
切片要服务召回,不是为了把文本平均切开。制度类文档适合按标题层级切,FAQ 适合按问答对切,表格适合按行或实体切,长流程文档可以按步骤切并保留上下文窗口。切片要避免一个答案跨越太多 chunk,也要避免单个 chunk 太长导致噪声进入上下文。
召回和重排
生产里常见做法是“查询改写 + 混合召回 + 重排”。查询改写解决用户表达不完整的问题;向量召回解决语义相似;关键词召回解决专有名词、编号和精确字段;重排解决 TopK 里相关但不准确的问题。重排后还可以根据来源时间、权限、文档类型和业务优先级做规则调整。
评测集怎么建设
准备三类问题:第一类是标准问题,答案在文档中明确出现;第二类是边界问题,需要多个片段合并;第三类是无答案问题,用来验证拒答能力。每个问题至少标注标准答案、支持片段、允许的同义表达和不允许的错误点。RAG 评测不能只看答案像不像,还要看引用是否支持结论。
| 评测项 | 目标 | 失败表现 |
|---|---|---|
| Recall@K | 正确片段进入候选集 | 答案明明在库里但检索不到 |
| 引用准确率 | 引用能支撑回答 | 引用片段和答案无关 |
| 拒答率 | 不知道时不编造 | 没资料也强行回答 |
| 延迟 | 可接受的响应时间 | 检索和模型调用过慢 |
| 权限正确性 | 不越权召回 | 用户看到无权限内容 |
生产事故追问
如果上线后用户反馈答案错,排查顺序应是:问题是否表达清楚;查询改写是否改偏;召回候选里有没有正确片段;重排是否把正确片段压低;Prompt 是否让模型忽略资料;资料是否过期或冲突;最终回答是否经过引用校验。这个排查链路比直接说“优化 Prompt”更像真实工程经验。
生产级 RAG 技术架构
生产 RAG 可以拆成两条链路:离线索引链路和在线查询链路。离线链路负责采集、解析、清洗、切片、Embedding、权限写入和索引版本管理;在线链路负责问题改写、权限过滤、混合召回、重排、上下文压缩、生成、引用校验和反馈记录。面试时要强调两条链路各自可观测,否则很难定位问题。
| 链路 | 核心步骤 | 关键指标 |
|---|---|---|
| 索引链路 | 解析、清洗、切片、向量化、入库 | 解析成功率、索引延迟、重复率、权限覆盖率 |
| 查询链路 | 改写、召回、重排、生成、引用 | Recall@K、MRR、引用准确率、拒答准确率 |
| 反馈链路 | 点赞、人工纠错、失败样例归档 | 用户满意度、问题覆盖率、修复周期 |
Chunking 最佳实践
没有通用最佳 chunk size。更稳的做法是按文档类型选择切片策略,并用评测集比较。政策、制度、手册适合标题层级切片;FAQ 适合问答对切片;表格适合按实体、行或字段组合切片;代码文档适合按模块、函数或配置块切片。切片策略要保留父标题、页码、段落序号和更新时间,方便引用和重排。
混合检索与重排架构
向量召回擅长语义,关键词召回擅长精确术语和编号,元数据过滤保证权限和范围,重排负责把最相关片段放在前面。一个可落地回答是:先用权限和业务范围过滤候选文档,再做向量和 BM25 多路召回,合并去重后交给 reranker,最后根据时间、权威等级和文档类型做轻量规则排序。
RAG 安全和治理
RAG 的安全风险不仅是模型幻觉,还包括权限越权、过期知识、被投毒文档、Prompt Injection 和敏感信息泄漏。生产系统应在召回前做权限过滤;索引时保留数据来源和版本;对用户上传文档做隔离;把外部文档视为不可信内容;对答案做引用校验和敏感字段检查。
候选人自检清单
- 能否在 2 分钟内讲清楚这个模块解决什么业务问题、为什么不是简单调用模型 API。
- 能否说清输入、处理、模型调用、后处理、评测、监控、回滚的完整链路。
- 能否给出至少一个真实项目指标,例如召回率、命中率、延迟、Token 成本、人工复核通过率或线上失败率。
- 能否解释一个失败案例:问题如何发现、如何定位、怎么修复、修复后用什么指标验证。
- 能否区分“学习过概念”和“真正落地过系统”,面试回答要用具体约束、权衡和数据支撑。