faiss 不能用 pip 装,需用 conda 安装 faiss-cpu 或 faiss-gpu;BM25 索引需另装 pyserini 或 bm25s;SPLADE 索引需先装 Rust 和 pyseismic-lsr。
FlashRAG
RUC-NLPIRMIT活跃维护面向 RAG 研究的 Python 工具包,内置多种检索增强生成算法、数据集和评测基准,方便快速复现和对比实验。
⚡FlashRAG: A Python Toolkit for Efficient RAG Research (WWW2025 Resource)
pip install flashrag-dev[full]README 未说明具体显存要求;faiss-gpu 需 Linux x86_64 且 CUDA 11.4 或 12.1,也可用 faiss-cpu 纯 CPU 版本。
FlashRAG 是复现和开发 RAG 研究的 Python 工具库,内置数据集与算法
面向 RAG 研究的 Python 工具包,内置多种检索增强生成算法、数据集和评测基准,方便快速复现和对比实验。
核心能力
- 集成检索器、重排器、生成器、压缩器等可组装组件
- 提供 36 个预处理好的 RAG 基准数据集
- 预实现 23 种 RAG 算法,含 7 种推理型方法
- 用 vLLM、FastChat 加速推理,Faiss 管理向量索引
- 提供可视化 UI 配置并评测 RAG 基线
容易踩的坑
- v0.4.1最新正式版2026-10-27 · 2026-10-27 00:46 UTC
What's Changed
- fix: keep ROUGE and BLEU scores when a prediction is empty by @raashish1601 in https://github.com/RUC-NLPIR/FlashRAG/pull/259
- fix: handle empty results in retrieval precision by @Thebearcoding in https://github.com/RUC-NLPIR/FlashRAG/pull/257
- Fix invalid FAISS neighbors in multimodal retrieval by @Mrkinggggg in https://github.com/RUC-NLPIR/FlashRAG/pull/256
- Fix getattr to catch KeyError in addition to AttributeError by @Jah-yee in https://github.com/RUC-NLPIR/FlashRAG/pull/255
- fix: resolve BART and T5 refiner models in get_refiner by @kabishou11 in https://github.com/RUC-NLPIR/FlashRAG/pull/254
- fix: raise AttributeError for missing Item and Dataset attributes by @kabishou11 in https://github.com/RUC-NLPIR/FlashRAG/pull/253
- fix: score unparsable GAOKAO-MM multiple-choice answers as zero by @kabishou11 in https://github.com/RUC-NLPIR/FlashRAG/pull/252
- fix: avoid matching empty references to every prediction by @jackiectl2 in https://github.com/RUC-NLPIR/FlashRAG/pull/271
- Fix answer resolution for mixed choice and free-answer datasets by @March-7 in https://github.com/RUC-NLPIR/FlashRAG/pull/270
- Preserve multimodal prompts when exporting dataset items by @Darssal in https://github.com/RUC-NLPIR/FlashRAG/pull/269
- Fix cache reuse for Chinese ROUGE scoring by @Ganesh1729-ui in https://github.com/RUC-NLPIR/FlashRAG/pull/261
- fix: use a consistent cache key in ZH_Rouge_Score.calculate_rouge by @Mrkinggggg in https://github.com/RUC-NLPIR/FlashRAG/pull/262
- fix: parse GAOKAO-MM answers whose output starts with the answer marker by @kabishou11 in https://github.com/RUC-NLPIR/FlashRAG/pull/266
- Fix loading saved JSON dataset arrays by @Darssal in https://github.com/RUC-NLPIR/FlashRAG/pull/268
New Contributors
- @raashish1601 made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/259
- @Thebearcoding made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/257
- @Mrkinggggg made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/256
- @Jah-yee made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/255
- @kabishou11 made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/254
- @jackiectl2 made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/271
- @March-7 made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/270
- @Darssal made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/269
- @Ganesh1729-ui made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/261
Full Changelog: https://github.com/RUC-NLPIR/FlashRAG/compare/v0.4.0...v0.4.1
- v0.4.02026-10-01 · 2026-10-01 01:55 UTC
查看更新说明
What's Changed
- Update README by @YuyaoZhangQAQ in https://github.com/RUC-NLPIR/FlashRAG/pull/212
- Update retriever.py by @lihai-zhao in https://github.com/RUC-NLPIR/FlashRAG/pull/216
- [Docs] Add RAG failure modes & debug checklist (#223) by @onestardao in https://github.com/RUC-NLPIR/FlashRAG/pull/224
- Fix: Environment setup scripts and Gradio compatibility for WebUI by @wakaflocka17 in https://github.com/RUC-NLPIR/FlashRAG/pull/228
- Fix ConditionalPipeline component initialization by @xianth123 in https://github.com/RUC-NLPIR/FlashRAG/pull/235
- Fix Question typo in SelfAskPipeline by @xianth123 in https://github.com/RUC-NLPIR/FlashRAG/pull/236
- fix(retriever): stream embeddings to the memmap during encode instead of buffering the whole corpus by @AmirF194 in https://github.com/RUC-NLPIR/FlashRAG/pull/238
- docs: fix documentation links in README_zh.md by @yumxiong in https://github.com/RUC-NLPIR/FlashRAG/pull/237
- fix: update star history chart in README by @FaintFlower in https://github.com/RUC-NLPIR/FlashRAG/pull/239
- Fix NameError in VLLMGenerator.generate(return_scores=True) (breaks FLARE on vLLM) by @Anai-Guo in https://github.com/RUC-NLPIR/FlashRAG/pull/242
- Fix NameError: import SeismicIndex where it is used (breaks all SPLADE/Seismic index builds) by @Anai-Guo in https://github.com/RUC-NLPIR/FlashRAG/pull/243
- Fix cached single-query retrieval result shape by @dingpuyu in https://github.com/RUC-NLPIR/FlashRAG/pull/245
- fix(refiner): stop dropping ordinary sentence boundaries in ExtractiveRefiner split by @AmirF194 in https://github.com/RUC-NLPIR/FlashRAG/pull/244
- fix: correct LLM judge score parsing by @fukalous in https://github.com/RUC-NLPIR/FlashRAG/pull/251
- feat: add document-level retrieval metrics by @fukalous in https://github.com/RUC-NLPIR/FlashRAG/pull/249
- Fix skipped samples in dataset filtering by @dingpuyu in https://github.com/RUC-NLPIR/FlashRAG/pull/248
- Fix invalid FAISS neighbors in dense retrieval by @dingpuyu in https://github.com/RUC-NLPIR/FlashRAG/pull/247
New Contributors
- @onestardao made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/224
- @wakaflocka17 made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/228
- @xianth123 made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/235
- @AmirF194 made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/238
- @yumxiong made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/237
- @FaintFlower made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/239
- @Anai-Guo made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/242
- @dingpuyu made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/245
- @fukalous made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/251
Full Changelog: https://github.com/RUC-NLPIR/FlashRAG/compare/v0.3.0...v0.4.0
- v0.3.0v0.3.0: Support Various Reasoning Methods2025-08-18 · 2025-08-18 09:22 UTC
查看更新说明
What's Changed
- 📖 Fix typos in
basic_usage.mdby @YeFD in https://github.com/RUC-NLPIR/FlashRAG/pull/156 - Minor changes to support Chonkie
v1.0.2by @chonknick in https://github.com/RUC-NLPIR/FlashRAG/pull/158 - Update base_prompt.py by @lihai-zhao in https://github.com/RUC-NLPIR/FlashRAG/pull/184
- Update run_exp.py by @lihai-zhao in https://github.com/RUC-NLPIR/FlashRAG/pull/183
- Update base_prompt.py by @lihai-zhao in https://github.com/RUC-NLPIR/FlashRAG/pull/188
- Update base_prompt.py by @lihai-zhao in https://github.com/RUC-NLPIR/FlashRAG/pull/191
- Fix bm25s
Tokenizer.save_vocabissue by upgradingbm25sand importing correctly by @GR0ZA in https://github.com/RUC-NLPIR/FlashRAG/pull/195 - Added support for Neural Sparse retrieval (SPLADE) with SEISMIC index by @DiVitoTommaso in https://github.com/RUC-NLPIR/FlashRAG/pull/201
- Support cpu environment for personal learning by @throne-developer in https://github.com/RUC-NLPIR/FlashRAG/pull/203
- reasoning method update by @lihai-zhao in https://github.com/RUC-NLPIR/FlashRAG/pull/205
- Update utils.py by @lihai-zhao in https://github.com/RUC-NLPIR/FlashRAG/pull/207
New Contributors
- @YeFD made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/156
- @chonknick made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/158
- @GR0ZA made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/195
- @DiVitoTommaso made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/201
- @throne-developer made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/203
Full Changelog: https://github.com/RUC-NLPIR/FlashRAG/compare/v0.2.0...v0.3.0
- 📖 Fix typos in
- v0.2.0v0.2.0 Support multimodal RAG2025-03-10 · 2025-03-10 02:14 UTC
查看更新说明
What's Changed
- chore: fix run exp by @DingYuanhao in https://github.com/RUC-NLPIR/FlashRAG/pull/130
- chore(deps): bump gradio from 5.9.1 to 5.11.0 by @dependabot in https://github.com/RUC-NLPIR/FlashRAG/pull/131
- Update README_zh.md by @Decem-Y in https://github.com/RUC-NLPIR/FlashRAG/pull/136
- commit mm_exp by @lihai-zhao in https://github.com/RUC-NLPIR/FlashRAG/pull/143
- add mathvista_prompt by @lihai-zhao in https://github.com/RUC-NLPIR/FlashRAG/pull/144
New Contributors
- @DingYuanhao made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/130
- @dependabot made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/131
- @Decem-Y made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/136
Full Changelog: https://github.com/RUC-NLPIR/FlashRAG/compare/v0.1.4...v0.2.0
- v0.1.4v0.1.4 Introduce FlashRAG-UI2025-01-13 · 2025-01-13 02:25 UTC
查看更新说明
What's Changed
- rqrag support by @YuyaoZhangQAQ in https://github.com/RUC-NLPIR/FlashRAG/pull/108
- Update README.md by @dongguanting in https://github.com/RUC-NLPIR/FlashRAG/pull/110
- upadate evaluator/metrics.py by @Ariya12138 in https://github.com/RUC-NLPIR/FlashRAG/pull/111
- [DOCS] Fix README.md Navigation links by @bhavnicksm in https://github.com/RUC-NLPIR/FlashRAG/pull/117
- [FEAT] Add Chonkie Chunkers to
process_wiki.pyby @bhavnicksm in https://github.com/RUC-NLPIR/FlashRAG/pull/119 - [FEAT] Optimize overall code functionality and multimodal implementation by @ignorejjj in https://github.com/RUC-NLPIR/FlashRAG/pull/123
- readme update by @YuyaoZhangQAQ in https://github.com/RUC-NLPIR/FlashRAG/pull/125
- Introduce FlashRAG-UI by @YuyaoZhangQAQ in https://github.com/RUC-NLPIR/FlashRAG/pull/127
New Contributors
- @YuyaoZhangQAQ made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/108
- @dongguanting made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/110
- @Ariya12138 made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/111
- @bhavnicksm made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/117
- @ignorejjj made their first contribution in https://github.com/RUC-NLPIR/FlashRAG/pull/123
Full Changelog: https://github.com/RUC-NLPIR/FlashRAG/compare/v0.1.3...v0.1.4
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
⚡FlashRAG: A Python Toolkit for Efficient RAG Research
[ English | 中文 ]
FlashRAG is a Python toolkit for the reproduction and development of Retrieval Augmented Generation (RAG) research. Our toolkit includes 36 pre-processed benchmark RAG datasets and 23 state-of-the-art RAG algorithms, including 7 reasoning-based methods that combine reasoning ability with retrieval.
With FlashRAG and provided resources, you can effortlessly reproduce existing SOTA works in the RAG domain or implement your custom RAG processes and components. Besides, we provide an easy-to-use UI:
https://github.com/user-attachments/assets/8ca00873-5df2-48a7-b853-89e7b18bc6e9
:link: Navigation
- Features
- Roadmap
- Changelog
- Installation
- Quick Start
- Components
- FlashRAG-UI
- Supporting Methods
- Supporting Datasets & Document Corpus
- Additional FAQs
- License
- Citation
:sparkles: Features
-
Extensive and Customizable Framework: Includes essential components for RAG scenarios such as retrievers, rerankers, generators, and compressors, allowing for flexible assembly of complex pipelines.
-
Comprehensive Benchmark Datasets: A collection of 36 pre-processed RAG benchmark datasets to test and validate RAG models' performances.
-
Pre-implemented Advanced RAG Algorithms: Features 23 advancing RAG algorithms with reported results, based on our framework. Easily reproducing results under different settings.
-
🚀 Reasoning-based Methods: NEW! We now support 7 reasoning-based methods that combine reasoning ability with retrieval, achieving superior performance on complex multi-hop tasks.
-
Efficient Preprocessing Stage: Simplifies the RAG workflow preparation by providing various scripts like corpus processing for retrieval, retrieval index building, and pre-retrieval of documents.
-
Optimized Execution: The library's efficiency is enhanced with tools like vLLM, FastChat for LLM inference acceleration, and Faiss for vector index management.
-
Easy to Use UI : We have developed a very easy to use UI to easily and quickly configure and experience the RAG baselines we have implemented, as well as run evaluation scripts on a visual interface.
:mag_right: Roadmap
FlashRAG is still under development and there are many issues and room for improvement. We will continue to update. And we also sincerely welcome contributions on this open-source toolkit.
- Support OpenAI models
- Provdide instructions for each component
- Integrate sentence Transformers
- Support multimodal RAG
- Support reasoning-based methods
- Inlcude more RAG approaches
- Enhance code adaptability and readability
- Add support for api-based retriever (vllm server)
:page_with_curl: Changelog
[25/11/06] 🎯 NEW Retriever! We have integrated a Web Search Engine-based Retriever, which seamlessly integrates with existing methods and can be enabled quickly with just a Serper API key! This enhancement significantly expands retrieval coverage and real-time capability, supporting dynamic information access and external knowledge augmentation. Experience a more flexible and powerful retrieval workflow now!
[25/08/06] 🎯 NEW! We have added support for Reasoning Pipeline, which is a new paradigm that combines reasoning ability and retrieval, representing work that includes R1-Searcher, Search-R1,.... We evaluate the performance of the pipeline on various RAG benchmarks, it can achieve F1 scores close to 60 on multi hop inference datasets such as HotpotQA. See it in result table.
[25/03/21] 🚀 Major Update! We have expanded our toolkit to support 23 state-of-the-art RAG algorithms, including 7 reasoning-based methods that significantly improve performance on complex reasoning tasks. This represents a major milestone in our toolkit's evolution!
[25/02/24] 🔥🔥🔥 We have added support for multimodal RAG, including MLLMs like Llava, Qwen, InternVL, and various multimodal retrievers with Clip architecture. More information can be found in our new version of arxiv article and our documentation. Try it!
[25/01/21] Our technical paper FlashRAG: A Python Toolkit for Efficient RAG Research is honored to have been accepted to the Resource Track of the 2025 ACM Web Conference (WWW 2025). Please Check it out!
[25/01/12] Introduce FlashRAG-UI, an easy to use interface. You can easily and quickly configure and experience the supported RAG methods and evaluate them on the benchmarks.
[25/01/11] We have added support for a new method RQRAG method, see it in reproduce_experiment.
[25/01/07] We have currently support the aggregation of multiple retrievers, see it in multi retriever usage.
[25/01/07] We have integrated a very flexible and lightweight corpus chunking library Chunkie, which supports various custom chunking methods (tokens, sentences, semantic, etc.). Use it in chunking doc corpus.
[24/10/21] We have released a version based on the Paddle framework that supports Chinese hardware platforms. Please refer to FlashRAG Paddle for details.
[24/10/13] A new in-domain dataset and corpus - DomainRAG have been added to the dataset. The dataset is based on the internal enrollment data of Renmin University of China, covering seven types of tasks, which can be used for conducting domain-specific RAG testing.
[24/09/24] We have released a version based on the MindSpore framework that supports Chinese hardware platforms. Please refer to FlashRAG MindSpore for details.
[24/09/18] Due to the complexity and limitations of installing Pyserini in certain environments, we have introduced a lightweight BM25s package as an alternative (faster and easier to use). The retriever based on Pyserini will be deprecated in future versions. To use retriever with bm25s, just set bm25_backend to bm25s in config.
[24/09/09] We add support for a new method Adaptive-RAG, which can automatically select the RAG process to execute based on the type of query. See it result in result table.
[24/08/02] We add support for a new method Spring, significantly improve the performance of LLM by adding only a few token embeddings. See it result in result table.
[24/07/17] Due to some unknown issues with HuggingFace, our original dataset link has been invalid. We have updated it. Please check the new link if you encounter any problems.
[24/07/06] We add support for a new method: Trace, which refine text by constructing a knowledge graph. See it results and details.
[24/06/19] We add support for a new method: IRCoT, and update the result table.
[24/06/15] We provide a demo to perform the RAG process using our toolkit.
[24/06/11] We have integrated sentence transformers in the retriever module. Now it's easier to use the retriever without setting pooling methods.
[24/06/05] We have provided detailed document for reproducing existing methods (see how to reproduce, baseline details), and configurations settings.
[24/06/02] We have provided an introduction of FlashRAG for beginners, see an introduction to flashrag (中文版 한국어).
[24/05/31] We supported Openai-series models as generator.
:wrench: Installation
To get started with FlashRAG, you can simply install it with pip:
pip install flashrag-dev --pre
Or you can clone it from Github and install (requires Python 3.10+):
git clone https://github.com/RUC-NLPIR/FlashRAG.git
cd FlashRAG
pip install -e .
If you want to use vllm, sentence-transformers or pyserini, you can install the optional dependencies:
# Install all extra dependencies
pip install flashrag-dev[full]
# Install vllm for faster speed
pip install vllm>=0.4.1
# Install sentence-transformers
pip install sentence-transformers
# Install pyserini for bm25
pip install pyserini
Due to the incompatibility when installing faiss using pip, it is necessary to use the following conda command for installation.
# CPU-only version
conda install -c pytorch faiss-cpu=1.8.0
# GPU(+CPU) version
conda install -c pytorch -c nvidia faiss-gpu=1.8.0
Note: It is impossible to install the latest version of faiss on certain systems.
From the official Faiss repository (source):
- The CPU-only faiss-cpu conda package is currently available on Linux (x86_64 and arm64), OSX (arm64 only), and Windows (x86_64)
- faiss-gpu, containing both CPU and GPU indices, is available on Linux (x86_64 only) for CUDA 11.4 and 12.1
:rocket: Quick Start
Corpus Construction
To build an index, you first need to save your corpus as a jsonl file with each line representing a document.
{"id": "0", "contents": "..."}
{"id": "1", "contents": "..."}
If you want to use Wikipedia as your corpus, you can refer to our documentation Processing Wikipedia to convert it into an indexable format.
Index Construction
You can use the following code to build your own index.
-
For dense retrieval methods, especially popular embedding models, we use
faissto build the index. -
For sparse retrieval methods (BM25), we use
Pyseriniorbm25sto build the corpus into a Lucene inverted index. The built index contains the original documents.
For Dense Retrieval Methods
Modify the parameters in the following code to your own.
python -m flashrag.retriever.index_builder \
--retrieval_method e5 \
--model_path /model/e5-base-v2/ \
--corpus_path indexes/sample_corpus.jsonl \
--save_dir indexes/ \
--use_fp16 \
--max_length 512 \
--batch_size 256 \
--pooling_method mean \
--faiss_type Flat
-
--pooling_method: If this parameter is not specified, we will automatically select it based on the model name and model file. However, since different embedding models use different pooling methods, we may not have fully implemented them. To ensure accuracy, you can specify the pooling method corresponding to the retrieval model you are using (mean,pooler, orcls). -
---instruction: Some embedding models require additional instructions to be concatenated to the query before encoding, which can be specified here. Currently, we will automatically fill in the instructions for E5 and BGE models, while other models need to be supplemented manually.
If the retrieval model supports the sentence transformers library, you can use the following code to build the index (without considering the pooling method).
python -m flashrag.retriever.index_builder \
--retrieval_method e5 \
--model_path /model/e5-base-v2/ \
--corpus_path indexes/sample_corpus.jsonl \
--save_dir indexes/ \
--use_fp16 \
--max_length 512 \
--batch_size 256 \
--pooling_method mean \
--sentence_transformer \
--faiss_type Flat
For Sparse Retrieval Methods (BM25)
If building a bm25 index, there is no need to specify model_path.
Building Index with BM25s
python -m flashrag.retriever.index_builder \
--retrieval_method bm25 \
--corpus_path indexes/sample_corpus.jsonl \
--bm25_backend bm25s \
--save_dir indexes/
Building Index with Pyserini
python -m flashrag.retriever.index_builder \
--retrieval_method bm25 \
--corpus_path indexes/sample_corpus.jsonl \
--bm25_backend pyserini \
--save_dir indexes/
For Sparse Neural Retrieval Methods (SPLADE)
Install Seismic Index:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Install Rust for compiling
pip install pyseismic-lsr # Install Seismic
Then build the index with Seismic:
python -m flashrag.retriever.index_builder \ # builder
--retrieval_method splade \ # Model name to trigger seismic index (splade only available)
--model_path retriever/splade-v3 \ # Local path or repository path are both supported.
--corpus_embedded_path data/ms_marco/ms_marco_embedded_corpus.jsonl \ # Use cached embedded corpus if corpus is already available in seismic expected format
--corpus_path data/ms_marco/ms_marco_corpus.jsonl \ # Corpus path in format {id, contents} jsonl file to be embedded if not already built
--save_dir indexes/ \ # save index directory
--use_fp16 \ # tell to use fp16 for splade model
--max_length 512 \ # max tokens for each document
--batch_size 4 \ # batch size for splade model (4-5 seems the best size for Tesla T4 16GB)
--n_postings 1000 \ # seismic number of posting lists
--centroid_fraction 0.2 \ # seismic centroids
--min_cluster_size 2 \ # seismic min cluster
--summary_energy 0.4 \ # seismic energy
--batched_indexing 10000000 # seismic batch
--nknn 32 # Optional parameter. Tell to seismic to use also knn graph. if not present seismic will work without knn graph
Using the ready-made pipeline
You can use the pipeline class we have already built (as shown in pipelines) to implement the RAG process inside. In this case, you just need to configure the config and load the corresponding pipeline.
Firstly, load the entire process's config, which records various hyperparameters required in the RAG process. You can input yaml files as parameters or directly as variables.
Please note that variables as input take precedence over files.
from flashrag.config import Config
# hybrid load configs
config_dict = {'data_dir': 'dataset/'}
my_config = Config(
config_file_path = 'my_config.yaml',
config_dict = config_dict
We provide comprehensive guidance on how to set configurations, you can see our configuration guidance. You can also refer to the basic yaml file we provide to set your own parameters.
Next, load the corresponding dataset and initialize the pipeline. The components in the pipeline will be automatically loaded.
from flashrag.utils import get_dataset
from flashrag.pipeline import SequentialPipeline
from flashrag.prompt import PromptTemplate
from flashrag.config import Config
config_dict = {'data_dir': 'dataset/'}
my_config = Config(
config_file_path = 'my_config.yaml',
config_dict = config_dict
)
all_split = get_dataset(my_config)
test_data = all_split['test']
pipeline = SequentialPipeline(my_config)
You can specify your own input prompt using PromptTemplete:
prompt_templete = PromptTemplate(
config,
system_prompt = "Answer the question based on the given document. Only give me the answer and do not output any other words.\nThe following are given documents.\n\n{reference}",
user_prompt = "Question: {question}\nAnswer:"
)
pipeline = SequentialPipeline(
my_config,
prompt_template = prompt_templete
)
Finally, execute pipeline.run to obtain the final result.
output_dataset = pipeline.run(test_data, do_eval=True)
The output_dataset contains the intermediate results and metric scores for each item in the input dataset.
Meanwhile, the dataset with intermediate results and the overall evaluation score will also be saved as a file (if save_intermediate_data and save_metric_score are specified).
Build your own pipeline!
Sometimes you may need to implement more complex RAG process, and you can build your own pipeline to implement it.
You just need to inherit BasicPipeline, initialize the components you need, and complete the run function.
from flashrag.pipeline import BasicPipeline
from flashrag.utils import get_retriever, get_generator
class ToyPipeline(BasicPipeline):
def __init__(self, config, prompt_templete=None):
# Load your own components
pass
def run(self, dataset, do_eval=True):
# Complete your own process logic
# get attribute in dataset using `.`
input_query = dataset.question
...
# use `update_output` to save intermeidate data
dataset.update_output("pred",pred_answer_list)
dataset = self.evaluate(dataset, do_eval=do_eval)
return dataset
Please first understand the input and output forms of the components you need to use from our documentation.
Just use components
If you already have your own code and only want to use our components to embed the original code, you can refer to the basic introduction of the components to obtain the input and output formats of each component.
:gear: Components
In FlashRAG, we have built a series of common RAG components, including retrievers, generators, refiners, and more. Based on these components, we have assembled several pipelines to implement the RAG workflow, while also providing the flexibility to combine these components in custom arrangements to create your own pipeline.
RAG-Components
Pipelines
Referring to a survey on retrieval-augmented generation, we categorized RAG methods into four types based on their inference paths.
- Sequential: Sequential execuation of RAG process, like Query-(pre-retrieval)-retriever-(post-retrieval)-generator
- Conditional: Implements different paths for different types of input queries
- Branching : Executes multiple paths in parallel, merging the responses from each path
- Loop: Iteratively performs retrieval and generation
In each category, we have implemented corresponding common pipelines. Some pipelines have corresponding work papers.
:art: FlashRAG-UI
:star2: Features
- One-Click Configuration Loading
- You can load parameters and configuration files for various RAG methods through simple clicks, selections, and inputs.
- Supports preview interface for intuitive parameter settings.
- Provides save functionality to easily store configurations for future use.
- Quick Method Experience
- Quickly load corpora and index files to explore the characteristics and application scenarios of various RAG methods.
- Supports loading and switching different components and hyperparameters, seamlessly connecting different RAG Pipelines to quickly experience their performance and differences!
- Efficient Benchmark Reproduction
- Easily reproduce the built-in baseline methods and carefully collected benchmarks on FlashRAG-UI.
- Use cutting-edge research tools directly without complex settings, providing a smooth experience for your research work!
Experience our meticulously designed FlashRAG-UI—both user-friendly and visually appealing:
cd webui
python interface.py
:robot: Supporting Methods
We have implemented 23 works with a consistent setting of:
- Generator: LLAMA3-8B-instruct with input length of 2048
- Retriever: e5-base-v2 as embedding model, retrieve 5 docs per query
- Prompt: A consistent default prompt, template can be found in the method details.
For open-source methods, we implemented their processes using our framework. For methods where the author did not provide source code, we will try our best to follow the methods in the original paper for implementation.
For necessary settings and hyperparameters specific to some methods, we have documented them in the specific settings column. For more details, please consult our reproduce guidance and method details.
It's important to note that, to ensure consistency, we have utilized a uniform setting. However, this setting may differ from the original setting of the method, leading to variations in results compared to the original outcomes.
| 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 |
| Trace | Sequential | 30.7 | 50.2 | 34.0 | 15.5 | 37.4 | 19.9 | |
| Spring | Sequential | 37.9 | 64.6 | 42.6 | 37.3 | 54.8 | 27.7 | Use Llama2-7B-chat with trained embedding table |
| 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 | 33.2 | 56.0 | 32.4 | 23.4 | 31.7 | 17.0 | Use infernece-time training data |
| Adaptive-RAG | Conditional | 35.1 | 56.6 | 39.1 | 28.4 | 40.4 | 16.0 | |
| Ret-Robust | Loop | 42.9 | 68.2 | 35.8 | 43.4 | 57.2 | 33.7 | Use LLAMA2-13B with trained lora |
| 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 | |
| IRCoT | Loop | 33.3 | 56.9 | 41.5 | 32.4 | 45.6 | 20.7 | |
| RQRAG | Loop | 32.6 | 52.5 | 33.5 | 35.8 | 46.4 | 26.2 | Use trained rqrag-llama2-7B |
🚀 Reasoning-based Methods (NEW!)
We now support 7 reasoning-based methods that combine reasoning ability with retrieval, achieving superior performance on complex multi-hop tasks:
| Method | Type | NQ (EM) | TriviaQA (EM) | PopQA (EM) | Hotpotqa (F1) | 2Wiki (F1) | Musique (F1) | Bamboogle (F1) | Specific setting |
|---|---|---|---|---|---|---|---|---|---|
| Search-R1 | Reasoning | 45.2 | 62.2 | 49.2 | 54.5 | 42.6 | 29.2 | 59.9 | SearchR1-nq_hotpotqa_train-qwen2.5-7b-em-ppo |
| R1-Searcher | Reasoning | 36.9 | 61.6 | 42.0 | 49.0 | 49.1 | 24.7 | 57.7 | Qwen-2.5-7B-base-RAG-RL |
| O2-Searcher | Reasoning | 41.4 | 51.4 | 46.8 | 43.4 | 48.6 | 19.0 | 47.6 | O2-Searcher-Qwen2.5-3B-GRPO |
| AutoRefine | Reasoning | 43.8 | 59.8 | 32.4 | 54.0 | 50.3 | 23.6 | 46.6 | AutoRefine-Qwen2.5-3B-Base |
| ReaRAG | Reasoning | 26.3 | 51.8 | 24.6 | 42.9 | 41.6 | 21.2 | 41.9 | ReaRAG-9B |
| CoRAG | Reasoning | 40.9 | 63.1 | 36.0 | 56.6 | 60.7 | 31.9 | 54.1 | CoRAG-Llama3.1-8B-MultihopQA |
| SimpleDeepSearcher | Reasoning | 36.1 | 61.6 | 42.0 | 49.0 | 49.1 | 24.7 | 57.7 | Qwen-7B-SimpleDeepSearcher |
:notebook: Supporting Datasets & Document Corpus
Datasets
We have collected and processed 36 datasets widely used in RAG research, pre-processing them to ensure a consistent format for ease of use. For certain datasets (such as Wiki-asp), we have adapted them to fit the requirements of RAG tasks according to the methods commonly used within the community. All datasets are available at Huggingface datasets.
For each dataset, we save each split as a jsonl file, and each line is a dict as follows:
{
'id': str,
'question': str,
'golden_answers': List[str],
'golden_doc_ids': List[str], # optional, for document-level retrieval metrics
'metadata': dict
}
When golden_doc_ids is available, FlashRAG can evaluate retrieved source documents with retrieval_doc_recall, retrieval_doc_precision, retrieval_doc_f1, and retrieval_doc_map.
Below is the list of datasets along with the corresponding sample sizes:
| Task | Dataset Name | Knowledge Source | # Train | # Dev | # Test |
|---|---|---|---|---|---|
| QA | NQ | wiki | 79,168 | 8,757 | 3,610 |
| QA | TriviaQA | wiki & web | 78,785 | 8,837 | 11,313 |
| QA | PopQA | wiki | / | / | 14,267 |
| QA | SQuAD | wiki | 87,599 | 10,570 | / |
| QA | MSMARCO-QA | web | 808,731 | 101,093 | / |
| QA | NarrativeQA | books and story | 32,747 | 3,461 | 10,557 |
| QA | WikiQA | wiki | 20,360 | 2,733 | 6,165 |
| QA | WebQuestions | Google Freebase | 3,778 | / | 2,032 |
| QA | AmbigQA | wiki | 10,036 | 2,002 | / |
| QA | SIQA | - | 33,410 | 1,954 | / |
| QA | CommonSenseQA | - | 9,741 | 1,221 | / |
| QA | BoolQ | wiki | 9,427 | 3,270 | / |
| QA | PIQA | - | 16,113 | 1,838 | / |
| QA | Fermi | wiki | 8,000 | 1,000 | 1,000 |
| multi-hop QA | HotpotQA | wiki | 90,447 | 7,405 | / |
| multi-hop QA | 2WikiMultiHopQA | wiki | 15,000 | 12,576 | / |
| multi-hop QA | Musique | wiki | 19,938 | 2,417 | / |
| multi-hop QA | Bamboogle | wiki | / | / | 125 |
| multi-hop QA | StrategyQA | wiki | 2290 | / | / |
| Long-form QA | ASQA | wiki | 4,353 | 948 | / |
| Long-form QA | ELI5 | 272,634 | 1,507 | / | |
| Long-form QA | WikiPassageQA | wiki | 3,332 | 417 | 416 |
| Open-Domain Summarization | WikiASP | wiki | 300,636 | 37,046 | 37,368 |
| multiple-choice | MMLU | - | 99,842 | 1,531 | 14,042 |
| multiple-choice | TruthfulQA | wiki | / | 817 | / |
| multiple-choice | HellaSWAG | ActivityNet | 39,905 | 10,042 | / |
| multiple-choice | ARC | - | 3,370 | 869 | 3,548 |
| multiple-choice | OpenBookQA | - | 4,957 | 500 | 500 |
| multiple-choice | QuaRTz | - | 2696 | 384 | 784 |
| Fact Verification | FEVER | wiki | 104,966 | 10,444 | / |
| Dialog Generation | WOW | wiki | 63,734 | 3,054 | / |
| Entity Linking | AIDA CoNll-yago | Freebase & wiki | 18,395 | 4,784 | / |
| Entity Linking | WNED | Wiki | / | 8,995 | / |
| Slot Filling | T-REx | DBPedia | 2,284,168 | 5,000 | / |
| Slot Filling | Zero-shot RE | wiki | 147,909 | 3,724 | / |
| In-domain QA | DomainRAG | Web pages of RUC | / | / | 485 |
Document Corpus
Our toolkit supports jsonl format for retrieval document collections, with the following structure:
{"id":"0", "contents": "..."}
{"id":"1", "contents": "..."}
The contents key is essential for building the index. For documents that include both text and title, we recommend setting the value of contents to {title}\n{text}. The corpus file can also contain other keys to record additional characteristics of the documents.
In the academic research, Wikipedia and MS MARCO are the most commonly used retrieval document collections. For Wikipedia, we provide a comprehensive script to process any Wikipedia dump into a clean corpus. Additionally, various processed versions of the Wikipedia corpus are available in many works, and we have listed some reference links.
For MS MARCO, it is already processed upon release and can be directly downloaded from its hosting link on Hugging Face.
Index
To facilitate easier replication of the experiments, we now provide a preprocessed index available in the ModelScope dataset page: FlashRAG_Dataset/retrieval_corpus/wiki18_100w_e5_index.zip.
The index was created using the e5-base-v2 retriever on our uploaded wiki18_100w dataset, which is consistent with the index used in our experiments.
:lollipop: Awesome Work using FlashRAG
- R1-Searcher, a method that incentivizes the search capability in LLMs via reinforcement learning
- ReSearch, a method that learns to reason with search for LLMs via reinforcement learning
- AutoCoA, a method that internalizes chain-of-action generation into reasoning models
:raised_hands: Additional FAQs
- How should I set different experimental parameters?
- How to build my own corpus, such as a specific segmented Wikipedia?
- How to index my own corpus?
- How to reproduce supporting methods?
- How can I debug common RAG failure modes when using FlashRAG?
:bookmark: License
FlashRAG is licensed under the MIT License.
:star2: Citation
Please kindly cite our paper if helps your research:
@inproceedings{FlashRAG,
author = {Jiajie Jin and
Yutao Zhu and
Zhicheng Dou and
Guanting Dong and
Xinyu Yang and
Chenghao Zhang and
Tong Zhao and
Zhao Yang and
Ji{-}Rong Wen},
editor = {Guodong Long and
Michale Blumestein and
Yi Chang and
Liane Lewin{-}Eytan and
Zi Helen Huang and
Elad Yom{-}Tov},
title = {FlashRAG: {A} Modular Toolkit for Efficient Retrieval-Augmented Generation
Research},
booktitle = {Companion Proceedings of the {ACM} on Web Conference 2025, {WWW} 2025,
Sydney, NSW, Australia, 28 April 2025 - 2 May 2025},
pages = {737--740},
publisher = {{ACM}},
year = {2025},
url = {https://doi.org/10.1145/3701716.3715313},
doi = {10.1145/3701716.3715313}
}