FlashRAG简介
FlashRAG是一个为检索增强生成(RAG)研究而设计的Python工具包。随着大型语言模型(LLM)的发展,RAG技术引起了广泛关注,出现了许多新颖的算法和模型来增强RAG系统的各个方面。然而,由于缺乏标准化的实现框架,以及RAG过程本身的复杂性,研究人员很难在一个一致的环境中比较和评估这些方法。为了解决这一挑战,FlashRAG应运而生。
FlashRAG的主要目标是帮助研究人员在一个统一的框架内复现现有的RAG方法,并开发自己的RAG算法。该工具包具有以下特点:
-
可扩展和可定制的框架:包含RAG场景所需的基本组件,如检索器、重排器、生成器和压缩器,允许灵活组装复杂的管道。
-
全面的基准数据集:收集了32个预处理的RAG基准数据集,用于测试和验证RAG模型的性能。
-
预实现的先进RAG算法:基于该框架实现了14种先进的RAG算法,并报告了结果。可以轻松地在不同设置下复现结果。
-
高效的预处理阶段:通过提供各种脚本(如用于检索的语料库处理、检索索引构建和文档预检索)简化了RAG工作流程的准备工作。
-
优化的执行:使用vLLM和FastChat等工具加速LLM推理,使用Faiss进行向量索引管理,提高了库的效率。
FlashRAG的架构
FlashRAG的整体结构包括三个层次的模块:环境模块、组件模块和管道模块。
-
环境模块:是工具包的基础,建立实验所需的数据集、超参数和评估指标。
-
组件模块:包括五个主要子组件:判断器、检索器、重排器、精炼器和生成器。
- 判断器:使用SKR方法评估查询是否需要检索。
- 检索器:包括稀疏检索和密集检索实现。
- 重排器:对检索结果进行重新排序,提高相关性。
- 精炼器:减少检索文档的噪音和token使用,提高最终响应质量。
- 生成器:使用vLLM和FastChat等加速库实现LLM生成。
-
管道模块:处理用户提供的数据,实现并执行相应的RAG过程,提供最终评估输出和中间结果。
FlashRAG支持四类处理流程:
- 顺序型:RAG过程的线性执行
- 分支型:对单个查询并行执行多个流程,合并各流程的结果
- 条件型:使用判断器根据判断结果将查询引导到不同的执行流程
- 循环型:在检索和生成过程之间进行多次循环以改进结果
支持的RAG方法
FlashRAG实现了14种RAG方法,采用统一的设置:
- 生成器:LLAMA3-8B-instruct,输入长度2048
- 检索器:e5-base-v2作为嵌入模型,每个查询检索5个文档
- 提示:一致的默认提示模板
这些方法包括:
- 顺序型:标准RAG、LongLLMLingua、RECOMP等
- 分支型:SuRe、REPLUG等
- 条件型:SKR
- 循环型:Self-RAG、FLARE、IRCoT等
研究人员可以轻松复现这些方法,也可以基于FlashRAG的框架开发新的RAG算法。
基准数据集
FlashRAG收集并处理了35个广泛用于RAG研究的数据集,预处理它们以确保一致的格式,便于使用。这些数据集涵盖了各种任务类型,如问答、多跳问答、长形式问答、多项选择等。所有数据集都可在Hugging Face上获取。
使用FlashRAG
要开始使用FlashRAG,只需从GitHub克隆并安装(需要Python 3.9+):
git clone https://github.com/RUC-NLPIR/FlashRAG.git
cd FlashRAG
pip install -e .
FlashRAG提供了多种使用方式:
-
使用现成的管道:配置config并加载相应的管道即可实现RAG过程。
-
构建自定义管道:继承
BasicPipeline
,初始化所需组件,完成run
函数即可实现更复杂的RAG过程。 -
直接使用组件:如果只想使用某些组件嵌入到原有代码中,可以参考组件的基本介绍了解输入输出格式。
FlashRAG还提供了详细的文档,包括配置指南、复现指南、基线方法详情等,帮助用户更好地使用该工具包。
总之,FlashRAG为RAG研究提供了一个强大而灵活的工具包,可以帮助研究人员更高效地进行RAG相关实验和开发。无论是复现现有方法还是探索新的RAG算法,FlashRAG都能提供有力支持。