资讯动态

从零开始学无训练 RAG(二):给 RAG 画一张“乐高说明书“——Modular RAG(arXiv 2407.21059,F0 框架层)精读

发布时间:2026/10/29 11:04:52 来源:尧图企业网站定制
系列导航这是无训练型检索增强生成RAG经典架构梳理系列的第二篇。 本系列路线① Naive RAG 基线T0→ ② Modular RAG 图纸F0本篇→ ③ 查询侧增强T1→ ④ 动态检索T2→ ⑤ 检索后治理T3→ ⑥ 边界讨论 → ⑦ 评价指标 → ⑧ 横向对比总表。 上一篇我们知道了 Naive RAG 的骨架是检索 → 拼接 → 生成也知道它最大的软肋是对检索质量完全不设防。但动手之前得先有图纸——否则你根本说不清自己改的是哪一块。摘要从 2020 到 2024 年业界往 RAG 里塞进了几十种技巧查询改写、多路检索、重排序、上下文压缩、混合检索……问题是这些技巧散落在几十篇论文里谁也说不清它们彼此是什么关系。Modular RAGYunfan Gao 等2024做的事不是提出一个新算法而是给出一套模块 算子 编排的共同语言把 RAG 系统变成可以随意拆装的乐高。本文讲清它的三大模块、三种编排机制和六种流模式并说明它对无训练型 RAG这个主题的特殊意义它划定了无训练改造的全部合法空间。关键词Modular RAG、模块化 RAG、F0 框架层、算子、路由、调度、融合、RAG Flow、无训练一、它要解决什么问题RAG 患上了补丁肥胖症上一篇我们列过 Naive RAG 的五个坑检索是一锤子买卖、从不问该不该查、噪声文档进 prompt、切块破坏语义、做不了多跳。于是全世界开始了同一场运动——打补丁检索查不准那就改写一下问题再查Query Rewriting。还是不准那就一次生成好几个问题分头查再把结果合并多路检索。结果排序不好加一个重排序模型把最相关的排到前面Rerank。上下文太长压缩一下再喂给模型Compression。关键词和语义各有所长那就两个一起用混合检索。每一个补丁单独看都有效但放在一起就乱了。Modular RAG 这篇论文一针见血地指出了三个麻烦没有共同语言。同一个技巧在不同论文里叫不同名字查询改写、查询扩展、HyDE 本质上都在改查询新手根本不知道它们是同一类东西。检索-然后-生成这个说法装不下了。加了循环、加了分支、加了判断之后流程早就不是一条直线一个短语已经描述不清。工程上没法替换和诊断。效果差了你不知道该换哪个零件只能整体重写别人的系统你也没法照着复现。打个比方以前的 RAG 像一辆焊死的车坏了只能整车回厂Modular RAG 想给这个行业出一本零件目录 工位手册让每个人都能指着图纸说把第 3 号零件换成第 7 号。二、工作流程三个车间加一个调度室Modular RAG 把整个系统拆成三大模块Module加一层编排Orchestration┌──────────── 编排层 Orchestration ────────────┐ │ Routing 路由这个问题该走哪条管道 │ │ Scheduling 调度要不要再查一轮何时停 │ │ Fusion 融合几条管道的结果怎么合并 │ └──────────────────────────────────────────────┘ ▲ 统一指挥 用户提问 │ ▼ 【车间一】索引 Indexing ── 决定书怎么摆 切块 → 向量化 → 建索引可加摘要、元数据、图谱、混合索引 │ ▼ 【车间二】检索 Retrieval ── 决定怎么找 检索前改写/扩展/分解问题 ← T1 查询侧增强在这 检索中稀疏(BM25) / 稠密(向量) / 混合 检索后重排序 Rerank、压缩 Compression、挑选 Selection ← T3 在这 │ ▼ 【车间三】生成 Generation ── 决定怎么答 选生成器 → 组织提示词 → 生成 → 可选验证与引用标注 │ ▼ 答案 ────不满意回到调度层再来一轮请注意最后那个回环箭头这正是 Modular RAG 和上一篇 Naive RAG 最本质的区别——Naive RAG 是一条单向直线Modular RAG 允许回头、允许分叉、允许绕路。图中我已经顺手标了两个位置T1 在检索前T3 在检索后。从第三篇开始每读一个新方法你都可以先问一句它落在哪个格子思路会清晰很多。三、核心机制拆三个点关键点一模块Module与算子Operator——两级抽象这是全篇最重要的概念但极其好懂模块 车间 / 工位回答这一段流程在干什么。只有三个索引、检索、生成。算子 工位里可替换的具体工具回答这一步具体怎么做。比如检索这个模块里可以插进这些算子查询改写、查询扩展、多路召回、混合检索、重排序、上下文压缩、文档过滤。换算子不改模块你想把重排序从 A 模型换成 B 模型别的部分一行代码都不用动。这套两级抽象带来的最大好处是可插拔与可诊断效果不好时你可以逐个替换算子做对照实验而不是把整个系统推倒重来。关键点二三个车间各有哪些常用算子模块阶段常用算子举例索引—固定切块、Small2Big小块检索、大块回喂、滑动窗口、摘要索引、元数据挂载、知识图谱索引、混合索引检索检索前查询改写、查询扩展、查询分解拆成子问题、HyDE先生成假答案再去检索检索检索中稀疏检索BM25靠词频、稠密检索向量、混合检索两者都查检索检索后重排序 Rerank、上下文压缩、文档选择 / 过滤生成—生成器选择、提示词组织、结果验证、引用标注看到这张表你大概会恍然大悟原来那些看起来五花八门的 RAG 技巧全都只是某个格子里的一个算子而已。这就是 Modular RAG 最大的价值——它把知识从一堆散点变成了一张表格。关键点三编排三件套——真正超越线性架构的地方只有模块不算新鲜真正让 Modular RAG 超越检索-生成直线的是编排层的三个机制Routing路由问题进来先看一眼再决定走哪条管道。比如闲聊直接答、时效问题走联网搜索、结构化问题走数据库查询。它解决了不该检索时就别检索。Scheduling调度决定什么时候检索、检索几轮、什么时候停。这一步把一次检索定终身变成了可以迭代的过程也是后面T2 动态检索FLARE、DRAGIN、ITER-RETGEN能成立的前提。Fusion融合几条管道各查各的结果必须合并。最经典的做法是RRFReciprocal Rank Fusion倒数排名融合不去纠结各路的分数怎么比而是按排名越靠前得分越高来加权合并简单又稳健。第三篇会详细讲它。一句话总结这三件套路由决定走哪条路调度决定走几遍融合决定多条路的结果怎么并。四、六种流模式论文的精华以及它好在哪、局限在哪论文把常见系统的流程抽象成若干流模式RAG Flow其中摘要明确归纳了四种线性、条件、分支、循环图中还展示了递归、自适应等变体线性 Linear检索一次 → 生成一次。这就是第一篇讲的 Naive RAG——所以 Naive RAG 不是被推翻了而是被收纳成了 Modular RAG 的一个最简特例。条件 Conditional先判断再选管道。典型是路由问题分类型走不同检索器对应 Routing。分支 Branching多条管道并行查比如同时改写出三个问题分头检索最后融合结果对应 Fusion——第三篇的 Multi-Query RRF 就是它。循环 Looping检索 → 生成 → 再评估 → 再检索。第四篇的 T2 动态检索FLARE、DRAGIN、ITER-RETGEN就是它。递归 Recursive把复杂问题拆成子问题一层层往下查用上一层的答案做下一层的检索条件——多跳问答靠它。自适应 / 调优 Adaptive根据反馈自动调整阈值或策略第五篇 MAIN-RAG 的自适应过滤阈值就有这个味道。比上一代好在哪它提供了统一坐标系让每篇新论文都能被精确定位这个方法在改检索后处理算子 循环流工程上可插拔、可复现、可诊断学术上把循环与分支合法化为后面的动态检索与结果治理铺好了路。局限在哪同样要清醒它只给目录不给答案。你的场景该选哪组算子论文不告诉你全靠实验。组合爆炸算子几十种两两组合成千上万穷举不现实。缺乏自动搜索与统一评测目前选组合基本还是经验活。框架本身不产生新能力效果上限取决于你挑的算子选错了照样差。五、它为什么属于无训练型严格说Modular RAG 不是某一个方法而是一套框架 / 范式它压根不涉及训练任何模型参数。用本系列统一的训练部位三分法来判定部位Modular RAG说明生成器冻结框架不要求改动生成器选谁都行检索器冻结框架不要求改动检索器选谁都行判别器 / 分类器无可选框架本身不引入但你可以往里插一个训练型的重排器或分类器判定结论框架本身是纯无训练的准确说法是训练无关training-agnostic——训练与否由你选择的算子决定框架不干涉。更具体地说绝大多数算子都是外部过程切块是字符串操作融合是一行排序公式改写和重排只需要调用一个现成的模型参数冻结、原样使用压缩只是裁剪文本。整个过程不更新任何权重。它是中立的框架允许你把训练型算子插进去比如微调一个 reranker、微调检索器。这对我们这个系列特别重要第一篇说过无训练型 RAG 的改造位置是检索侧、流程侧、提示词。Modular RAG 正好把这句话落成了图纸——索引车间、检索车间、生成车间、编排层就是无训练改造的全部合法空间。后面 T1 到 T4 的每一类方法全都是在这张图纸的某个格子里放了一个新算子。六、一个能记住它的类比乐高和中央厨房类比一乐高。Naive RAG 一个出厂就粘死的成品模型坏了只能整体换。模块 零件大类砖块 / 轮子 / 齿轮。算子 大类里具体的那一块零件2×4 的红砖、带齿的黄轮。编排 拼装说明书先拼哪一步、要不要重复、几套组件怎么接到一起。Modular RAG 一盒散装乐高 一本说明书人人都能照着图纸改。类比二中央厨房。洗菜、切菜、炒菜、装盘是几个工位模块每个工位有不同的工具算子切菜可以切丝、切片、切丁。而调度员站在中间喊这道菜没熟回锅再来一轮Scheduling这桌客人要清淡走清淡那条线Routing两个灶同时出的菜装一个盘子Fusion。七、小结与下一篇预告这一篇我们只要记住三件事Modular RAG 是把 RAG 拆成模块 算子 编排的通用语言Naive RAG 被收纳成了它的最简特例线性流它本身不涉及训练是无训练改造的图纸划定了全部合法空间。有了这张图纸下一篇终于可以往格子里放真正的零件了。我们进入T1 查询侧增强读一篇反直觉的论文HyDEarXiv 2212.10496——它说别拿问题去检索先让大模型凭空编一篇假答案拿这篇假答案去检索真文档。听起来离谱效果却出奇地好而且一个参数都不训练。同一格里还有更朴素的Multi-Query RRF把问题改写成几个角度分头查再按排名融合。 本篇指标卡系列统一字段八篇汇总即对比矩阵维度本篇Modular RAG类型归属F0 编排框架层训练依赖生成器 / 检索器 / 判别器冻结 / 冻结 / 无框架本身不涉及训练但允许插入训练型算子故称 training-agnostic改造位置全部索引 · 查询 · 检索时机 · 检索结果 · 生成——它不改造任何一环而是给所有环节提供图纸额外开销不固定取决于所选算子组合是否需白盒访问否论文报告指标无框架类论文不报指标抗噪性取决于所选算子接入过滤 / 重排算子则强只走线性流则弱拒答能力取决于是否接入路由或条件流适用边界任何 RAG 系统——它是描述语言不是具体方法选型答案需要靠实验附本篇术语小抄术语一句话解释Module模块RAG 流程中的一个大阶段索引 / 检索 / 生成Operator算子模块内部可替换的具体做法如重排序、查询改写Orchestration编排指挥模块之间怎么配合路由、调度、融合Routing路由按问题类型选择不同的处理管道Scheduling调度决定检索几轮、何时停止、何时回头Fusion融合把多路检索结果合并成一份如 RRF 倒数排名融合Rerank重排序用更精细的模型把粗检索结果重新排序Compression压缩裁剪掉无用文字让上下文更短更纯混合检索关键词检索BM25与向量检索同时进行递归检索把复杂问题拆成子问题逐层往下查多跳问答training-agnostic框架不规定训不训练由你插入的算子决定️ 本系列的类型地图后续各篇都按这个坐标定位代号类型核心命题代表方法开销T0基线型先查再答Naive RAG第 01 篇1×T1查询侧增强把问题变得更可检索HyDE、Multi-Query RRF1~2×T2动态检索由模型决定何时检索、检索几轮FLARE、DRAGIN、IRCoT、ITER-RETGEN1.5~4×T3检索后治理取回的文档先筛一遍再喂MAIN-RAG、现成 Reranker1.5~K2×T4知识组织索引侧换一种方式存知识RAPTOR、Small2Big、GraphRAG离线贵线上 ≈1×F0编排框架层给所有零件提供拼装图纸Modular RAG本篇—一句话串起来无训练型 RAG 能动手的地方只有检索侧与流程侧模型内部动不了——所以按改造位置分类比按时间罗列论文更能看清这一类方法的本质。版权声明本文为原创学习笔记转载请注明出处。系列标签#RAG #检索增强生成 #Modular RAG #大模型 #论文精读 #无训练RAG #课程笔记上一篇从零开始学无训练 RAG一RAG 到底在解决什么问题——Naive RAG 基线T0与 Lewis et al. 2020 的原始思想下一篇预告HyDEarXiv 2212.10496与多路检索 —— 别用问题去检索先用假答案去检索

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