RAG 面试题
这一组题目围绕一个场景:员工查询公司的报销制度。回答时先给结论,再说明证据、取舍和验证方法;不要把工具名当作设计依据。
核心问题
1. 为什么 RAG 不等于 embedding + top-k?
RAG 把检索得到的外部证据用于生成。向量检索只是可选的召回方式:制度编号适合精确匹配,语义问法适合向量检索,统计报销总额则可能需要结构化查询。完整链路还包括文档解析、版本与权限、候选排序、上下文组装、答案生成和引用检查。
追问:制度昨天更新,今天仍回答旧金额,先查什么?先检查数据同步和索引版本,再看召回片段是否过期,最后检查答案缓存。模型更大不能解决这条链路里的更新问题。
2. BM25、向量检索、混合检索和 rerank 怎么选?
先用真实问题建立基线。精确术语、编号和人名要检查关键词通道;同义表达要检查向量通道。混合检索可以合并互补候选,但不能直接相加不同通道的原始分数;可尝试按名次融合,再用验证集比较。Rerank 负责给候选重排,通常无法找回候选集中缺失的文档。
验证方法:固定语料和问题集,比较关键词、向量、混合三组的 Recall@k,再固定候选比较重排前后的 MRR、最终答案与延迟。实验过程见 检索策略 和 重排序。
3. chunk 大小如何选择?
小片段便于精确命中,但容易丢掉表头、条件和例外;大片段能保留上下文,却可能稀释主题并挤占模型输入。按标题、段落、表格结构切分作为基线,再比较不同 token 预算。重叠比例属于实验参数,不是通用最优值。
失败案例:片段只保留“上限 500 元”,遗漏“仅适用于异地出差”。验收时要检查支撑答案的条件是否一并进入上下文,并保留文档 ID、章节、页码和版本。参见 文档切分。
4. 答案错了,如何定位?
| 检查位置 | 观察到的现象 | 下一步 |
|---|---|---|
| 原始文档 | 标准证据不存在或解析丢失 | 修复数据接入、解析或问题边界 |
| 召回候选 | 证据存在但未进入候选 | 查查询改写、索引、过滤和召回 |
| 最终上下文 | 候选有证据,组装后消失 | 查重排、去重、截断和 token 预算 |
| 生成答案 | 证据完整但金额/条件错 | 查指令、模型能力和答案校验 |
| 引用 | 答案正确,引用指向错文档 | 查证据 ID 映射和断言支持关系 |
不要只比较答案是否“看起来合理”。给同一问题注入人工选定的正确证据,是区分检索与生成瓶颈的一种对照实验。
5. 权限和删除怎样影响设计?
认证身份由服务端取得,检索范围由权限系统决定。用户传来的 tenant_id 或模型生成的过滤器不能直接成为授权依据。检索、缓存、引用查看和原文下载都需要遵守同一权限边界;删除或撤权后,索引和缓存也要有失效路径。
验收用例:用户 A 能看、用户 B 不能看的同一文档;文档撤权前后;旧缓存命中;正文已删除但向量仍残留。期望是受保护内容不进入无权限用户的模型上下文。详见 生产实践。
追问角度
- “没有答案”和“检索失败”怎么区分?语料中有证据却未找回是召回失败;确认语料没有支持时才标无答案。
- 检索指标上涨,答案为何变差?检查新增噪声、重复片段、截断,以及评估集是否偏向单一问题类型。
- 如何报告改进?保留同一批问题的前后结果、失败分类、样本量、成本和延迟。指标定义见 评估指标。
示例回答骨架
“我会先固定制度文档版本,并标注一批含普通问答、例外条款、无答案和越权请求的样本。建立关键词/向量基线,按候选、上下文、答案和引用四层定位失败。只有在验证集上改善答案且延迟可接受时,才增加重排或查询改写。上线后用独立测试集与撤权用例检查回归。”
自测
任选一个错误答案,画出它实际经过的数据链路;用一条 trace 说明最早出错的位置,并提出一个只改变单个变量的实验。如果只能说“换模型试试”,应回到 RAG 评估 补齐诊断过程。