代理流系统是 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 遵循 Canvas.__init__() 中定义的精确结构
Canvas DSL 架构
组件在 Operator 枚举中定义,并通过 component_class() 工厂映射到 Python 类
组件实现映射
| 运算符 | Python 类 | 参数类 | 目的 |
|---|---|---|---|
开始 | 开始 | BeginParam | 带序言的流入口点 |
生成 | 生成 | GenerateParam | LLM 文本生成 |
检索 | 检索 | RetrievalParam | 知识库搜索 |
分类 | 分类 | CategorizeParam | 用于分支的输入分类 |
执行SQL | 执行SQL | ExeSQLParam | 数据库查询执行 |
答案 | 答案 | AnswerParam | 用户交互界面 |
来源:web/src/pages/flow/constant.tsx72-110 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_app.py 模块提供了用于流管理和执行的 Flask 端点
API 端点实现
| 端点 | 功能 | 服务类 | 目的 |
|---|---|---|---|
GET /templates | templates() | CanvasTemplateService | 流模板 |
GET /list | canvas_list() | UserCanvasService | 用户流 |
POST /set | save() | UserCanvasService | 创建/更新流 |
POST /completion | run() | Canvas | 执行流 |
POST /reset | reset() | Canvas | 重置流状态 |
POST /debug | debug() | 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
前端使用 @xyflow/react 配合自定义节点类型和 Zustand 状态管理
前端架构:React 组件到代码
关键前端类
| 组件 | 文件 | 目的 |
|---|---|---|
FlowCanvas | canvas/index.tsx | 主流编辑器 |
useGraphStore | store.ts | Zustand 状态管理 |
FormDrawer | flow-drawer/index.tsx | 组件配置 |
nodeTypes | canvas/index.tsx:49-67 | 节点类型注册 |
RFState | store.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 表单组件,并进行同步参数验证
表单组件映射
表单到后端参数映射
| 前端表单 | 初始值常量 | 后端参数类 |
|---|---|---|
GenerateForm | initialGenerateValues | GenerateParam |
RetrievalForm | initialRetrievalValues | RetrievalParam |
CategorizeForm | initialCategorizeValues | CategorizeParam |
ExeSQLForm | initialExeSqlValues | ExeSQLParam |
来源:web/src/pages/flow/flow-drawer/index.tsx64-102 web/src/pages/flow/constant.tsx405-655 web/src/pages/flow/utils.ts128-157
当流执行时
流在执行之间保持状态,包括
这允许进行多轮对话和有状态交互。
来源:agent/canvas.py170-267 api/apps/canvas_app.py112-189
这是一个典型的 RAG 流在代码中的实现方式
组件 DSL 结构
执行序列
Canvas.run() 以 components["begin"]["obj"].run() 开始Answer 组件接收Retrieval._run() 调用 settings.retrievaler.retrieval() 进行知识库搜索Generate._run() 调用 LLMBundle.chat() 并提供检索上下文Answer 组件进行显示组件参数示例
来源:agent/canvas.py77-96 agent/component/retrieval.py60-135 agent/component/generate.py149-233 agent/component/base.py370-381
代理流系统支持各种高级功能
这些功能使得能够创建针对特定用例和领域定制的复杂 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 管道的强大工具。通过在可视化界面中连接不同的组件,用户可以根据其特定需求设计复杂的流程,而无需编写代码。该系统的模块化和可扩展性使其适用于广泛的应用场景,从简单的问答到复杂的多步骤推理过程。