检索增强生成RAG系列9--RAG开源开发框架

avatar
作者
猴君
阅读量:0

在前面系列1-6中详细讲解了RAG各个部分的内容,其实我们能看到RAG已经成为一个比较标准化的AI落地应用的场景,针对这样的场景,其实有比较好的一些开源工具供大家快速搭建自己的RAG,下面就给大家介绍一些常见的开源开发框架。

目录

这里分为2类常见的开发框架来说明,一类是以Langchain为代表的开源开发库,一类是以dify为代表的开源开发框架。你可以这么理解 Langchain 这类的开发库是一种工具箱或者Library,使用开发库你可以搭建RAG。与之相比,Dify这类开发框架提供了RAG的完整方案,这要得力于RAG有很强的标准流程,使得几乎零代码的情况下可以搭建一个RAG应用,它们将慢慢成为生产级别的解决方案,其解决方案也是经过工程设计和软件测试的考验。

1 常见的RAG开发库

1.1 Langchain

其实关于大模型开发不得不提到Langchain,Langchain是一个全面的大模型开发框架,里面以模块化和可扩展性的方式继承了大模型开发架构,而其中就集成RAG流程所需的工具,并可以结合Langchain的Chain特点,很容易搭建一个RAG场景(比如本系列中的代码演示大都是基于Langchain的)。以下是Langchain的与RAG相关常用的库:

  • langchain_community.document_loaders:该库是文档加载的基础和实现,比如其中BaseLoader用作其他加载器的基础。它定义了一些方法和接口,也就是文档加载逻辑。然后有许多实现类实现不同文档加载。
  • langchain.text_splitter:提供了许多不同类型的文本拆分器。
  • langchain_community.embeddings:提供了一个标准化的接口,用于与不同的文本嵌入模型提供商(如 OpenAI 和 Cohere)进行交互。
  • langchain_community.vectorstores:支持多种向量存储后端,包括FAISS、Pinecone、Weaviate、Chroma等。
  • langchain_community.chat_models:大模型定义的标准,可以通过OpenAPI或者本地加载模式加载大模型。
  • langchain_community.retrievers:提供了几种高级检索类型。

项目地址https://github.com/langchain-ai

1.2 LlamaIndex

LlamaIndex是一个专为构建RAG系统而设计的,它通过构建索引和提供查询接口,使得大模型能够学习和利用私有或者特定领域的数据。这一工具的出现,极大地减少开发RAG的代码,可能使用十几行代码就能够构建一个简单的RAG应用。LlamaIndex封装了RAG管道,相对于Langchain来说,开发时更为简便。
项目地址https://github.com/run-llama/llama_index

1.3 Haystack

Haystack是一个端到端LLM框架,允许您构建由LLM、Transformer模型、矢量搜索等驱动的应用程序。无论您是想执行检索增强生成(RAG)、文档搜索、问题回答还是答案生成,Haystack都可以将最先进的嵌入模型和llm编排到管道中,以构建端到端NLP应用程序并解决您的用例。该项目更为强调其搜索系统,在此方面做了一些功夫。
项目地址https://github.com/deepset-ai/haystack

2 常见的RAG开发框架

与Langchain为代表的开源开发库相比,RAG开源的开发框架就显得更为产品化的解决方案。市面上的RAG框架很多,下面只是列举开源的几个框架,另外闭源的商业大家可以去国内外各个大厂(openai、coze、百度Agent-Builder等等)看看,当然闭源的功能会更为强大,毕竟是以构建Agent为主,不只是RAG。下面我们介绍几款开源的RAG框架,主要讲一下它们各自的亮点吧。

2.1 Dify

