6阶段实现最强RAG 模块化检索增强 实践指南
通过RAG检索增强生成,补充大模型的能力,是当前AI应用热点方向,带你一次读懂 模块化RAG 的实践要点,帮AI应用系统开发者快速落地 🔥
1 模块化RAG架构总览
核心阶段 | 关键动作 | 挑战/收益 |
---|---|---|
索引 | 文档切块 | 粒度与冗余平衡 |
检索前优化 | 拓展/改写查询 | 减少歧义 |
检索 | 稀疏/稠密/混合 | 效率 vs 语义 |
检索后优化 | 重排/压缩/选择 | 对齐窗口限制 |
LLM生成 | 多份文档给LLM | 防幻觉 |
全流程编排 | 流控制 | 跨模块协作 |
📊 表格浓缩了 模块化 RAG 六大阶段,突出每步的动作焦点与典型痛点。模块化 RAG 把 索引→检索→生成 的经典链路拆成更细颗粒,并在两端加上 预检索优化 和 检索后优化 双保险;再用 编排模块 将算子组装为计算图。每个模块可独立升级。
📊 框图展示各个子模块的直线串联,粉色起点与绿色终点强调“从块到答案”的闭环。虽然图形是线性的,但在实现里常配合编排模块实现条件模式、分支模式、循环模式;决定什么时候重检索、什么时候直接生成。
2 索引模块
策略 | 优势 | 注意点 |
---|---|---|
块优化-滑动窗口 文档拆分为多个固定片段,相邻片段之间有一重叠 | 语义连续 | 重叠引入冗余 |
块优化-语义块切分 文档分段生成嵌入向量,相似度高的合并为一个块 | 保持主题完整 | 阈值难调 |
块优化-Small-to-Big 使用小片段精准匹配,通过引用父级较大片段进行生成 | 检索准、生成全 | 双层存储成本 |
结构优化-层次化索引 每个节点存储对应块的摘要用于快速检索 | 快速定位 | 节点摘要质量 |
结构优化-知识图谱索引 将文档组织为图结构 | 显式关系 | 构图开销 |
📊 表中罗列五大切块/组织技术及其利弊,帮助选型。大块带上下文,小块抓关键;滑动窗口用重叠补偿割裂,但别把窗口设太小;若算充裕,推荐 层次+KG 组合拳:上层快速粗排,下层图检索补语义。
索引阶段先要回答“切多细?怎么存?”。
向量块优化 通过窗口或 Small-to-Big 实现检索/生成双优;
层次化索引 用标题、章节等显式结构做父-子树,一跳定位;
KG Index 则把段落映射为节点,三元组连边,让Text-to-Cypher查询成为可能。元数据(页码、作者等)再加一层过滤,构成多维检索键。
📊 上侧文本被切块并重叠;下侧转为 KG 节点 实现多视角索引。搞清“块→KG→Embed” 这三跳,可让后续检索在 语义空间+结构空间 双线并行;当查询是“上海哪家高校 NLP 方向专利多?”时,KG 能先找“高校-专利”关系,再把候选论文段落 embed 进向量库,提高命中。
📊 语义块切分示意图 通过将文档划分为基于语义的块,每个块能够代表一个完整的思想或主题,而不是单纯按照固定长度切分。首先对文档进行分段(如按句子或段落),然后对每一段生成嵌入向量。如果相邻段落之间的嵌入向量的相似度较高,就将它们合并为同一语义块;如果相似度显著降低,则开启一个新的块。
3 检索前优化模块
子模块 | 典型方法 | 价值 |
---|---|---|
查询扩展 | Multi-Query | 补全语境 |
Sub-Query | 分治复杂问题 | |
查询改写 | T5-Rewrite | 简化歧义 |
HyDE/Reverse | 转“问-答”匹配 | |
查询结构化 | Text-to-SQL | 调用表数据 |
Text-to-Cypher | 图遍历 |
📊 三大子模块把“模糊输入”磨成“利刃查询”。若输入是 “LLM 未来趋势?”, Multi-Query 会同时生成 “大型语言模型发展路线” “参数量瓶颈” 等子询;Sub-Query 适用像 “对比清华与复旦毕业率” 这类复合问;HyDE 则让模型先猜答案再搜相似文档,效果超预期。结构化查询 让你直接敲向数据库,不走兜圈子。
📊 查询在进入检索前,先走 扩展+改写+结构化 三路并发,再汇聚到检索器。别怕复杂——这些预处理可并行,延迟往往低于一次 LLM 推理;而 Recall/Precision 的提升却是乘法级收益。
4 检索模块
模型 | 优势 | 短板 |
---|---|---|
稀疏检索 BM25 TF-IDF | 极速 | 不懂同义 |
稠密检索 bert | 懂语义 | 算力吃紧 |
混合检索 稀疏+稠密检索 | 兼顾两端 | 融合策略复杂 |
📊 稀疏检索 适合海量文档冷启动;稠密 适合长尾、口语化问句;最香的是 混合:先用 BM25 粗排 5k 篇,再让稠密向量重排 100 篇,最终喂给 LLM 的只有 20 篇高质 Chunk。混合检索一般走 “二段式”:Stage 1 粗排(BM25 / Splade)Stage 2 精排(Bi-Encoder / Cross-Encoder)。
📊 二段式混合检索流程,先快后准。把粗排阈值 k 调到“GPU 能扛的上限”,重排才值回算力成本;另外稀疏索引建议隔日离线刷新,稠密向量可增量刷。
📊 混合检索将稀疏向量和稠密向量的得分进行融合,或者在检索流程中分阶段使用两者。在第一阶段使用稀疏检索从大规模文档库中快速筛选出一个候选集合;在第二阶段对候选文档进行稠密检索或语义重排序以提升结果的相关性。
5 后优化模块
步骤 | 手段 | 目的 |
---|---|---|
重排序 | MMR / Cross-Enc | 提相关 降冗余 |
压缩 | 小模型 f_comp | 降噪声 |
评估 | LLM-Critique | 过滤反事实 |
选择 | Self-Info 评分 | 删低价值 |
📊 后处理让 LLM 吃到的是“干货”而非“糠壳”。重排序 优先级最高,直接决定前 n 条 Chunk;压缩 可把 3k token 缩到 800 token 而保持要点;LLM-Critique 适用于法律/医疗等高风险场景,先自查再回答;Selective Context 用自信息量筛句子,曾在 OpenAI 论文中把准确率抬高 9%。
📊 四级过滤管线逐步“瘦身”,最后喂给 LLM 的是 Context。别忘了记录每级删除原因,写入 Explain Log,方便事后追责与调参。
6 生成模块
之前的模块负责“找文档”,怎么把检索到的多份文档喂给 LLM?四种实现如下:
StuffDocuments:把所有文档直接串成 一条长上下文,一次性传给LLM。
文档总量 < 模型窗口 使用 简单高效。
RefineDocuments:对第 2 ~ n 篇文档依次调用LLM 每轮都拿「当前草稿 + 新文档」产出新草稿,如同逐章审稿。
窗口不足但需融合多文信息可逐步累加改写。
MapDocuments:对每份文档并行调用 LLM,得到子答案/摘要然后合并
top-k 很大(>50)或高并发用并行 Map 降低时延。
ReduceDocuments:对每份文档执行同一 LLM,让模型同时输出 回答 与 置信分;最后取最高分那条回答返回。
只想拿“最可能正确”的一句让模型自评打分。
指标 | Stuff | Refine | Map-Reduce | Map-Rerank |
---|---|---|---|---|
LLM 调用次数 | 1 | n | n(可并行) + 1 | n |
能否跨文档融合 | 最强 | 强(迭代) | 取决于 Reduce prompt | 弱 |
典型场景 | k 小 / 需多文对比 | 顺序阅读、长篇 refine | 大规模检索摘要 | 精选最相关 |
📊 四种策略快速对比
7 全流程编排模块
模式 | 适用场景 | 亮点 |
---|---|---|
线性 | FAQ/简报 | 实现简单 |
条件 | 多域问答 | 动态路由 |
分支 | 思路发散 | 多视角融合 |
循环 | 复杂推理 | 迭代深挖 |
📊 四大模式是 模块化 RAG 的“战术库”,按需组合。线性 足够撑起 70% 场景;但当问题类型悬殊时,用 条件路由 把 “娱乐” 问题分到轻量链、“严肃” 问题分到重审链;分支模式 类似 “多代理辩论”,能显著提升创造性与稳定性;循环(迭代/递归/自适应) 则把 “先想-再搜-再想” 的人类策略搬进机器,回答学术深问时尤为管用。
📊 Router 将请求导向三类子图,最右侧是带判定回环的循环流。别在循环里忘了最大步长限制;判定条件可用 BLEU/Rouge+人工规则 混合,避免永动机。