高级 RAG 方法
一条基础 RAG 流程会检索若干片段,再交给模型回答。继续改进时,需要知道错误发生在哪个环节:正确资料是否进入索引,问题是否表达完整,候选是否包含答案,以及模型是否保留了证据中的条件。
本节接着 RAG 完整链路展开。先讨论文档如何组织、查询如何形成,再进入召回、排序和上下文处理;复杂任务中的选源、多步检索和图结构另设专题。
六组专题
| 分组 | 内容范围 |
|---|---|
| 文档组织与长上下文 | 父子块与句窗、RAPTOR、LongRAG,以及长上下文与 CAG |
| 查询处理 | 查询改写、多查询、HyDE、Step-back,以及 Self-Query 条件提取 |
| 召回与排序 | 混合检索与 RRF、SPLADE、ColBERT、Reranker |
| 上下文与答案 | 证据选择、压缩、引用、冲突处理与拒答 |
| 检索策略与复杂问答 | 数据源路由、问题分解、Agentic RAG,以及 Adaptive-RAG、CRAG、Self-RAG、FLARE |
| 图检索 | 知识图谱 RAG、Microsoft GraphRAG 与 LightRAG |
前四组覆盖固定 RAG 流程中可以独立改进的环节。第五组讨论执行过程如何随请求和检索结果变化。第六组使用实体、关系和图社区组织资料,适合需要跨文档关联或全库归纳的问题。
从错误定位到方法选择
一个报销助手答错了提交期限,原因可能是正确制度没有入库,也可能是生成模型把提交期限读成了付款时间。两种情况需要改动的地方不同。
| 观察到的问题 | 优先检查 | 对应专题 |
|---|---|---|
| 原始文档有条款,索引里却没有 | 解析结果、入库状态、文档版本 | 企业 RAG 数据工程 |
| “那境外呢”没有带上前文的报销主题 | 检索请求是否完整 | 查询改写 |
| 正确条款存在,但口语表达匹配不到 | 查询表达与召回方式 | Multi-Query、HyDE、混合检索 |
| 正确条款已经进入候选,却排在无关片段后面 | 候选排序 | Reranker |
| 命中了期限,却没有带回适用范围和例外 | 分块、返回粒度与上下文截断 | 父子块与句窗、上下文选择 |
| 比较两年规定时只找到一年 | 子问题覆盖与执行依赖 | 问题分解与多跳检索 |
| 完整证据已在上下文,答案仍混淆条件 | 生成约束与引用支持关系 | 证据引用、冲突处理与拒答 |
排查时需要能回看原始问题、实际查询、过滤范围、候选片段、最终上下文和回答引用。如果知识库缺少资料,或者用户无权访问,增加查询次数也不能保证取得答案。
模块组成与执行方式
文献中的 Naive RAG、Advanced RAG 和 Modular RAG 描述了不同的组织方式。Naive RAG 通常指直接检索后生成的基础流程;Advanced RAG 在检索前后加入查询改写、重排等改进;Modular RAG 将查询、检索、生成等拆成可组合模块。它们不要求项目按顺序升级。
模块如何组合,与在线执行是否需要多轮检索,可以分别考虑:
固定流程:问题 → 检索 → 选择证据 → 回答
条件流程:问题 → 判断任务类型
├─ 改写已有文字 → 直接处理
└─ 查公司制度 → 检索 → 回答
迭代流程:问题 → 检索 → 检查缺口
├─ 证据充分 → 回答
├─ 有明确补查方向 → 再检索
└─ 缺资料、条件或预算 → 部分回答 / 澄清 / 停止这些执行方式都可以使用混合检索、父子块和重排。检索路由负责选择数据源;问题分解安排事实需求及依赖;Agentic RAG 根据已有结果决定下一步。Adaptive-RAG、CRAG、Self-RAG 和 FLARE 则分别介绍具体的策略选择、检索纠错或生成中检索机制。
模块之间应保留片段标识、原文、来源和版本。返回空结果、服务超时、证据缺少一个前提,需要不同的处理方式,不能都变成一段空文本。
各组入口列出文章及其内容边界。评测指标、索引更新、权限隔离、成本与延迟的系统性处理集中在 RAG 评估与生产工程中。