跳转到主内容

Agentic RAG - 定义与低代码实现

阅读时间 6 分钟

一个朴素 RAG 系统的工作流程可以概括如下:RAG 系统使用用户查询从指定的数据源中进行检索,对检索结果进行重新排序,附加提示词,然后将它们发送给大语言模型(LLM)以生成最终答案。

在用户意图明确的场景下,一个简单的 RAG 就足够了,因为答案包含在检索结果中,可以直接发送给大语言模型(LLM)。然而,在大多数情况下,用户意图模糊是常态,需要通过迭代查询来生成最终答案。例如,涉及总结多份文档的问题就需要多步推理。这些场景需要 Agentic RAG,它在问答过程中引入了任务编排机制。

Agent 和 RAG 是互补的。顾名思义,Agentic RAG 是一种基于 Agent 的 RAG。Agentic RAG 与原生(Naive)RAG 的主要区别在于,Agentic RAG 引入了动态 Agent 编排机制,它会对检索结果进行批判,根据每个用户查询的意图重写查询,并采用“多跳”推理来处理复杂的问答任务。<!--truncate-->

接下来,让我们通过两个高级 RAG 示例来探讨 Agentic RAG 的工作原理。第一个是 Self-RAG(参考文献 [1]),其工作流程如下所示

Self-RAG 是一种反思型 RAG。在从知识库检索到结果后,它会评估检索结果是否与用户查询相关。如果被认为不相关,则重写查询,并重复 RAG 循环,直到相关性评分达到设定阈值。一个完整的 Self-RAG 需要实现以下两个主要组件

  1. 基于图的任务编排系统。
  2. 必要的算子:评分算子对 Self-RAG 至关重要。虽然从理论上讲,训练一个专门用于评估检索结果的评分模型是理想的,但在实践中,使用大语言模型(LLM)进行评分可以减少对其他系统组件的依赖,并简化系统设计。

Self-RAG 是 Agentic RAG 的一种相对初步的形式,RAGFlow 已在其系统设计中纳入了 Self-RAG 实现。实现 Self-RAG 已被证明能显著提升复杂多跳问答和多步推理的性能。

现在让我们探讨另一种形式的 Agentic RAG —— Adaptive RAG(参考文献 [2])。它可以针对不同的用户查询意图调整策略

  1. 开放域问答:直接通过 LLM 生成答案,不依赖 RAG 检索。
  2. 多跳问答:将多跳查询分解为多个单跳查询,迭代地使用这些更基础的查询访问 LLM 和 RAG 检索器,并结合检索结果生成最终答案。
  3. 自适应检索:适用于需要多步推理的复杂查询。复杂问答通常涉及综合来自多个数据源的信息并进行多步推理。自适应检索通过迭代访问 LLM 和 RAG 检索器,逐步构建回答复杂问题所需的信息链。

如下图所示,Adaptive-RAG 遵循与 Self-RAG 类似的工作流程。通过在其工作流开始时增加额外的查询分析,Adaptive-RAG 提供了更广泛的问答策略。

从上述两个 Agentic RAG 示例可以看出,这些高级 RAG 系统需要任务编排机制来提供以下功能

  1. 复用现有的流水线(Pipeline)或子图。
  2. 与第三方工具协作,包括网络搜索。
  3. 查询任务规划,例如查询意图分类和反馈。

开发 Agent 的框架包括 Databricks 最近推出的 Mosaic AI Agent Framework 和 AgentKit;任务编排框架包括 Langchain 中的 LangGraph 和 llamaIndex。任务编排系统必须使用图(Graph)来实现,其节点和边定义了应用的流程和逻辑。图中的节点可以是任何可调用的算子或可执行的“组件”(例如链式算子或 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 及其应用开发,全面解决企业级 RAG 应用中的痛点。RAGFlow 正在快速迭代,欢迎大家关注、收藏并积极参与 RAGFlow。我们的 GitHub 仓库地址是 https://github.com/infiniflow/ragflow

参考文献

  1. Self-RAG: 通过自我反思学习检索、生成和批判,arXiv 预印本 arXiv:2310.11511
  2. Adaptive-RAG: 通过问题复杂度学习适应检索增强的大语言模型,arXiv 预印本 arXiv:2403.14403
  3. https://www.deeplearning.ai/the-batch/issue-242/
本页内容
© . This site is unofficial and not affiliated with InfiniFlow.