什么是 Advanced RAG?
什么是 Advanced RAG?
这道题考的是 RAG 系统的全链路优化能力。面试官想看你能不能说清楚:为什么需要 Advanced RAG?它比普通 RAG 强在哪?具体优化了哪些环节?
我从四个方面来讲:RAG 的进化脉络、核心优化技术、关键技术组件、和实际应用中的框架。
1. 先搞懂 RAG 的“进化史”
先说个背景。RAG 不是一步到现在的样子的,它经历了三个阶段:
Naive RAG → Advanced RAG → Modular RAG
Naive RAG 是最早期的形态。query 进来,直接去知识库搜,搜到什么塞给大模型生成。听着能用,但问题一堆:
- 召回不准:用户问的是“苹果”,它分不清是水果还是公司
- 上下文太长:一股脑塞给大模型,prompt 动不动就爆 token
- 灵活性差:各个环节耦合在一起,优化只能改一处动全身
Advanced RAG 就是在 Naive 的基础上,给每个环节都加了优化。它不是推倒重来,而是在原有架构上打补丁、做增强。
Modular RAG 更进一步,把 RAG 拆成一个个独立模块,可以根据场景自由组合。这更像是一种设计理念。
面试的时候,你只要能说清楚这三个阶段的演进,说明你对 RAG 的发展是有整体认知的。
2. Advanced RAG 的“手术刀”
Advanced RAG 的核心优化分三个阶段:
预检索(Pre-Retrieval) → 检索(Retrieval) → 检索后(Post-Retrieval)
预检索:磨刀不误砍柴工
预检索是给检索打基础的阶段。
问题往往在这时候就埋下了伏笔——用户问的问题可能表达不清楚、知识库的组织方式可能不利于检索。
常见的预检索优化有两个方向:
索引优化:在构建知识库索引的时候就想好怎么被搜到。
- 分层索引:把文档分成大块小块,小块精准匹配,大块提供上下文。检索用小块,上下文用大块。
- 父子索引:大块包含小块的信息,小块指向大块。好处是既能精准召回,又不会丢了背景知识。
- 假设性问题索引(HyDE):给每个文档生成几个“假设性问题”,索引的是这些问题。检索的时候,用户的真实问题去匹配假设性问题,再找到对应文档。
查询优化:把用户的自然语言问句转化成更适合检索的形式。
- 查询改写(Query Rewriting):用户说“我想了解一下你们公司的年假制度”,系统改写成“年假制度 政策”。更精准,不容易被无关内容带偏。
- 查询扩展(Query Expansion):用户问“怎么重启服务器”,系统扩展成“重启服务器 方法 步骤 命令”。多几个关键词,召回率直接拉高。
简单说,预检索优化就是问对问题 + 建好索引。这两件事做好了,检索就成功了一半。
检索:找准找对
这个阶段是核心。Advanced RAG 主要做的是混合检索——把多种检索方式结合起来用。
常见的组合是稀疏检索(BM25)+ 密集检索(向量相似度匹配)。
- 关键词找字面相关:用户用了什么词,就优先找包含这些词的文档。
- 向量找语义相关:即使表述不同,但意思相近的文档也能被找到。
两种方式各有优劣:
- 稀疏检索(BM25):擅长专有名词、术语匹配,但理解不了同义词。用户问“电脑”,它找不到“计算机”。
- 密集检索(向量):理解语义,但可能忽略关键词本身的重要性。
混合检索就是取长补短。
怎么融合两种检索的结果?通常用 RRF(Reciprocal Rank Fusion) 算法。简单说就是给两种检索结果分别排名,然后按公式加权算总分。排名靠前的结果分值高,最后综合出一个统一的结果集。
检索后:精挑细选
检索回来一堆文档,不是一股脑塞给大模型就完事了。
重排序(Rerank):把最相关的放到最前面。初始检索可能召回 20 条,重排序后挑出最匹配的 3-5 条给大模型。
上下文压缩:过长的上下文会影响大模型的理解和推理。把无关内容删掉,只留精华,既能降低 token 消耗,也能提高回答质量。
混合搜索 + RRF:把向量检索和 BM25 的结果用 RRF 融合,输出一个统一的排序结果。
说白了,后检索优化就是精准筛选——从海量候选中挑出最合适的。
3. 核心技术组件
HyDE(假设性文档嵌入)
这个思路很有意思。
用户问一个问题,先让大模型根据这个问题生成一个假设性的答案。然后把这个假设答案转成向量,去知识库里检索和它最相似的真实文档。
为什么这么做?因为假设答案可能包含更规范、更完整的表述,和知识库里的真实内容更匹配。
举个例子:用户问“如何优化 RAG 系统?” 假设答案可能包含“检索增强 优化策略”这类关键词,比用户的原始问法更容易匹配到相关文档。
父子块检索
把文档切成小块的时候,再加一层结构:大块包含小块,小块指向大块。
检索的时候用小块精准匹配,补充上下文的时候用大块。这样既能保证相关性,又能拿到足够的背景信息。
RRF 算法
RRF 的公式长这样:
$$Score(d) = \sum_{r \in R} \frac{1}{k + rank_r(d)}$$
看不懂没关系,重点是它的效果:把不同检索方法的结果融合成一个,而不是简单拼接或者取交集。
在实际系统中,混合搜索 + RRF 是标配组合。
4. Advanced RAG 强在哪?
用一个类比:
Naive RAG 像傻瓜相机,你按下快门,它就拍。能不能拍清楚?不知道。
Advanced RAG 像单反相机,你可以调焦距、光圈、ISO,每个参数都能优化。
具体差异看这几个维度:
| 维度 | Naive RAG | Advanced RAG |
|---|---|---|
| 查询处理 | 直接检索 | 改写/扩展/压缩 |
| 索引方式 | 固定分块 | 层次化/动态分块 |
| 检索策略 | 单一检索 | 混合检索 + Rerank |
| 上下文管理 | 直接拼接 | 压缩/增强/筛选 |
Advanced RAG 不是把所有技术都用上,而是根据场景选择合适的优化组合。中小企业知识库可能用混合检索就够了,法律文档场景可能需要 HyDE + 父子块。
5. 实战框架:LlamaIndex 三步骤
说到实际实现,LlamaIndex 是最常用的 RAG 框架之一。它的查询流程分三步:
Retrieve → Postprocess → Synthesize
- Retrieve:从知识库中检索相关文档,支持向量检索、BM25、混合检索等多种方式。
- Postprocess:对检索结果做重排序、压缩、去重,生成更干净的上下文。
- Synthesize:把处理后的上下文和用户问题拼在一起,调用大模型生成回答。
LlamaIndex 的优势是灵活。你可以根据场景选择不同的检索器、后处理器和合成器,组合出最适合你业务的 RAG 流程。
面试怎么答
基础版(150字左右):
Advanced RAG 是对 Naive RAG 全流程优化的版本,核心思路是在检索前、检索中、检索后三个阶段分别做增强。预检索阶段优化查询表达和索引结构,比如 HyDE 用假设答案引导检索;检索阶段采用混合检索,结合 BM25 关键词匹配和向量语义搜索,用 RRF 算法融合排名;检索后阶段对结果重排序和压缩,提升上下文质量。相比 Naive RAG 的简单流水线,Advanced RAG 在检索精度和上下文管理上有显著提升。
加分版(能说 3 分钟的版本):
如果把 RAG 发展分成三个阶段,Naive RAG 是最早的“检索+生成”流水线,问题在于检索不准、上下文管理粗糙。Advanced RAG 在这个基础上做了全链路优化。
具体来说,预检索阶段做查询改写和索引优化,比如 HyDE 用假设答案引导检索;检索阶段用混合检索结合 BM25 和向量搜索,用 RRF 算法融合排名;检索后阶段做 Rerank 和上下文压缩,去掉无关信息,只留精华。
我理解 Advanced RAG 的核心不是堆技术,而是根据场景灵活组合优化。它的设计理念影响了后续 Modular RAG 的发展——把每个环节拆成独立模块,按需组合。
一句话总结
Advanced RAG 就是给 RAG 的每个环节都加上针对性优化,让检索更准、上下文更干净、回答质量更高。
