本文属于 RAG 工程框架中的「2 索引与召回」环节,聚焦「Advanced RAG」方法。可先阅读 RAG-00.方法概述 再进入本篇。
原理
。Naive 基础上加入“检索前后处理”:Query Transform、Hybrid Recall、Rerank、Compression。
1 | flowchart TD |
关键技。
- Multi-query、HyDE、query decomposition。
- Dense + Sparse 混合召回。
- Cross-encoder 重排。
- Contextual compression。
优缺。
- 优点:准确率、引用相关性显著提升。
- 缺点:链路长,调参与监控复杂。
性能/资源
- 在线时延:中到高(多路检。重排)。
- 算力成本:重排器是主要增量开销。
应用场景
- 金融、法律、医疗等“答错成本高”的问答系统。
- 多语种、多文档格式知识库。
统一合成数据示例
输入数据片段
1 | { |
中间结果(多路召回+重排)
1 | { |
最终生成示例(含引用)
1 | { |
原始发表与工程实现
- 代表性原始发表:HyDE (Gao et al., 2023), Self-RAG (Asai et al., 2024)。
- 核心解决问题:解决复杂查询下召回不足与生成不稳。
- 成熟实现工具:LangChain, LlamaIndex, Haystack。
详细原理拆解
- 多查询改写 + 多路召回 + 重排 + 压缩,核心在召回增益是否覆盖链路时延开销。
- 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
- 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1 | flowchart LR |
工程落地扩展示例
伪代码
1 | def advanced_rag(query, retrievers, rewriter, reranker, compressor, llm): |
参数示例
1 | rewrite_variants: 3 |
常见失败案例
- 失败模式 1:改写分支过多,时延与成本线性涨,收益被运维抵消。
- 失败模式 2:压缩器过度删句,删掉否定词/数字,faithfulness 反降。
- 失败模式 3:重排很强但上游召回池仍偏,精排无米下锅。
Demo 数据带入计算示例
1 | 原查询 q0 单路 recall@10=0.62;改写 {q1,q2,q3} 三路检索后合并去重 recall@10=0.81。 |