介绍:Dify是一款开源的大语言模型(LLM) 应用开发平台,支持本地部署。它是一个比较早开源的LLMOps平台,最早的时候,其实它更多是一个RAG可视化的搭建平台,你可以零代码实现你的RAG,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,能快速搭建 AI 应用。最近一年多的发展,它也逐渐发展成与闭源(比如coze等)一样的Agent,提供更为丰富的功能,比如工作流、工具等。
项目地址https://github.com/langgenius/dify
亮点:Dify提供了一个可视化RAG Pipeline的标准流程,虽然其它开源的RAG开发框架也有同样的功能,但是它算是比较先开源的一个RAG搭建框架,而且其功能更新也是经常领先于同行。因此它注重的是RAG搭建流程,对于文档解析、编码、向量数据库甚至re-rank方面都不会做特殊优化,因此可以作为一个企业开发的脚手架,节省了许多重复造轮子的时间。

2.2 RAGFlow

介绍:RAGFlow是一个基于深度文档理解的开源RAG框架。它为任何规模的企业提供了一个简化的RAG工作流,结合LLM(大型语言模型)来提供真实的问答功能,并以各种复杂格式数据的良好引用为基础。
项目地址https://github.com/infiniflow/ragflow
亮点:RAGFlow也是提供了一个可视化RAG Pipeline的标准流程,但是其亮点是深度文档理解,它提供了多种类型文档解析,并且结合OCR、TSR技术很好的识别文档的图片、表格等信息。它还能提供解析可视化结果,也就是你能看到每一个chunk在原文档是从哪里解析的(可溯源性强)。同时在检索和排序方面,采用了基于向量数据库+搜索引擎+结构化数据查询混合检索和排名(infinity数据库(AI原生数据库))。它的文档解析和检索方面值得参考,如果你的应用场景在于文档解析难度或者需要混合检索,那它最合适不过。

2.3 FastGPT

介绍:FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景。
项目地址https://github.com/labring/FastGPT
亮点:FastGPT 较为注重商业化,在整个RAG落地的解决方案中在商业化方面更为成熟。比如saas化、运营管理、OpenAPI 接口等方面都是比较成熟。但是同样的,它本身在RAG的优化方面(文档解析等方面)都是比较弱。因此如果你注重商业化落地,可以参考其模式,或者以它为基础做一些改动。

2.4 QAnything

介绍:QAnything(基于任何东西的问答)是一个本地知识库问答系统,旨在支持广泛的文件格式和数据库,允许离线安装和使用。使用QAnything,您可以简单地删除任何本地存储的任何格式的文件,并接收准确、快速和可靠的答案。
项目地址https://github.com/netease-youdao/QAnything
亮点:QAnything也是提供了一个可视化RAG Pipeline的标准流程,虽然流程和功能性相对来说比较简单,但是其注重文档解析和重排2个部分。其中文档解析可能不如RAGFlow,但领先于其它几种RAG框架。它实现粗排和精排的二阶段召回,使得文档检索后排序更为精准。如果你的应用场景在于文档解析难度或者排序精准度,它很适合。

2.5 Langchain-Chatchat

介绍:Langchain-Chatchat是一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。支持市面上主流的开源 LLM、 Embedding 模型与向量数据库,可实现全部使用开源模型离线私有部署。与此同时,本项目也支持 OpenAI GPT API 的调用,并将在后续持续扩充对各类模型及模型 API 的接入。
项目地址https://github.com/chatchat-space/Langchain-Chatchat
亮点:Langchain-Chatchat也是提供了一个可视化RAG Pipeline的标准流程。其项目亮点在于支持Xinference、LocalAI、Ollama、FastChat等部署框架,同时支持市面上主流的开源 LLM、 Embedding 模型与向量数据库。因此它本身不会对各个流程做出优化,但是将RAG各个流程模块化,让开发者可以任意组织搭建RAG使其本身的亮点。因此可以作为一个企业开发的脚手架,节省了许多重复造轮子的时间。

3 总结

当然还有许多优秀的框架没有介绍,有些可能也跟RAG相关比如open-webui等,这里就不一一列举。无论你使用较为底层Langchain或者LlamaIndex,还是使用dify较为低代码方式构建你的RAG,都是要根据你的业务场景来决定选择哪些开发框架。这里只是提供对于相关实践信息供大家参考,主要是要通过基本了解各个框架的优缺点,让你在项目架构时,能够有更好的参考。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!