RAG带你从零掌握检索增强生成,一篇搞懂全流程!
当大模型遇到私有知识库RAG 就是那座桥梁一、为什么需要 RAG先问一个问题你让 ChatGPT 写一篇关于你公司最新产品的介绍它能写得出来吗答案是不能。原因很简单知识截止大模型的训练数据是有截止日期的你的新产品它根本没见过幻觉问题即使它知道也可能胡编乱造把 A 产品的特性安到 B 产品上无法访问私有数据你的内部文档、数据库、企业知识库大模型根本看不到那怎么办有两个主流方案•Fine-tuning微调用你的数据再训练一遍模型。成本高、周期长而且模型可能会学忘了原有的能力•RAG检索增强生成在回答前先去知识库里检索相关信息然后让模型基于检索结果生成答案RAG 的核心思想可以用一句话概括先检索再回答。打个比方这就好比给大模型配了一个专属图书馆管理员。每次有人来问问题管理员先去书架上翻阅几本相关的书找到答案所在的页面然后把书摆在模型面前让模型翻着书来回答。这样一来答案既有依据又不会跑偏。相比微调RAG 的优势非常明显•实时更新知识库里加一份新文档马上就能检索到无需重新训练•成本低廉不需要昂贵的 GPU 算力去训练模型•可解释性强可以追溯答案来自哪份文档出了问题能追责•幻觉可控回答有据可依模型编造的空间大大减少这篇文章会从一个工业级 RAG 系统的真实架构出发带你完整理解 RAG 的工作原理和技术细节。二、RAG 的两条核心流水线一个完整的 RAG 系统可以抽象为两条独立的流水线文档处理流水线负责喂数据——把各种格式的文档PDF、Word、Excel 等解析成纯文本切成合适大小的小块然后向量化后存入知识库。检索流水线负责找答案——用户提问时从知识库中找出最相关的内容片段交给大模型去生成回答。两条流水线配合就构成了完整的 RAG 闭环。下面我们逐条拆解。三、文档处理流水线详解文档处理流水线是 RAG 系统的入口它的工作就是把杂乱无章的原始文档变成结构化的、可检索的知识库。3.1 多格式文档解析现实世界中的文档格式五花八门PDF、Word、Excel、HTML、Markdown、纯文本……每种格式的解析方式都不同。一个成熟的 RAG 系统通常会通过策略模式来应对——为每种格式定义一个解析器它们实现同一个接口系统根据文件类型自动选择对应的解析器文档格式底层解析技术PDF.pdfApache PDFBoxWord.docxApache POIExcel.xlsx / .xlsApache POI网页.htmlHTML 解析器Markdown.mdMarkdown 解析器纯文本.txt直接读取这一层的目标很简单把各种非结构化文档统一转化为纯文本。只有转成纯文本后续才能进行切片和向量化。3.2 智能文档切片核心解析完成后得到了一篇完整的文本。但大模型有上下文窗口限制——比如一次只能处理几千到几万个 token。你不能把整本《三体》直接塞进去。所以需要把长文档切成小块。这些小块就是Chunk切片。切片是个看似简单、实则很有讲究的步骤。切得太碎上下文不连贯切得太粗一块可能超限。一个工业级 RAG 系统通常采用两级切分的设计来兼顾语义完整性和长度约束先用策略做粗粒度切分分出段落再对每个段落做细粒度递归切分确保每块长度合规。每个最终 chunk 都会携带来源段落paragraphIndex和段内序号chunkIndex两个标记。下面先介绍一级切分的四种策略再说明二级递归切分的逻辑。3.2.1 四种切分策略一级切分有四种策略可选每种策略关注不同的语义边界•按长度切分最简单的兜底方案整篇作为一个段落送入二级切分适用于结构不明确的文档。•按分隔符切分按自然分隔符如换行符、句号切分尊重原文段落结构是最常用的策略。•按正则切分按自定义正则表达式切分适合处理有明确格式的文档如日志、代码文件。•智能语义切分调用大语言模型按语义话题边界切分效果最好但成本最高适用于结构复杂的文档。3.2.2 二级递归切分无论一级切分使用了哪种策略每个一级段落都会进入同一切分流程若 token 数不超过maxTokens直接作为一个 chunk若超过则递归切割直到每块合规。相邻 chunk 之间保留overlap个 token 的重叠避免语义断裂。典型参数为maxTokens500、overlap50。3.2.3 两级切分的关系总结两级切分的定位可以这样理解•一级切分是战略层决定按什么逻辑拆分文档——是按自然段落按句子按语义话题还是不做拆分•二级切分是执行层确保每个 chunk 的长度不超过 maxTokens同时通过 overlap 保持上下文连贯性两级切分的组合关系是通过模板方法模式实现的——抽象基类定义了先一级切分、再对每个段落执行二级切分的骨架子类只需实现一级切分的具体逻辑。典型参数为maxTokens500、overlap50。3.3 去重机制同一份文档可能被不同的人多次上传到知识库。如果不做去重知识库里就会充满重复内容不仅浪费存储空间还会影响检索效果。RAG 系统通常会内置多种去重策略去重策略行为说明不去重允许重复上传按文件名去重同一知识库中文件名相同即视为重复按内容去重通过 SHA-256 对内容做哈希相同哈希值视为重复文件名或内容去重上述两者任一命中即重复命中重复后怎么处理通常有三种动作动作行为拒收直接拒绝并提示用户文件已存在跳过静默忽略不报错覆盖删除旧文档包括它的所有切片和向量重新处理新文档此外在向量化阶段还可以做更细粒度的去重如果某一段文本的内容哈希值在知识库中已经存在就直接复用之前生成的向量不再重复调用嵌入模型。这一步能有效节省 API 调用成本。3.4 双写存储——关键设计切片完成后系统会执行一个非常关键的操作——双写Dual Write为什么需要双写这就要理解两种检索方式的差异了•向量检索语义搜索擅长意会。搜索我想买手机它能找到iPhone 15 Pro 评测——虽然关键词不同但语义相近•BM25 全文检索关键词搜索擅长言传。搜索华为 Mate60它会精确命中包含华为 Mate60这个关键词的文档日常使用中用户可能用语义模糊的表达也可能用精确的关键词。两份结果融合在一起效果远胜单一方案。值得注意的是向量存储和搜索引擎的写入是解耦的——可以同时开启也可以只用向量存储。对于成本敏感的场景只开向量存储也能获得不错的检索效果。四、检索流水线详解文档处理好了知识库建起来了。现在来到最核心的问题用户提问时怎么从海量的 Chunks 中找出最相关的那几个一个工业级的检索流水线通常不会只做一次向量搜索就完事。它会像工厂流水线一样经过多个环节的层层筛选┌─────────────────────────────────────────────────────────────┐│ 检索流水线 ││ ││ 1. 加载知识库配置 ─── 读取搜索参数、模型参数等 ││ 2. 查询改写可选 ─── 优化用户查询预留扩展 ││ 3. 向量检索 ─── 语义搜索粗筛候选结果 ││ 4. BM25 全文检索 ─── 关键词搜索补充结果 ││ 5. 混合融合 ─── 合并两份结果取长补短 ││ 6. 重排序 ─── 精细排序精筛最优结果 ││ 7. 结果后处理 ─── 补充信息、扩展上下文 │└─────────────────────────────────────────────────────────────┘每个环节用一个独立的处理器来实现这样每个环节可以独立开发、独立测试、独立开关。下面逐一分析。4.1 准备阶段加载配置流水线的第一步是加载知识库的完整配置。一个知识库除了文档数据外还包含大量控制检索行为的参数•搜索参数每页返回多少条结果、是否启用阈值过滤、阈值分数等•模型参数用哪个嵌入模型做向量化、用哪个重排序模型等•切片参数前面提到的 maxTokens、overlap 等•存储配置使用哪个向量数据库实例、是否启用搜索引擎等这些参数决定了后续流水线怎么跑。比如配置了threshold0.7那么得分低于 0.7 的检索结果会被直接丢弃。4.2 第一轮筛选向量检索这是检索流水线中最核心的一步。当用户输入查询后系统会做以下事情根据知识库配置创建对应的向量存储实例ES 或 Milvus 或 PGVector构建索引名通常格式为rag_{知识库ID}调用嵌入模型将用户查询也转化为向量在向量数据库中搜索与查询向量最相似的前 N 条结果// 以下是向量检索的核心逻辑伪代码ListSearchResult search(String query, KnowledgeBase kb) { // 1. 创建向量存储实例 VectorStore store createVectorStore(kb); // 2. 构建索引名 String indexName rag_ kb.getId(); // 3. 执行向量相似性搜索 // topK 通常取最终需要的数量 × 2 ListSearchResult results store.search(indexName, query, topK resultCount * 2); // 4. 按阈值过滤去掉低分结果 return filterByThreshold(results, kb.getThreshold());}这里有一个重要细节topK 通常会取最终需要数量的一倍。比如用户想看 5 条结果系统会先取 10 条候选。为什么因为后面还有融合和重排序步骤多准备一些候选供进一步筛选。当前主流的向量数据库对比向量数据库相似度计算索引算法连接方式Elasticsearch余弦相似度 / 点积 / L2HNSWREST APIMilvus余弦相似度 / L2 / 内积IVF_FLAT / HNSW / AUTOINDEXgRPCPostgreSQL (pgvector)余弦相似度 / L2 / 内积HNSWJDBC选哪个看你的场景。如果团队已经用了 ES直接基于 ES 做向量检索是最省事的如果对性能要求极高Milvus 专为向量检索而生如果追求简单运维pgvector 作为 PG 扩展最轻量。4.3 第二轮筛选BM25 全文检索向量检索跑完一轮后如果知识库配置了搜索引擎系统还会并行执行一次 BM25 全文检索。BM25 是一种经典的文本检索算法它计算查询词在文档中的出现频率TF和逆文档频率IDF给每个文档打分。简单说就是查询词出现得越多、这个词越稀有得分越高。为什么要额外做 BM25来看个例子用户搜索“2024年iPhone销量”•向量检索能理解iPhone和苹果手机是同义词能召回语义相似的内容•BM25 检索能精确命中包含2024年和iPhone 销量这两个完整短语的文档两者各有千秋合并使用效果最好。对于中文场景全文检索需要特别处理分词问题。中文不像英文用空格分词所以需要用专门的分词器。Elasticsearch 提供了 CJK 分析器支持中文、日文、韩文用 Bigram 二元分词的方式来处理——比如中华人民共和国会被切分为中华、“华人”、“人民”、“民共”、“共和”、“和国”。4.4 合并结果混合融合向量检索有了一份结果BM25 也有一份现在要把两份合并成一份更好的结果。常用的融合算法有两种RRF倒数排名融合——最常用的方案RRF 的原理很简单不看具体分数只看排名。它的计算公式是对每条结果最终得分 1 / (k 排名)其中 k 是一个常数默认 60。举个例子某条结果在向量检索中排第 2 名得分为 1/(602) ≈ 0.016在 BM25 中排第 5 名得分为 1/(605) ≈ 0.015。那它的最终得分就是 0.016 0.015 0.031。如果某条结果在两个列表中都出现它的总分就会更高。如果只出现在一个列表中也能拿到相应分数。RRF 的优势在于不需要调权重参数对排名敏感而非分数敏感鲁棒性很好。加权和融合——另一个可选方案先分别对向量分数和 BM25 分数做归一化映射到 0-1 之间然后按权重加权求和最终得分 α × 向量得分(归一化) β × BM25 得分(归一化)α 和 β 的权重可以根据业务场景调整。比如对语义匹配要求高可以设 α 0.7, β 0.3。4.5 精筛重排序经过混合融合后结果质量已经不错了。但系统中还可能有一道精细工序——重排序。向量检索和 BM25 都是粗排阶段用轻量级模型快速从海量数据中筛选出候选集。重排序阶段则使用Cross-encoder 模型对查询和文档的配对进行更精细的相关性评分Cross-encoder 和向量检索的区别在于• 向量检索Bi-encoder把查询和文档分别编码成向量然后计算余弦相似度。速度快可以预计算。• 重排序Cross-encoder把查询和文档拼接在一起输入模型让模型直接输出相关性分数。精度高但速度慢。所以重排序只会对前几十条结果执行不会对整个知识库做。这是一个经典的粗排 精排两阶段策略。如果重排序 API 调用失败比如模型服务挂了系统需要有降级策略——直接按融合后的 score 排序返回。4.6 收尾结果后处理最后一步是结果后处理主要做三件事数据富化从数据库补充缺失的信息比如文档名称、完整内容等相邻切片扩展如果命中了某个 chunk把它前后的几个相邻 chunk 也一并返回。因为切片时可能把一句话切成两段返回相邻内容可以保持上下文完整Lost-in-the-Middle 优化研究Liu et al., 2023表明大模型对长上下文中间部分的内容关注度较低对开头和结尾的内容更敏感。因此可以将最相关的结果放在首位和末尾至此检索流水线完成把最终结果返回给调用方。五、技术栈全景图看完核心流程我们整理一下构建一个 RAG 系统需要用到的技术栈类别技术选型说明基础框架Spring AI / LangChain4j提供了 Embedding、向量存储、大模型等抽象向量数据库Elasticsearch / Milvus / PGVector三选一各有优劣全文搜索Elasticsearch 中文分词器IK 分词器或 CJK 分析器文档解析Apache PDFBox / Apache POIPDF 和 Office 文档解析文本切片递归字符分割器按 token 数递归切分保留 overlap嵌入模型各类 Embedding API 或本地模型将文本转为向量重排序Cross-encoder 重排模型精细化排序ORMMyBatis-Plus / Hibernate数据持久化对于 Java 生态的团队Spring AI 是目前最成熟的选择它提供了统一的操作接口屏蔽了底层向量数据库和大模型 API 的差异。六、架构设计要点一个优秀的 RAG 系统在架构设计上有几个值得关注的要点6.1 使用责任链模式组织检索流程检索流水线的每一步是一个独立的处理器它们通过排序串联起来。想增加一个新环节只需实现处理器接口配置好顺序自动加入流水线。这种设计让系统非常灵活想关掉重排序去掉这个处理器即可。6.2 使用策略模式 模板方法管理算法切片策略、融合策略、去重策略……这些场景既有多种算法可选的维度策略模式又有算法骨架固定、具体步骤可定制的维度模板方法模式。比如两级切片中抽象基类固定了先一级切分、再遍历段落依次二级切分的完整流程子类只需实现一级切分的具体逻辑。6.3 统一的存储抽象// 向量存储统一接口interface VectorStore { void add(ListDocument docs); void delete(String indexName, ListString ids); ListSearchResult search(String query, int topK);}// 搜索引擎统一接口interface SearchEngine { void insert(ListDocument docs); ListSearchResult search(String query, int size);}上层业务代码只依赖这些抽象接口不关心底层是 ES 还是 Milvus。每个知识库可以独立配置不同的存储后端互不干扰。6.4 全链路耗时监控每个检索环节的耗时都应该被记录{ 向量检索耗时: 120ms, ← 向量查询 BM25检索耗时: 80ms, ← 全文检索 混合融合耗时: 2ms, ← 基本可忽略 重排序耗时: 350ms, ← 可能是瓶颈 总耗时: 567ms}通过这些指标可以直观地看到系统瓶颈在哪里。如果重排序占了大部分时间可以考虑减少重排序的候选数量或者换更快的重排序模型。七、总结与展望RAG 的核心价值在于它是连接大语言模型和私有知识库的桥梁。回到文章开头的问题——你让大模型写一篇关于公司最新产品的介绍。有了 RAG 系统后流程变成了把产品文档、技术手册导入知识库用户提问时系统从知识库中检索出相关片段大模型基于检索到的内容生成回答整个过程不需要训练模型知识可以随时更新回答有据可循。总结一下 RAG 系统的关键要点•文档处理流水线把非结构化数据转化为可检索的向量和全文索引•检索流水线向量 BM25 融合 重排序从海量知识中精确定位最相关的内容•粗排 精排的两阶段策略在效果和性能之间取得平衡•多种设计模式的灵活运用让系统保持高扩展性和可维护性当然RAG 技术还在快速演进。当前值得关注的几个方向•Graph RAG结合知识图谱的关系推理能力回答需要跨文档推理的复杂问题•Agentic RAG让 AI Agent 自主决定何时检索、检索什么、如何推理更加智能化•Multi-modal RAG不仅检索文本还能检索图片、表格、代码等多模态数据•RAG 评估体系如何科学地评估 RAG 系统的检索质量和生成质量是一个持续研究的课题但无论方向怎么变这篇文章讲到的这些核心思想——文档解析与切片、向量关键词混合检索、多级排序与融合——始终是 RAG 系统的基础。理解了这些你就掌握了搭建 RAG 系统的核心能力。传统产品经理正在成为下个被淘汰的“传统岗位”。过去画原型、写 PRD、跟进度的“传统技能包”在AI时代正迅速贬值。63% 的企业转型做 AI 产品当下的问题不再是“要不要学 AI ”而是“如何构建 AI 产品”。前段时间还跟字节、腾讯的资深 AI 产品经理沟通他们反馈在大量招人只要有 AI 相关的项目经验基本都能拿到面试机会而且领导很舍得给钱涨薪 40-60% 很正常01接下来的产品人得卷AI能力了如今AI大火行业极速发展的背后懂AI 产品人才却严重稀缺。这不是要你转技术岗而是要掌握构建 AI 产品的核心方法如何将你的领域知识转化为 AI 产品的核心竞争力如何用 AI 技术实现你的产品需求如何设计真正懂用户的 AI 交互体验……懂AI就是产品经理的“救命稻草”风口之下与其焦虑被行业淘汰不如先人一步享受AI技术带来的红利我把AI产品经理的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】不限年龄不限岗位没有代码基础也能学现在扫码完课还送《AI产品面试题库》《AI大模型应用案例集》02掌握技术实战快速转型想成为一名卓越的AI大模型产品经理需要从技术、到项目实战的全方位转型指南**1**AI产品应用原理解析产品经理也能听懂对于产品经理来说如果你不懂技术做不了业务和AI大模型技术衔接、定义不了数据需求是没法完整的落地一个产品的本次课程专门面向产品经理人群解析当下最热门的AI产品应用的必备的「大模型」、「多模态」的实际应用和算法原理解析AI产品应用技术积累大模型能力简单易懂不需要会代码小白也能掌握大模型微调掌握主流大模型如DeepSeek、Qwen等的微调技术针对特定场景优化模型性能。学习如何利用领域数据如制造、医药、金融等进行模型定制AI Agent智能体搭建学习如何设计和开发AI Agent实现多任务协同、自主决策和复杂问题解决。构建垂类场景下的智能助手产品如制造业中的设备故障诊断Agent、金融领域的投资分析Agent等2超全行业案例解析课程详细讲解现阶段大模型在各个行业和领域的应用现状包括零售与电商、教育、医疗、泛娱乐、法律等等10大行业详细讲解案例的思路、应用场景以及背后的技术原理、核心技术揭秘各个行业、场景的真实现状和未来产品的发展与机遇可以说讲解完一个案例就能积累一个AI产品实践的经验课程中所涉及到的实战项目都可以直接在自己的工作中使用让自己的产品/项目有可借鉴的成功案例3AI产品经理求职专项辅导课程中会系统的帮助大家拆解字节、腾讯、百度等大厂AI PM岗位JD关键词掌握AI PM高频面试题型与回答框架展示 AI 相关能力的关键技巧Prompt设计、模型评估、A/B测试、成本意识、与算法/工程协作经验To B类AI产品经理突出“行业理解 技术落地 商业闭环”能力的简历结构设计展示项目成果从客户需求洞察到技术方案设计展现端到产品思维如何评估To B AI产品的可行性、客户付费意愿与实施成本To C类AI产品经理拆解头部公司岗位JD将过往尽力转化为AI产品叙事逻辑从行业趋势、产品设计题、案例分析数据分析题、技术理解边界等全流程辅导面试避免无效海投、锁定最适合的AI产品岗位03本次课程全程直播讲解能直接对话大佬和专业助教不懂就问超详细的案例小白也能轻松get完课后还赠送《AI产品经理面试题库》、《AI大模型应用案例集》不断更新中……适合人群想转型AI产品经理、AI项目管理专家、AI产品解决方案等岗位想进行AI产品创业的创业者想成为制作AI产品的程序员想利用AI解决企业问题的管理岗想在AI方向寻找就业方向的毕业生AI方向前景广阔、待遇好目前很多产品人已经通过完整学习拿到大厂高薪offer收入嗷嗷涨我把AI产品经理的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】