一个朴素的 RAG 系统的工作流程可概括如下:RAG 系统使用用户查询从指定数据源检索,对检索结果进行重排,附加提示,然后将其发送给 LLM 生成最终答案。
在用户意图明确的场景下,朴素的 RAG 已足够,因为答案包含在检索结果中,可以直接发送给 LLM。然而,在大多数情况下,模糊的用户意图是常态,需要迭代查询才能生成最终答案。例如,涉及总结多个文档的问题需要多步推理。这些场景需要 Agentic RAG,它在问答过程中涉及任务编排机制。
Agent 和 RAG 相辅相成。Agentic RAG,顾名思义,是一种基于 Agent 的 RAG。Agentic RAG 与朴素 RAG 的主要区别在于,Agentic RAG 引入了动态 Agent 编排机制,该机制能够评估检索结果,根据每个用户查询的意图重写查询,并采用“多跳”推理来处理复杂的问答任务。
接下来,我们通过两个先进的 RAG 示例来探讨 Agentic RAG 的工作原理。第一个是 Self-RAG(参考文献 [1]),其工作流程如下图所示
Self-RAG 是一种反思型 RAG。从知识库检索结果后,它会评估检索结果是否与用户查询相关。如果判定不相关,则重写查询,并重复 RAG 循环,直到相关性得分达到设定的阈值。一个完整的 Self-RAG 需要实现以下两个主要组件
- 基于图的任务编排系统。
- 必要的操作符:评分操作符对 Self-RAG 至关重要。虽然理论上期望训练一个评分模型来评估检索结果,但在实践中,使用 LLM 进行评分可以减少对其他系统组件的依赖并简化系统设计。
Self-RAG 是 Agentic RAG 的一种相对初级的形式,RAGFlow 已在其系统设计中整合了 Self-RAG 的实现。实践表明,实现 Self-RAG 能够显著提高复杂多跳问答和多步推理的性能。
现在,让我们探讨另一种形式的 Agentic RAG — 自适应 RAG(Adaptive RAG)(参考文献 [2])。它可以根据各种用户查询意图调整其策略
- 开放领域问答:直接通过 LLM 生成答案,不依赖 RAG 的检索。
- 多跳问答:将多跳查询分解为多个单跳查询,迭代使用这些更基础的查询访问 LLM 和 RAG 检索器,并结合检索结果生成最终答案。
- 自适应检索:适用于需要多步推理的复杂查询。复杂的问答通常涉及综合来自多个数据源的信息并执行多步推理。自适应检索迭代访问 LLM 和 RAG 检索器,逐步构建回答复杂问题所需的信息链。
如下图所示,自适应 RAG 遵循与 Self-RAG 相似的工作流程。通过在其工作流程开始时实现额外的查询分析,自适应 RAG 提供了更广泛的问答策略。
从以上两个 Agentic RAG 示例可以看出,这些高级 RAG 系统需要任务编排机制来提供以下功能
- 复用现有管道或子图。
- 与第三方工具协作,包括网页搜索。
- 查询任务规划,例如查询意图分类和反馈。
用于开发 Agent 的框架包括 Databricks 最近推出的 Mosaic AI Agent Framework 和 AgentKit;任务编排框架包括 Langchain 中的 LangGraph 和 llamaIndex。任务编排系统必须使用图来实现,其节点和边定义了应用程序的工作流程和逻辑。图中的节点可以是任何可调用的操作符或可执行的“组件”(例如,链式操作符或 Agent),每个节点执行一个特定任务。边连接节点并建立它们之间的数据流。图必须维护节点状态管理以适应其节点流程。
值得注意的是,这种基于图的任务编排实现需要循环,并且不同于有向无环图(DAG)。循环是反思的基础,因此对于 Agentic RAG 中的任务编排至关重要。缺乏反思的 Agentic RAG 将无法像人类一样思考或解决问题。它只能提供类似于工作流的任务编排,而无法实现多跳和多步推理等更高级的任务。吴恩达(Andrew Ng)对四种 Agent 设计模式(参考文献 [3])的定义将反思与其他三种与工作流程相关的模式——工具使用、规划和多 Agent——区分开来。这种区分强调了反思作为思考和推理基础的关键作用。Agentic RAG 体现了这种设计模式。
Agentic RAG 代表着信息处理的转型,为 Agent 本身带来了更多智能。当与工作流程结合时,Agentic RAG 将具有更广泛的应用范围。例如,在文档摘要场景中,Agentic RAG 会首先判断用户的意图是请求摘要还是比较细节。如果是前者,它将使用 Agent 检索每个文档块的摘要,然后将它们组合起来生成整体摘要;如果是后者,则需要通过进一步路由检索更相关的数据,然后发送给 LLM。在客户支持场景中,Agentic RAG 可以理解更复杂的客户查询并提供个性化且准确的回复。在文学聊天机器人场景中,Agentic RAG 可以综合更多文档、数据和研究结果,为用户提供更全面的理解。在法律和医疗聊天机器人场景中,Agentic RAG 可以帮助理解和解释复杂的领域知识,提供更精确的见解。在内容生成应用中,Agentic RAG 可以生成更高质量、与上下文相关的企业级长篇文档。
从 v0.8.0 版本开始,RAGFlow 将支持基于图的任务编排,并在此基础上实现无代码编辑。RAGFlow 也在不断改进各种检索特定的操作符,以简化 Agentic RAG 和基于 Agentic RAG 的 Agent 应用的开发,全面解决企业级 RAG 应用中的痛点。RAGFlow 正在快速迭代,欢迎关注、点赞和积极参与 RAGFlow。我们的 GitHub 仓库地址是 https://github.com/infiniflow/ragflow。
参考书目
- Self-RAG: 通过自我反思学习检索、生成和评估,arXiv 预印本 arXiv:2310.11511
- 自适应 RAG:通过问题复杂性学习适应检索增强大型语言模型,arXiv 预印本 arXiv:2403.14403
- https://www.deeplearning.ai/the-batch/issue-242/