先来概括一下它的核心定位:FlashRAG 是一个专门为检索增强生成(RAG)研究而设计的 Python 工具包,主要用于算法的复现与二次开发。工具包内部已经集成了 32 个经过预处理的基准 RAG 数据集,以及 12 种目前业界公认的先进 RAG 算法。

https://github.com/RUC-NLPIR/FlashRAG
https://arxiv.org/html/2405.13576v1
框架的核心特性
从架构设计上来看,FlashRAG 有几个值得关注的亮点:
首先是它的可扩展性和定制能力。框架内嵌了 RAG 场景下的基础组件,比如检索器、重排序器、生成器以及上下文压缩器,开发人员可以像搭积木一样,灵活地组装出复杂的流水线流程。
其次是它提供了一套相当完整的基准数据集——总共 32 个,均已完成预处理,可以直接用于测试和验证 RAG 模型的性能,省去了不少数据清洗和格式转换的麻烦。
在算法层面,FlashRAG 预先实现了 12 种先进的 RAG 算法,并且附带了对标的结果报告。这意味着你可以在不同设置下轻松复现这些结果,拿来作为自己研究的基线或对照,非常顺手。下面这张表就直观地汇总了当前内置的算法及其在多个主流数据集上的评测表现。
| Method | Type | NQ (EM) | TriviaQA (EM) | Hotpotqa (F1) | 2Wiki (F1) | PopQA (F1) | WebQA(EM) | Specific setting |
|---|---|---|---|---|---|---|---|---|
| Naive Generation | Sequential | 22.6 | 55.7 | 28.4 | 33.9 | 21.7 | 18.8 | |
| Standard RAG | Sequential | 35.1 | 58.9 | 35.3 | 21.0 | 36.7 | 15.7 | |
| AAR-contriever-kilt | Sequential | 30.1 | 56.8 | 33.4 | 19.8 | 36.1 | 16.1 | |
| LongLLMLingua | Sequential | 32.2 | 59.2 | 37.5 | 25.0 | 38.7 | 17.5 | Compress Ratio=0.5 |
| RECOMP-abstractive | Sequential | 33.1 | 56.4 | 37.5 | 32.4 | 39.9 | 20.2 | |
| Selective-Context | Sequential | 30.5 | 55.6 | 34.4 | 18.5 | 33.5 | 17.3 | Compress Ratio=0.5 |
| Ret-Robust | Sequential | 42.9 | 68.2 | 35.8 | 43.4 | 57.2 | 33.7 | Use LLAMA2-13B with trained lora |
| SuRe | Branching | 37.1 | 53.2 | 33.4 | 20.6 | 48.1 | 24.2 | Use provided prompt |
| REPLUG | Branching | 28.9 | 57.7 | 31.2 | 21.1 | 27.8 | 20.2 | |
| SKR | Conditional | 25.5 | 55.9 | 29.8 | 28.5 | 24.5 | 18.6 | Use infernece-time training data |
| Self-RAG | Loop | 36.4 | 38.2 | 29.6 | 25.1 | 32.7 | 21.9 | Use trained selfrag-llama2-7B |
| FLARE | Loop | 22.5 | 55.8 | 28.0 | 33.9 | 20.7 | 20.2 | |
| Iter-Retgen, ITRG | Loop | 36.8 | 60.1 | 38.3 | 21.6 | 37.9 | 18.2 |
除了算法和数据集,框架在效率层面也做了不少优化。预处理阶段提供了多种脚本,涉及检索语料处理、检索索引构建、文档预检索等环节,能够显著简化 RAG 工作流的准备过程。而在实际执行层面,FlashRAG 集成了 vLLM、FastChat 用于大模型推理加速,同时采用 Faiss 来管理向量索引——这几项工具叠加,整体效率的提升还是相当可观的。
