检索增强生成(RAG)是一种结合了检索器和生成器的框架,广泛应用于开放域问答、基于知识的聊天机器人和专业信息检索任务。RAG通过将检索到的相关文档与生成器结合,提高了模型的准确性和相关性。然而,选择和优化适合特定数据和用例的RAG管道是一项复杂且耗时的任务。为了解决这一问题,AutoRAG(RAG AutoML工具)应运而生,旨在自动化这一过程,帮助用户找到最佳的RAG管道。
AutoRAG的主要功能
- 数据创建:
- 解析:设置YAML文件并解析原始文档,准备数据。
- 分块:使用单个语料库创建初始QA对,然后将剩余的语料库映射到QA数据。
- QA创建:生成多个语料库时,为每个语料库创建相应的QA数据集。
- QA-语料库映射:将剩余的语料库数据映射到QA数据集,优化分块并评估RAG性能。
- 优化:
- 节点结构:RAG管道的核心节点包括检索、提示生成器和生成器,其他节点用于增强性能。
- 模块组合:创建每个节点内模块和参数的所有可能组合,执行每个配置的管道,并根据预定义策略选择最佳结果。
- 马尔可夫链:每个节点基于其前驱节点的最佳结果进行操作,类似于马尔可夫链,只需要前一个状态来生成下一个状态。
- 部署:
- YAML文件:使用单个YAML文件部署最佳RAG管道。
- Flask服务器:支持通过Flask服务器部署模型,方便集成到现有系统中。
创建与AutoRAG兼容的数据格式
- 解析:
- 设置YAML文件并开始解析。
- 使用几行代码解析原始文档,准备数据。
- 分块:
- 使用单个语料库创建初始QA对。
- 将剩余的语料库映射到QA数据。
- QA创建:
- 如果通过不同的分块方法生成了多个语料库,为每个语料库创建相应的QA数据集。
- QA-语料库映射:
- 对于多个语料库,将剩余的语料库数据映射到QA数据集。
- 优化分块,评估RAG性能。
评估不可直接评估的节点
某些节点,如query_expansion或prompt_maker,无法直接评估。为此,需要建立基本真值,如“扩展查询的基本真值”或“提示的基本真值”。
- query_expansion:
- 在评估过程中使用指定模块检索文档。
- 根据这些检索到的文档评估query_expansion节点。
- prompt_maker:
- 使用生成节点的结果评估prompt_maker节点。
- 类似的方法适用于生成节点,确保每个节点的评估基于其前驱节点的最佳结果。
AutoRAG的优势
- 自动化评估:
- 自动使用自评估数据评估各种RAG模块,减少手动评估的时间和精力。
- 数据创建支持:
- 提供从原始文档创建RAG评估数据的工具,确保数据质量和多样性。
- 优化和部署:
- 通过自动运行实验找到数据的最佳RAG管道。
- 使用单个YAML文件轻松部署最佳RAG管道,支持Flask服务器。
当前状态和未来发展
AutoRAG目前处于alpha阶段,未来有许多优化可能性。随着更多用户反馈和实验数据的积累,AutoRAG将继续改进,提供更多功能和更高的性能。
总结
AutoRAG是一个自动化工具,旨在为特定数据集和用例识别最佳RAG管道。它通过自评估数据自动评估各种RAG模块,提供数据创建、优化和部署的支持。AutoRAG将管道结构化为相互连接的节点,并评估模块和参数的组合以找到最佳配置。来自大型语言模型(LLMs)的合成数据增强了评估过程。尽管目前处于alpha阶段,AutoRAG在RAG管道选择和部署方面提供了显著的进一步优化和发展潜力。