RAG 面试题:从原理到工程化
配套阅读:RAG 实战系列 ①-④。下面的每道题,系列文章里都有完整的代码和推导——这里只负责把它们组织成面试语言。
按面试官的提问深度分了三层:基础层(是什么)→ 工程层(怎么做好)→ 亮点层(怎么和别人拉开差距)。
基础层:考察你是否真的理解 RAG
Q1:什么是 RAG?它解决什么问题?
答题框架(先一句话定义,再讲动机,最后带一个具体场景):
- 一句话:RAG = 检索增强生成,回答前先从知识库里检索相关内容,拼进 prompt 里再让模型生成。
- 解决三个问题:模型不知道私有数据(公司文档、内部规范)、知识有截止日期、幻觉(没依据也敢编)。
- 场景收尾:比如做一个"数据治理 AI 助手",治理规范是公司内部文档,模型训练时根本没见过,只能靠检索喂给它。
加分点:主动对比微调——"知识频繁变化时,RAG 改知识库就行,微调要重新训练;而且 RAG 的答案可溯源(能标注出处),微调不行。"
Q2:一条最小 RAG 链路由哪几步组成?
沿着数据流答,五步:文档切块 → 向量化 → 存储 → 检索(用户问题也向量化,算相似度取 Top-K)→ 拼 prompt 生成。
加分点:强调"问题和文档必须用同一个 embedding 模型",不同模型的向量空间没有可比性——这是实际写代码才会踩的坑,一句话就能证明你跑通过。
Q3:为什么要切块(chunking)?块太大/太小会怎样?
- 为什么切:embedding 模型有输入长度限制;而且整篇文档一个向量,主题被稀释,检索不准。
- 太大:一个块塞多个主题,向量"平均化",问 A 命中的块里一半是 B,浪费上下文窗口还引入噪声。
- 太小:语义被腰斩,"上一句在块 1、下一句在块 2",单块信息不完整,模型拿到也答不全。
- 实践:按语义边界切(标题/段落),配 overlap(重叠区)兜底跨块语义。
工程层:考察你是否把 RAG 做到"能用"
Q4:纯向量检索有什么局限?怎么解决?
这是区分度最高的一题,能答好说明你踩过真实的坑:
- 局限:对精确字段名/专有名词失灵。比如用户问
amount 字段的口径,向量检索觉得amount、price、cost语义都差不多,排序全乱;但对"金额相关的规范有哪些"这种模糊问题,向量检索又比关键词强。 - 解法:混合检索——向量(语义)+ BM25/关键词(精确匹配)双路召回,再融合。
- 融合用 RRF(倒数排名融合):只看排名不看分数。因为两路的分数量纲不同(余弦 0-1,BM25 无上界),直接加权是在拿体重和身高相加;RRF 天然免疫这个问题。
Q5:重排序(rerank)是干什么的?为什么检索完还要再排一次?
- 召回和精排的目标不同:召回追求"别漏"(快、粗),重排追求"最相关的排最前"(慢、准,只处理 Top-K 个候选)。
- 便宜方案:规则重排(命中字段名加权、来源加权);标准方案:cross-encoder 重排模型,把"问题+候选块"一起输入打分,比双塔向量精确得多。
高频追问:拒答阈值应该卡在哪个分数上? 卡余弦分,不能卡重排分——重排分只有序数意义(A 比 B 相关),没有绝对意义,不同 query 下不可比;余弦分有稳定的绝对量纲,才能设"低于 0.35 就说不知道"这种阈值。这个点大部分候选人答不上来。
Q6:RAG 怎么做多轮对话?难点在哪?
- 难点不是存历史,是指代消解:用户第二轮问"那它的更新频率呢","它"指什么,检索器不知道——拿"它"去检索什么都召回不了。
- 解法:检索前加一步问题改写,让模型结合对话历史把问题改写成独立完整的问题("那它呢" → "amount 字段的更新频率是什么"),再拿改写后的问题去检索。
- 注意:改写用小模型/低成本调用就够,这是一次额外的 LLM 调用,要算延迟账。
亮点层:把面试从及格拉到出彩
Q7:如果让你在 RAG 之上加 Text-to-SQL 能力,怎么设计?
亮点在复用:不重做一套,同一个检索器,把检索目标从"文档块"换成"表结构 + 字段口径",prompt 从"根据资料回答"换成"根据 schema 写 SQL"。
大模型裸写 SQL 报错的根因是没有 grounding——它不知道你的真实表名、字段名,全靠猜。RAG 检索出真实 schema 喂给它,就是把"猜"变成"抄"。
一句能让面试官记住你的总结:"检索层是地基,问答/SQL/报表是地基上长出来的三个应用——加第三个能力时,我的检索代码一行都没改。"
Q8:你的 RAG 效果不好,怎么排查?
方法论一句话:把中间产物打印出来,用眼睛看。链路长(切块→向量→召回→重排→生成),先定位是哪一环坏了:
- 看召回的块:相关内容在不在 Top-K 里?不在 → 切块或检索的问题(块是否腰斩、该不该上混合检索)
- 在但排得靠后 → 重排的问题
- 排得也对但答错 → prompt 或模型的问题(资料是否拼对、有没有让它"只根据资料回答")
加分点:提一句评估集——"我会攒一批『问题→应命中块』的标注对,每次改动跑一遍召回率,避免拍脑袋调参。"
追问链实战:面试官会怎么一路追下去
真实面试不是一问一答,是顺着你的回答往深挖。模拟一条典型的链:
- "简历上写了 RAG,讲讲整体链路?" → Q2
- "块怎么切的?多大?" → Q3
- "向量检索有什么问题?" → Q4(说出'字段名失灵'这个具体场景,面试官立刻知道你做过真的)
- "两路分数怎么融合?" → Q4 的 RRF,顺带说清为什么不加权
- "答不了的问题怎么拒答?阈值卡哪?" → Q5 的余弦分 vs 重排分
- "多轮怎么做?" → Q6 指代消解
- "还能扩展什么?" → Q7 复用 + grounding 收尾
每一步都能接住,这条链走完,RAG 这块基本就是满分印象。
关于这个专区
持续更新中,下一篇整理 Agent(Function Calling / 编排 / 护栏)。内容有错漏或你被问到了这里没覆盖的题,欢迎 GitHub 提 issue 交流。