📋 摘要
- RAG(检索增强生成)面试高频问答,每题只保留回答重点与扩展知识
- 详细原理解析见 RAG
- 相关主题:大模型基础(面试版)、大模型训练与微调(面试版)、大模型推理与部署(面试版)、AI Agent(面试版)、LangChain 与 LangGraph(面试版)
1. 什么是 RAG?它解决什么问题?和微调有什么区别?
📋 回答重点
- RAG = 检索外部知识库 → 注入上下文 → 再生成(「先查再用」)
- 解决:幻觉、知识时效、私有知识接入、可溯源
- vs 微调:RAG 补知识(更新快、成本低、可溯源),微调改行为/风格,实践常组合
扩展知识
- 检索质量决定 RAG 上限
- 详细讲解:RAG
2. RAG 的完整流程包含哪几个阶段?
📋 回答重点
- 索引(离线):文档 → 分块 → embedding → 存向量库
- 检索(在线):query → 向量化 → top-k 检索 →(rerank)
- 生成(在线):检索片段拼进 prompt → LLM 生成(带引用)
扩展知识
- 每段质量都影响最终答案
- 详细讲解:RAG
3. RAG 中如何做文本分块?
📋 回答重点
- 权衡:块大检索不准、块小语义破碎
- 策略:固定大小(+overlap)、递归、语义分块、按标题/表格结构切
- 关键参数 chunk size(256~1024 token) 与 overlap(10%~20%)
扩展知识
- 问答用小块、摘要可大块
- 详细讲解:RAG
4. 如何选择和评估 embedding 模型?
📋 回答重点
- 选型看:语言(中文选 BGE)、维度、检索专用、上下文长度、成本
- 评估:MTEB 基准 + 业务数据实测(Recall@k/MRR/NDCG)
- query 与 doc 可用不对称模型;度量要与模型训练一致
扩展知识
- 真实业务数据评测更可靠
- 详细讲解:RAG
5. 常用向量数据库有哪些?HNSW 原理是什么?
📋 回答重点
- 库:FAISS(高性能库)、Milvus(生产级)、pgvector(PG 扩展)、Chroma(原型)
- HNSW:多层小世界图 + 贪心搜索,近似最近邻,检索快、内存较大,速度/召回用 efSearch 调
扩展知识
- HNSW 是对数级检索
- 详细讲解:RAG
6. 余弦、内积、欧式距离怎么选?
📋 回答重点
- 余弦:看方向,文本 embedding 语义常用
- 内积:向量归一化后等价余弦,计算更快(向量库常用)
- 欧式:考虑模长时(如图像特征)
- 关键:度量须与 embedding 模型训练时一致
扩展知识
- 语义由方向决定,模长无关
- 详细讲解:RAG
7. 什么是混合检索?BM25 和向量如何融合?
📋 回答重点
- 向量管语义、BM25 管精确词(型号/错误码),互补
- 融合:RRF(排名倒数求和,免调权,主流)或加权融合
- 标准链路:BM25 + 向量 → RRF → rerank
扩展知识
score = Σ 1/(k + rank)- 详细讲解:RAG
8. 什么是 rerank?双编码器和交叉编码器有什么区别?
📋 回答重点
- rerank:粗召回 top-k 后用强模型精排,取最终 top-N
- 双编码器:分别编码,快但粗(初检索)
- 交叉编码器:query+doc 拼接一起编码,准但慢(重排)
- 组合:双编码器粗排 + 交叉编码器重排
扩展知识
- 代表:bge-reranker、Cohere Rerank
- 详细讲解:RAG
9. 检索质量差有哪些原因?如何优化?
📋 回答重点
- 原因:分块不当、embedding 不匹配、query-doc 表述鸿沟、单路召回、库参数/未更新
- 优化三板斧:query 改写/HyDE + 混合检索 + rerank
- 并按「分块→embedding→召回→重排」逐段排查
扩展知识
- HyDE 先假设答案再检索,缩小鸿沟
- 详细讲解:RAG
10. 有哪些高级 RAG 技术?
📋 回答重点
- Parent-Document:检索小块、返回父块大上下文
- HyDE:先假设答案再检索
- Self-RAG / CRAG:按需检索、反思纠正
- GraphRAG:知识图谱做多跳/全局问题
- 多路召回 + rerank 是通用标配
扩展知识
- 多跳/全局问题用 GraphRAG
- 详细讲解:RAG
11. 如何组织检索到的上下文?如何做引用溯源?
📋 回答重点
- 组织:去重、按相关性排序、编号
[1][2]、控制 token、必要时 LLM 压缩 - 注意 lost in the middle(中间信息被忽略)
- 溯源:要求模型引用编号 + 约束解码强制格式 + 映射回原文位置
扩展知识
- 忠实度评估检验溯源质量
- 详细讲解:RAG
12. 如何评估 RAG 系统的效果?
📋 回答重点
- 三指标:忠实度(答案忠于上下文)、答案相关性、上下文相关度
- 工具:RAGAS 自动评估;检索用 Recall@k/MRR/NDCG
- 分层评估(检索 vs 生成分开定位),用真实业务数据
扩展知识
- 忠实度防幻觉
- 详细讲解:RAG
13. RAG 系统生产落地有哪些工程要点?
📋 回答重点
- 增量更新、缓存(query/embedding)、成本控制
- 权限过滤(多租户最易踩坑)、可观测、容错降级
- 质量迭代:线上反馈回流优化分块/embedding/rerank
扩展知识
- 体现「能上线」而非「搭 demo」
- 详细讲解:RAG
14. dense 检索和 sparse 检索有什么区别?
📋 回答重点
- Dense(稠密):embedding 压成低维向量,语义匹配,同义/改写也能命中
- Sparse(稀疏):词项权重(BM25),词面精确匹配,专名/型号/错误码强
- Dense 强语义弱精确词;Sparse 强精确词弱语义
- 生产普遍混合检索互补(RRF/加权融合)
扩展知识
- Sparse 免训练、可解释;Dense 依赖训练语料、领域迁移差
- 详细讲解:RAG
15. BM25 和 TF-IDF 有什么区别?
📋 回答重点
- TF-IDF:TF(线性词频)× IDF,词出现越多权重线性涨
- BM25 = IDF + TF 饱和(k1)+ 文档长度归一(b)
- BM25 是 TF-IDF 的工程改良,长期作为 sparse 基线
- 默认参数 k1=1.2~2、b=0.75
扩展知识
- 公式
BM25 = Σ IDF · f·(k1+1) / (f + k1·(1-b+b·|D|/avgdl)) - 详细讲解:RAG
16. query 和 document 的不对称问题如何解决?
📋 回答重点
- 本质:query 短口语、doc 长书面,分布/信息量不同,同模型编码会错位
- 非对称双编码器:query/doc 用不同 prompt 模板(E5
query:/passage:、BGE instruction) - query 侧加指令、doc 侧离线编码固定
- 也可用 query 改写 / HyDE / ColBERT 多向量缓解
扩展知识
- 训练侧用对比学习让 query 向量靠近正例 doc 向量
- 详细讲解:RAG
17. ColBERT 多向量检索的原理是什么?
📋 回答重点
- 不把整段压成一个向量,而是每个 token 存一个向量(多向量)
- 打分用 MaxSim 后期交互:
score = Σ_i max_j(q_i · d_j) - doc token 向量离线预存,查询只编码 query
- 精度接近交叉编码器,比它快;代价是存储放大 n 倍
扩展知识
- 代表 ColBERTv2/PLAID,是速度/精度的折中
- 详细讲解:RAG
18. 如何对 embedding 模型做领域微调?
📋 回答重点
- 数据:
(query, 正样本, 负样本)三元组,负样本用 hard negative(相似但不相关) - 训练:对比学习 InfoNCE(in-batch negative)+ LoRA 参数高效微调
- 标注不足用 LLM 合成伪 query
- 在 BGE/E5 检索基座上续训,用领域集 Recall@k/MRR/NDCG 评测
扩展知识
- hard negative 可用 BM25 挖同主题不相关文档;防灾难性遗忘混入通用数据
- 详细讲解:RAG
19. 什么是元数据过滤?如何实现?
📋 回答重点
- 用结构化字段(时间/部门/类型/权限标签)约束召回范围,即 filtered search
- Pre-filter:先筛后搜,语义准但过滤宽时性能差
- Post-filter:先搜后筛,快但可能不足 k 条
- single-stage filtering:索引内嵌过滤,兼顾两者
扩展知识
- 过滤字段要建标量索引;多租户权限常靠它实现
- 详细讲解:RAG
20. 如何处理文档新鲜度?时间加权检索怎么做?
📋 回答重点
- 语义分叠加时间衰减分:
final = α·sim + β·recency - 衰减用指数
exp(-λ·Δt)或高斯,或近 N 天加 boost - 也可用元数据过滤圈时间窗口、标
valid_until自动下架 - 按 query 时效敏感度选择性启用(事实类不衰减)
扩展知识
- 新闻/价格/版本等时效内容适用,λ 按业务调
- 详细讲解:RAG
21. 多路召回如何实现?各路结果如何融合?
📋 回答重点
- 多通道并行召回:向量 + BM25 + 多 query + 实体/元数据
- 融合:RRF(排名倒数求和,免调权)或加权融合
- 融合后并集去重 → 统一 rerank 取 top-N
- 通道越多召回越全,但延迟成本上升
扩展知识
- RRF:
score = Σ 1/(k + rank);每路结果需归一化/去重 - 详细讲解:RAG
22. HNSW 的三个关键参数(M、efConstruction、efSearch)分别是什么?
📋 回答重点
- M:每节点邻居数(图密度),越大召回高、内存大、建图慢
- efConstruction:建图候选宽度,越大图质量越高、构建慢
- efSearch:查询候选宽度,越大召回高、查询慢
- 经验 efConstruction > efSearch;efSearch 是上线最常调的旋钮
扩展知识
- 三者都在召回率 ↔ 速度/内存间权衡
- 详细讲解:RAG
23. IVF 和 HNSW 有什么区别?如何选择?
📋 回答重点
- IVF:KMeans 聚成 nlist 簇,查询先找 nprobe 簇再桶内搜
- HNSW:多层小世界图贪心搜,对数级
- IVF 内存小、构建快、增量友好;HNSW 召回高、查询快但内存大
- 中小规模选 HNSW;超大/内存受限选 IVF+PQ
扩展知识
- 参数:IVF=nlist/nprobe;HNSW=M/efSearch,两者都是 ANN
- 详细讲解:RAG
24. 乘积量化(PQ)的原理是什么?
📋 回答重点
- 高维向量切 m 段,每段 KMeans 聚类,用质心 ID 代替浮点
- 存储压缩数倍(如 1024 维/8 段/256 质心 = 8 字节)
- 检索查表(lookup table)加速,有量化误差(有损)
- 常与 IVF 组合成 IVF-PQ,十亿级标配
扩展知识
- 召回略降,常配「粗筛后原始向量精算」重排
- 详细讲解:RAG
25. 如何选择向量数据库?选型要点有哪些?
📋 回答重点
- 五维:功能(过滤/多向量/多租户)、性能规模、一致可用性、运维、成本生态
- FAISS=高性能库需自建;Milvus/Qdrant=生产级服务;pgvector=PG 扩展;Chroma=轻量原型
- 百万级 pgvector/单机即可;十亿级选分布式
- 已有 PG 选 pgvector 落地最快;需复杂过滤选 Milvus/Qdrant
扩展知识
- 不要背产品名,按「规模/分布式/事务过滤/运维成本」给选型逻辑
- 详细讲解:RAG
26. filtered search(带过滤的向量检索)性能如何优化?
📋 回答重点
- 本质矛盾:ANN 索引为全局近邻优化,与子集过滤冲突
- 用 single-stage filtering(索引内嵌过滤)比 pre/post 都稳
- 高基数字段建倒排+向量联合索引;固定过滤集合可缓存
- 按选择度动态规划:过滤命中多走向量、命中极少先过滤再精算
扩展知识
- 高选择性查询直接暴力扫描反而更快
- 详细讲解:RAG
27. query rewriting 是什么?multi-query 和 step-back 有什么区别?
📋 回答重点
- query rewriting:用 LLM 把口语 query 改写/扩展成检索友好形式,缩小鸿沟
- multi-query:横向生成多个不同角度改写并行检索,扩大召回
- step-back:纵向抽象到上位问题检索背景再答
- 常用 LLM 生成多 query + RRF 融合
扩展知识
- 横向(同层多角度)vs 纵向(向上抽象)
- 详细讲解:RAG
28. HyDE 的原理是什么?有哪些局限?
📋 回答重点
- 原理:先让 LLM 生成假设答案,再用假设答案向量去检索(对齐 doc 分布)
- 局限:假设答案编造事实会带偏检索、依赖 LLM 质量、多一步成本延迟
- 精确词/型号/错误码场景不如 BM25;冷门领域生成差
扩展知识
- 适合语义模糊、长短鸿沟大的场景
- 详细讲解:RAG
29. 什么是 routing(路由)?query 路由如何实现?
📋 回答重点
- 按 query 意图/类型分发到不同知识库/检索器/模型/是否走 RAG
- 实现:规则关键词、分类器、LLM few-shot 判断、语义路由(相似度选分支)
- 多知识库、多任务时用;简单 query 可跳过重流程降成本
扩展知识
- 路由 + 回退:某路结果差回退备用源
- 详细讲解:RAG
30. 单轮检索和多轮检索有什么区别?
📋 回答重点
- 单轮:一次检索一次生成,简单低延迟,适合独立问答
- 多轮:检索-生成循环,根据中间结果再检索,适合多跳/复杂问题
- 多轮需循环终止条件(最大轮次/信息足够/LLM 判断)
- 每轮把前轮结果拼入上下文驱动下一轮
扩展知识
- 多轮延迟成本高,可按复杂度路由(简单单轮)
- 详细讲解:RAG
31. iterative retrieval 和递归检索是什么?
📋 回答重点
- iterative:线性循环「检索→生成→再检索」,前轮结果驱动下轮
- recursive:树形递归把问题拆子问题,逐层检索合并
- 都由 LLM/规则决定是否继续,设最大迭代次数
- 适合多跳/可分解的复合问题,代价是延迟成本
扩展知识
- 代表 Self-Ask/IRCoT
- 详细讲解:RAG
32. conversational RAG 如何实现?如何做多轮改写?
📋 回答重点
- 多轮 query 含指代/省略,需结合历史理解
- 核心:LLM 把「历史 + 当前 query」改写为独立完整 query(补指代)
- 维护会话状态(历史/检索结果/引用);历史过长做摘要/滑窗
- 记忆:短期窗口 + 长期向量化历史
扩展知识
- 例:
「它什么时候发布的?」+上文 iPhone 16 →「iPhone 16 什么时候发布?」 - 详细讲解:RAG
33. query 意图识别怎么做?
📋 回答重点
- 规则/关键词(快覆盖窄)→ embedding 分类(语义路由)→ 微调小模型 → LLM few-shot
- 意图类型:知识问答、闲聊、操作执行、多意图
- 输出结构化意图 + 置信度 + 低置信回退
- 用于「是否检索、路由到哪、选什么检索策略」
扩展知识
- LLM few-shot 灵活、可解释,是当前主流
- 详细讲解:RAG
34. GraphRAG 的社区摘要是什么?如何工作?
📋 回答重点
- 抽取实体关系建知识图谱 → Leiden 社区检测 → LLM 对每个社区生成摘要
- 社区可分层(细到全局)
- 本地查询取实体邻居/片段;全局查询读社区摘要答整体性问题
- 擅长多跳/全局问题,建图成本高
扩展知识
- 解决「块检索」做不了全局聚合的问题
- 详细讲解:RAG
35. self-RAG 的反思 token 是什么?
📋 回答重点
- Retrieve(要不要检索)、IsREL(片段相关吗)、IsSUP(句子被支撑吗)、IsUSE(内容有用吗)
- 训练时 critic 标注,推理时按需检索 + 逐句自检
- 自适应检索、自我纠错,比固定管线灵活
扩展知识
- IsSUP 用于反幻觉
- 详细讲解:RAG
36. 什么是 agentic RAG?
📋 回答重点
- LLM 像 Agent 自主编排:规划、调工具、多步迭代检索
- 检索器/BM25/数据库/计算器封装成 tool 供调用
- ReAct/Plan-and-Execute,边做边评估
- vs 传统 RAG:动态多次检索 + 自主决策,但成本高需限步数
扩展知识
- 实现靠 LangGraph/AutoGen/LlamaIndex Agent 等框架
- 详细讲解:RAG
37. CRAG 的评分器(evaluator)是如何工作的?
📋 回答重点
- 轻量检索评估器(小模型)给 query+文档打相关分
- 分三档:Correct 直接精炼生成、Incorrect 丢弃改外部搜索、Ambiguous 部分保留补全
- 纠正动作:query 重写再检索 / 网页搜索兜底
- 评分器必须轻量廉价,否则抵消收益
扩展知识
- 训练数据用「文档是否含答案」自动标注
- 详细讲解:RAG
38. RAPTOR 是什么?解决什么问题?
📋 回答重点
- 块 → 相邻聚类 + LLM 摘要 → 上层节点,递归成多层树
- 所有层级节点都入向量索引
- 检索:树遍历自顶向下 / 折叠树拍平多粒度命中
- 解决「单一分块粒度无法兼顾细节与全局」的问题
扩展知识
- 强于跨块高层问题,摘要有成本、可能引入噪声
- 详细讲解:RAG
39. semantic chunking 如何实现?
📋 回答重点
- 按语义边界切,避免切断语义
- 核心:相邻句 embedding 相似度骤降处为边界
- 也可用模型判断断点 / 句子聚类
- 参数:相似度阈值、最小块长;代价比固定分块多 embedding 成本
扩展知识
- 可结合标题/段落结构做辅助信号
- 详细讲解:RAG
40. 什么是 lost in the middle?如何缓解?
📋 回答重点
- LLM 对长上下文中间位置信息记忆弱(U 形注意力)
- 最相关片段排中间可能被忽略
- 缓解:rerank + 相关放首尾、压缩上下文、只取必要 top-N、Map-Reduce 分段
扩展知识
- Liu et al., 2023;选长上下文能力强的模型也有帮助
- 详细讲解:RAG
41. stuffing 和 rerank 方式组织上下文有什么区别?
📋 回答重点
- Stuffing:所有片段全塞进 prompt,简单但噪声多、易超长、易 lost in the middle
- Rerank 精选:粗召回后交叉编码器精排,只取最相关 top-N
- 片段少都相关直接 stuff;召回多混噪声先 rerank
- 更精细可 Map-Reduce/Refine
扩展知识
- rerank 多一步但 prompt 更短、更聚焦
- 详细讲解:RAG
42. 引用溯源如何实现?如何保证引用忠实性?
📋 回答重点
- 片段编号
[1][2]注入 prompt,要求标注来源 - 约束解码/结构化输出强制合法引用格式
- 维护「编号→原文位置」映射,前端渲染可点击
- 忠实性:用 NLI/RAGAS Faithfulness 逐句校验是否被引用支撑,无支撑则丢弃
扩展知识
- 引用精确到片段而非整篇文档;训练/RL 惩罚错误引用
- 详细讲解:RAG
43. RAG 幻觉和无 RAG 幻觉有什么区别?
📋 回答重点
- 无 RAG:纯参数记忆/知识缺失,凭空编造
- RAG 幻觉:上下文冲突、被错误片段误导、错误引用、忽略上下文用旧知识答
- RAG 幻觉有上下文可对照,可用忠实度评估检测
- RAG 消知识型幻觉,但引入检索误导型新幻觉
扩展知识
- 缓解:提升召回/rerank + 忠实度校验 + 约束引用
- 详细讲解:RAG
44. RAGAS 的四项指标分别是什么?
📋 回答重点
- Faithfulness 忠实度:答案是否被上下文支撑(评生成)
- Answer Relevancy 答案相关性:答案是否切题(评生成)
- Context Relevancy 上下文相关度:片段相关且无冗余(评检索)
- Context Recall 上下文召回率:关键信息是否检索到(评检索)
扩展知识
- 可补 Answer Correctness;LLM 自动打分需人工抽查校准
- 详细讲解:RAG
45. recall@k 和生成质量的关系是什么?
📋 回答重点
- Recall@k 是检索指标,是生成的上限(答案没进 top-k 就答不出)
- 必要但不充分:recall 高≠生成好(位置靠后/噪声/误读)
- k 越大 recall 越高但噪声越多,生成质量先升后降
- 先保 recall,再靠 rerank 提升精排把关键片段放到模型能看的位置
扩展知识
- 检索与生成分层评估定位问题
- 详细讲解:RAG
46. RAG 系统如何做 A/B 测试?
📋 回答重点
- 固定评估集(真实 query + 参考答案)
- 线上随机分桶:控制组 vs 实验组,单变量控制
- 离线指标:Recall@k/MRR/NDCG + RAGAS 忠实度;线上:点击引用/满意度/完成率
- 样本够大后做显著性检验
扩展知识
- 陷阱:缓存隔离(按版本)、LLM 随机性需大样本、别只看准确率
- 详细讲解:RAG
47. embedding 和 rerank 的成本如何权衡?
📋 回答重点
- embedding 贵在索引一次性、查询便宜;rerank 贵在查询逐对、随 k 线性增长
- 分层分工:embedding 海量粗筛 + rerank 小集合精排
- 召回 k 是 rerank 成本旋钮(先粗召回 50
200 再精排取 510) - 降本:缓存、rerank 用小模型/蒸馏、简单 query 跳过 rerank
扩展知识
- 预算紧可只靠 embedding;质量优先必加 rerank
- 详细讲解:RAG
48. 什么是语义缓存?如何实现?
📋 回答重点
- 不仅缓存完全相同 query,也缓存语义相近 query 的结果
- query embedding → 最近邻匹配(余弦 ≥ 0.95 命中)
- 存答案或检索结果,TTL + 知识库更新主动失效
- 风险:语义相似但语境不同误命中;缓存键含租户维度
扩展知识
- 适合高频、事实稳定 query;动态/个性化慎用
- 详细讲解:RAG
49. 权限多租户如何设计?
📋 回答重点
- chunk 继承文档 ACL(tenant/user/group/角色)
- 检索时权限作为过滤条件服务端强制注入(不信任客户端参数)
- 物理隔离(每租户独立索引)vs 逻辑隔离(共享索引+过滤,主流)
- 权限过滤与向量检索原子结合防越权,加后校验双保险
扩展知识
- 权限贯穿索引→检索→生成全链路;缓存键含租户、审计日志
- 详细讲解:RAG
50. 增量索引和 CDC(变更数据捕获)如何实现?
📋 回答重点
- CDC 捕获变更(binlog/WAL/Debezium/Kafka/文件监听)
- 变更 → 重分块 → 重 embedding → upsert/delete(按稳定 ID 幂等)
- 删除/修改要先删旧 chunk 再写新(旧向量清理最易踩坑)
- 小量近实时、大变更批量定时;定期重建/合并索引防退化
扩展知识
- 用「幂等 + 定期全量对账」保证最终一致
- 详细讲解:RAG