RAG系统面试核心:从检索到生成的全面解析

发布时间:2026/8/22 18:15:25
RAG系统面试核心:从检索到生成的全面解析 重要提醒本文围绕 RAG检索增强生成系统的面试核心知识展开涵盖从基础架构到生产优化的关键要点。关键词RAG、Embedding、向量检索、BM25、Hybrid Search、Rerank、幻觉抑制、多轮对话、知识索引、低延迟架构。1. RAG 系统概述RAG全称 Retrieval-Augmented Generation中文通常叫“检索增强生成”。它的核心思想很简单不要让大模型只依赖参数记忆回答问题而是先从外部知识库中检索相关资料再把检索结果和用户问题一起交给大模型让模型基于真实资料生成答案。一句话概括RAG 先检索再生成。它主要用来解决大模型在企业私有知识、实时知识、专业知识场景中的不足并尽可能降低幻觉。2. RAG 系统的核心结构一个标准 RAG 系统通常可以分为五个核心模块文档加载解析 ↓ 文本切分 Chunk ↓ 向量化入库 ↓ 检索召回 ↓ Prompt 组装与大模型生成可以记成一句口诀加载解析 → 文本分块 → 向量化入库 → 检索召回 → Prompt 组装生成2.1 文档加载与解析文档加载与解析模块负责接入原始数据例如PDFWordTXT网页数据库内部 Wiki企业知识文档这一阶段要做的事情不只是“读取文本”还包括解析、去重、过滤无效内容、清洗脏数据并把不同格式的原始文档转成可处理的文本。RAG 效果好不好源头数据质量非常关键。如果知识库本身是错的、旧的、重复的后面的检索和生成都会被污染。2.2 文本切分 Chunk大文档不能直接整篇送去向量化通常需要切成多个文本块也就是 chunk。chunk 不能太大也不能太小太大一个向量里混入太多语义检索精度会下降。太小上下文不完整容易把一个完整语义切断。常见切分策略包括固定长度切分递归字符切分语义切分标题感知切分生产环境中切分时最好保留章节标题、文档来源、版本、生效时间等元数据。否则 chunk 脱离原文上下文后语义会变得不完整。2.3 向量化与向量库向量化阶段会调用 Embedding 模型把每一个 chunk 转成向量。随后将下面三类信息一起存入向量数据库向量原始文本块元数据常见向量数据库或向量检索组件包括 Milvus、Chroma、FAISS 等。这一阶段通常属于离线预处理。知识库构建完成后用户每次提问时不需要重新处理原始文档只需要处理用户 query。2.4 检索召回用户输入问题后系统会把问题也转成向量然后在向量库中匹配相似度最高的文本片段。除了向量检索也可以搭配关键词检索例如 BM25。生产系统里经常使用混合检索把语义召回和关键词召回结合起来。2.5 Prompt 组装与生成检索到相关上下文后系统会把用户问题和参考资料一起组装成 Prompt再交给大模型生成答案。此时模型应该优先基于检索资料回答而不是自由发挥。实际系统中还会增加引用来源、答案校验、拒答策略等后处理机制。3. RAG 的主流检索方式RAG 的检索方式主要有四类向量检索关键词检索混合检索Rerank 重排序面试中需要重点讲清楚它们的原理、优缺点和适用场景。3.1 向量检索语义检索向量检索也叫稠密检索核心是用 Embedding 模型把问题和文档都转成向量然后计算向量相似度例如余弦相似度或欧氏距离。它的优势是可以理解语义不依赖字面关键词匹配。例如用户问“怎么申请退款”文档里写的是“售后退费流程”向量检索依然可能召回相关内容。优点能召回语义相近但表达不同的内容适合问答、总结、知识检索等语义场景对自然语言提问比较友好缺点对专有名词、数字、ID、编号等精确匹配效果较差依赖 Embedding 模型质量模型和业务领域不匹配时召回效果会下降3.2 关键词检索BM25关键词检索也叫稀疏检索典型算法是 BM25。它基于词频、逆文档频率等统计信息判断哪些文档包含了用户问题中的关键词。优点对专有名词、编号、数字、实体匹配效果好不需要向量模型速度快工程成熟缺点不理解语义对同义词、转述式提问不友好用户表达和文档表达不一致时容易召回不到3.3 混合检索工业界常用方案混合检索通常会同时做两路召回向量检索 BM25 关键词检索然后使用 RRF也就是倒数排名融合把两组结果融合排序得到最终候选列表。优点兼顾语义理解和关键词精确命中召回质量更稳定更适合生产环境缺点计算量略大需要维护两套检索链路排序融合策略需要调参和评测工业界落地 RAG 时混合检索通常是更稳妥的选择。3.4 Rerank二次精筛Rerank 不属于初次召回而是检索之后的二次精筛。流程通常是先召回 Top-K 候选片段 ↓ 送入 Rerank 模型 ↓ 对“问题-文档块”做相关性打分 ↓ 选出最相关的 Top-N ↓ 送给大模型生成答案Rerank 的作用是过滤掉相关性低的片段提升进入 LLM 上下文的质量减少无效上下文干扰同时节约 token。面试中可以这样总结RAG 检索方式主要有向量语义检索和 BM25 关键词检索。生产环境常用混合检索用 RRF 融合两者结果再通过 Rerank 做二次筛选把更高质量的上下文交给大模型生成答案。4. RAG 如何缓解大模型幻觉大模型幻觉主要有两类知识幻觉模型参数中没有相关知识于是编造事实、数据或引用。推理幻觉上下文中有资料但模型理解错误、篡改内容或乱拼接。RAG 不能 100% 消除幻觉但可以最大程度抑制幻觉把回答约束在检索资料范围内。4.1 索引阶段保证知识库质量幻觉控制的第一步不是 Prompt而是知识库本身。索引阶段需要清洗原始文档去重过滤无效内容合理分块补充元数据保证知识来源可靠如果知识库本身错误RAG 只会让模型“基于错误资料认真回答”。4.2 检索阶段提升上下文相关性检索阶段可以通过这些手段降低幻觉使用向量检索 BM25 的混合检索使用 Rerank 过滤无关片段设置相似度阈值检索不到相关内容时直接拒答一个关键原则是没有可靠资料就不要强行回答。4.3 Prompt 阶段约束模型行为Prompt 中需要明确要求模型只能基于检索上下文回答上下文没有的信息要说明不知道关键结论需要输出引用来源不要编造文档中不存在的内容这一步不是万能的但能减少模型自由发挥。4.4 生成后事实校验生成后可以做后处理例如校验答案是否能被引用资料支持检查引用是否真实存在删除不合理引用对高风险答案做人工审核所以RAG 抑制幻觉应该是全链路设计而不是只靠某一句 Prompt。5. 多轮对话中的上下文依赖检索多轮 RAG 最大难点是用户后续提问经常是省略式、指代式的。例如用户BGE-M3 怎么做混合检索 AIBGE-M3 可以同时输出稠密向量与稀疏向量再用 RRF 融合结果。 用户那参数怎么调如果直接拿“那参数怎么调”去检索向量模型并不知道“那”指的是什么召回结果很可能很差。5.1 核心方案Query 重写主流方案是 Query Rewrite也就是结合最近几轮对话让 LLM 把当前问题补全为完整查询。例如原始问题那参数怎么调 重写后BGE-M3 做混合检索时相关参数如何调优然后拿重写后的 query 去检索知识库。5.2 检索 query 和生成上下文要区分这里有一个容易混淆的点检索阶段用改写后的完整 query。生成阶段仍然给大模型原始对话历史和当前问题。因为检索器本身不会记住历史每次检索都是独立的所以需要 query 重写。但大模型生成回答时可以理解完整对话上下文因此不一定要只看改写后的问题。同时多轮对话不能无限塞历史需要做轮次截断或摘要压缩避免上下文膨胀和噪声增加。6. 噪声知识库中的一致性与可信度机制生产环境的知识库经常不干净常见问题包括版本混乱新旧文档并存旧文档没有下线。多源口径不一致不同部门上传的文档说法不同。脏数据错误、残缺、复制改写的文档进入知识库。缺少元数据不知道来源、生效时间、权威等级。一个常见错误做法是把冲突文档全部丢给 LLM让大模型自己判断谁对谁错。这很危险。模型可能会强行把冲突内容“合成”一个错误答案。6.1 一致性和可信度的区别一致性解决的是同一个业务事实知识库内部不要互相矛盾。可信度解决的是哪一份资料更值得相信。一致性依赖版本管理、文档生命周期、冲突检测。可信度则依赖来源、时间、权威等级等元数据。6.2 入库层源头治理入库阶段是最关键的一层预防大于补救。每个 chunk 都应该绑定可信度相关元数据例如版本号生效时间失效时间来源权威等级文档状态所属部门原始文档地址可信度不是靠向量算出来的而是来源、时间、版本和权威等级共同决定的。入库时还需要做语义去重冲突预检测新旧版本管理作废文档软删除定期清理孤儿向量例如文档更新时旧切片不要直接物理删除可以标记为失效新版本切片重新入库。检索时默认过滤失效文档。6.3 检索层不要只看向量相似度检索排序不能只看向量相似度。更合理的方式是最终检索分数 向量相似度分数 元数据可信度加权分新的、官方的、高权威的文档即使向量相似度略低也应该有机会排在前面。检索层可以做元数据过滤下推到向量库默认过滤作废和过期文档Rerank 阶段融合来源、时间、版本权重对多个召回 chunk 做冲突检测例如同时召回 2024 旧版规则和 2026 新版规则时应优先采信新版规则而不是让模型自己猜。6.4 生成层冲突处理召回结果存在冲突时可以按业务场景处理。第一种有明确权威优先级。例如企业制度、官方手册。Prompt 中应要求模型优先采信高权威、最新版本文档旧版本仅作为参考。第二种多方观点并存没有唯一标准答案。这种情况下不要让模型强行融合成一个统一结论而是结构化列出多方观点并附带来源、版本和时间。第三种冲突严重无法判定。应该明确提示用户检索资料存在矛盾建议人工确认必要时转人工处理。一个生产级 RAG 系统应该强制输出溯源引用让每条关键结论都能追溯到来源文档。7. 如何构建高质量知识索引高质量知识索引的目标是该召回的能召回不该召回的不召回。它不是简单地把文档向量化入库而是由源头数据、切分策略、向量模型、索引参数、评测迭代共同决定。7.1 核心流程构建高质量知识索引可以从几个环节入手数据清洗与预处理去除无关内容、广告、页眉页脚、重复段落统一格式和编码。切分策略调优根据文档类型技术文档、FAQ、长文章选择合适的分块大小和边界策略避免语义断裂。Embedding 模型选型选择与业务领域匹配的 Embedding 模型必要时进行微调。元数据设计为每个 chunk 附加来源、版本、时间、权威等级等结构化信息。索引构建与调参根据向量库特性如 Milvus、Chroma调整索引参数如 HNSW 的 M、efConstruction。评测与迭代建立评测集定期评估召回率、准确率根据反馈优化索引。7.2 常见陷阱与优化点陷阱 1一刀切分块。不同文档类型如 API 文档、FAQ、长文章需要不同的分块策略。陷阱 2忽略元数据。没有元数据的 chunk 在召回后难以溯源和评估可信度。陷阱 3索引不更新。知识库更新