菜单

Agent 流系统

相关源文件

代理流系统是 RAGFlow 中的可视化工作流构建器,允许用户创建自定义的检索增强生成(RAG)流水线。该系统通过在有向图中连接不同的专用组件,实现复杂多步 AI 工作流的创建。有关流编辑器中可用特定组件的信息,请参阅组件参考

概述

代理流系统提供了一个通过 Python 中的 Canvas 类和 FlowCanvas React 组件实现的可视化工作流构建器。流表示为存储为 JSON 的领域特定语言 (DSL) 结构,定义了具有上游/下游关系的组件图,用于执行编排。

系统架构:自然语言到代码实体

来源:agent/canvas.py26-99 web/src/pages/flow/canvas/index.tsx77-123 api/apps/canvas_app.py110-189 web/src/pages/flow/flow-drawer/index.tsx64-102

代理流架构

该系统使用基于 TypeScript 的 React 前端和 Python 后端。流状态在前端通过 Zustand 存储 (useGraphStore) 管理,在后端通过 Canvas 类管理。

流 DSL 结构

DSL 遵循 Canvas.__init__() 中定义的精确结构

Canvas DSL 架构

来源:agent/canvas.py71-127 34-48 324-359

组件与流执行

组件类型与类映射

组件在 Operator 枚举中定义,并通过 component_class() 工厂映射到 Python 类

组件实现映射

运算符Python 类参数类目的
开始开始BeginParam带序言的流入口点
生成生成GenerateParamLLM 文本生成
检索检索RetrievalParam知识库搜索
分类分类CategorizeParam用于分支的输入分类
执行SQL执行SQLExeSQLParam数据库查询执行
答案答案AnswerParam用户交互界面

来源:web/src/pages/flow/constant.tsx72-110 324-359 agent/component/generate.py42-85 agent/component/retrieval.py33-57 agent/component/exesql.py28-60

组件执行模型

组件通过 ComponentBase.run() 实现标准化执行模式,该方法调用抽象的 _run() 方法

组件执行流程

关键实现方法

方法目的返回值
ComponentBase.run()入口点,错误处理pd.DataFrame
Component._run()核心组件逻辑pd.DataFrame
get_input()检索上游输出pd.DataFrame
output()返回组件输出(str, pd.DataFrame)
ComponentParamBase.check()参数验证None 或抛出异常

来源:agent/component/base.py370-381 agent/component/base.py382-383 agent/component/base.py446-516 agent/component/base.py385-407

示例:生成组件

生成组件是典型组件的一个很好的例子

来源:agent/component/generate.py68-186

流执行算法

Canvas.run() 方法实现了具有依赖解析和循环检测的复杂执行算法

Canvas 执行算法

执行中的关键方法

方法目的位置
Canvas.run()主执行循环agent/canvas.py169-298
Canvas._find_loop()循环检测算法agent/canvas.py325-353
ComponentBase.get_dependent_components()依赖项解析agent/component/base.py360-368
Canvas.get_component()组件查找agent/canvas.py299-300

来源:agent/canvas.py169-298 agent/canvas.py325-353 agent/component/base.py360-368

Canvas 服务 API

canvas_app.py 模块提供了用于流管理和执行的 Flask 端点

API 端点实现

端点功能服务类目的
GET /templatestemplates()CanvasTemplateService流模板
GET /listcanvas_list()UserCanvasService用户流
POST /setsave()UserCanvasService创建/更新流
POST /completionrun()Canvas执行流
POST /resetreset()Canvas重置流状态
POST /debugdebug()Canvas调试单个组件

来源:api/apps/canvas_app.py31-34 api/apps/canvas_app.py37-42 api/apps/canvas_app.py110-189 api/apps/canvas_app.py235-256

前端实现

React Flow 集成

前端使用 @xyflow/react 配合自定义节点类型和 Zustand 状态管理

前端架构:React 组件到代码

关键前端类

组件文件目的
FlowCanvascanvas/index.tsx主流编辑器
useGraphStorestore.tsZustand 状态管理
FormDrawerflow-drawer/index.tsx组件配置
nodeTypescanvas/index.tsx:49-67节点类型注册
RFStatestore.ts:32-75流编辑器状态接口

来源:web/src/pages/flow/canvas/index.tsx49-67 web/src/pages/flow/store.ts32-75 web/src/pages/flow/flow-drawer/index.tsx64-102

组件表单系统

表单系统将 Operator 枚举值映射到 React 表单组件,并进行同步参数验证

表单组件映射

表单到后端参数映射

前端表单初始值常量后端参数类
GenerateForminitialGenerateValuesGenerateParam
RetrievalForminitialRetrievalValuesRetrievalParam
CategorizeForminitialCategorizeValuesCategorizeParam
ExeSQLForminitialExeSqlValuesExeSQLParam

来源:web/src/pages/flow/flow-drawer/index.tsx64-102 web/src/pages/flow/constant.tsx405-655 web/src/pages/flow/utils.ts128-157

运行流

当流执行时

  1. 用户输入通过 API 传递给流
  2. Canvas 系统确定执行路径
  3. 组件按顺序执行
  4. 结果流式传输回用户

流在执行之间保持状态,包括

  • 对话历史
  • 执行路径
  • 组件状态

这允许进行多轮对话和有状态交互。

来源:agent/canvas.py170-267 api/apps/canvas_app.py112-189

示例:基本 RAG 流实现

这是一个典型的 RAG 流在代码中的实现方式

组件 DSL 结构

执行序列

  1. Canvas.run()components["begin"]["obj"].run() 开始
  2. 用户输入由 Answer 组件接收
  3. Retrieval._run() 调用 settings.retrievaler.retrieval() 进行知识库搜索
  4. Generate._run() 调用 LLMBundle.chat() 并提供检索上下文
  5. 结果流回 Answer 组件进行显示

组件参数示例

来源:agent/canvas.py77-96 agent/component/retrieval.py60-135 agent/component/generate.py149-233 agent/component/base.py370-381

自定义能力

代理流系统支持各种高级功能

  1. 条件分支 - 使用分类 (Categorize) 和切换 (Switch) 组件根据输入创建不同路径
  2. 多跳推理 - 链接多个检索和生成步骤
  3. 外部数据集成 - 集成网络搜索、数据库查询和其他外部数据源
  4. 有状态对话 - 在多轮对话中保持上下文
  5. 模板化 - 创建可复用的子流

这些功能使得能够创建针对特定用例和领域定制的复杂 AI 助手。

来源:web/src/pages/flow/constant.tsx69-106 web/src/pages/flow/constant.tsx289-390

本地化支持

代理流系统通过其本地化系统支持多种语言,使全球用户都能使用。

来源: web/src/locales/en.ts71-89 web/src/locales/zh.ts71-73 web/src/locales/zh-traditional.ts71-73 web/src/locales/ja.ts61-62 web/src/locales/vi.ts74 web/src/locales/id.ts74 web/src/locales/pt-br.ts59 web/src/locales/de.ts29 web/src/locales/es.ts15

结论

Agent Flow 系统是 RAGFlow 中用于创建自定义 RAG 管道的强大工具。通过在可视化界面中连接不同的组件,用户可以根据其特定需求设计复杂的流程,而无需编写代码。该系统的模块化和可扩展性使其适用于广泛的应用场景,从简单的问答到复杂的多步骤推理过程。