Flow Editor 是一个可视化界面,用于在 RAGFlow 中创建、配置和管理自定义 RAG(检索增强生成)管道。此页面介绍如何使用 Flow Editor 通过连接执行特定任务(如检索文档、生成文本和回答问题)的各种组件来构建代理工作流。有关 Flow Editor 中可用组件的具体信息,请参阅 组件参考。
来源: web/src/pages/flow/canvas/index.tsx
Flow Editor 提供了一个基于 ReactFlow 的拖放界面,用于使用 FlowCanvas 组件构建代理工作流。
在 FlowCanvas 中实现的用于构建工作流的主工作区
useHandleDrop hook 拖放组件onConnect 处理程序连接节点,并通过 useValidateConnection 进行连接验证onSelectionChange 管理onBeforeDelete 和 useBeforeDelete hook 处理删除操作组件从面板拖动并放到画布上。 useHandleDrag hook 通过 handleDragStart 回调管理拖动操作。
点击节点时会打开 FormDrawer 组件,该组件使用
FormDrawer)FormSheet),集成了 react-hook-form 和 Zod 验证通过 ReactFlow 的 Controls 组件位于右下角
useHandleExportOrImportJsonFile hook 进行导入/导出useOpenDocument hook 访问文档来源: web/src/pages/flow/canvas/index.tsx78-237 web/src/pages/flow/hooks.tsx178-261 web/src/pages/flow/flow-drawer/index.tsx106-218
RAGFlow 中的每个代理 Flow 都以一个“Begin”组件开始,通常以一个向用户显示结果的“Answer”组件结束。
创建新 Flow 时,画布会自动添加一个“Begin”组件。此组件作为工作流的入口点。
将组件从组件菜单拖到画布上。组件按功能分类。
通过从节点的输出句柄点击并拖动到另一个节点的输入句柄来连接组件。这建立了组件之间的执行流。
点击组件以打开配置抽屉,其中显示了组件的可配置属性。
来源: web/src/pages/flow/constant.tsx, web/src/pages/flow/canvas/index.tsx
Flow Editor 提供了在 Operator 枚举中定义的组件,每个组件都有相应的节点类型、图标和初始配置。
每个 Operator 都映射到特定的实现工件
| 运算符 | 节点类型 | 组件 | 初始值 |
|---|---|---|---|
Begin | beginNode | BeginNode | initialBeginValues |
检索 | retrievalNode | RetrievalNode | initialRetrievalValues |
Generate | generateNode | GenerateNode | initialGenerateValues |
Categorize | categorizeNode | CategorizeNode | initialCategorizeValues |
答案 | logicNode | LogicNode | {} |
消息 | messageNode | MessageNode | initialMessageValues |
核心工作流:Begin, Retrieval, Generate, Answer, Categorize, Message, Relevant
查询处理:RewriteQuestion, KeywordExtract, Switch, Concentrator
外部搜索:DuckDuckGo, Baidu, Wikipedia, PubMed, ArXiv, Google, Bing, GoogleScholar, GitHub
实用工具:DeepL, BaiduFanyi, QWeather, ExeSQL, Template, Email, Iteration, Code
每个组件包括
operatorMap 进行的视觉样式(背景颜色、尺寸、颜色)operatorIconMap 进行的图标表示initial*Values 常量进行**初始表单数据**RestrictedUpstreamMap 进行的**连接限制**画布节点通过特定的 React 组件渲染
RagNode - 大多数组件的默认BeginNode - 工作流开始的特殊样式CategorizeNode - 用于分类的多个输出句柄GenerateNode - LLM 操作的增强显示来源: web/src/pages/flow/constant.tsx72-110 web/src/pages/flow/constant.tsx741-779 web/src/pages/flow/canvas/index.tsx49-67 web/src/pages/flow/constant.tsx156-293 web/src/pages/flow/canvas/index.tsx49-67 web/src/pages/flow/constant.tsx156-293
表单系统通过两种实现方法为节点属性配置提供支持:旧版 Ant Design 表单和新的 react-hook-form 与 shadcn/ui 组件。
每个 Operator 类型通过 FormMap 或 useFormConfigMap 映射到特定的表单组件。
| 运算符 | 旧版表单 | 新版表单 | Schema |
|---|---|---|---|
Begin | BeginForm | BeginForm | Prologue, Mode, Query params |
检索 | RetrievalForm | RetrievalForm | Similarity threshold, top_n, KB selection |
Generate | GenerateForm | GenerateForm | Prompt, LLM params, citations |
Categorize | CategorizeForm | CategorizeForm | Categories, LLM settings |
表单更改通过多个 hook 同步到画布状态
useHandleFormValuesChange - 在 useGraphStore 中更新 updateNodeFormuseWatchFormChange - 使用 react-hook-form 监视表单状态useHandleNodeNameChange - 管理节点名称更新新表单系统在 useFormConfigMap 中使用 Zod schema
表单数据保存在由 useGraphStore state 管理的节点的 data.form 属性中。
initial*Values 常量的初始值updateNodeForm 动作进行实时更新zodResolver 集成进行表单验证来源: web/src/pages/flow/flow-drawer/index.tsx64-102 web/src/pages/agent/form-sheet/use-form-config-map.tsx42-375 web/src/pages/flow/hooks.tsx263-289 web/src/pages/flow/store.ts375-404
让我们来构建一个检索信息并生成响应的基础 RAG 工作流。
来源: web/src/pages/flow/constant.tsx, web/src/pages/flow/canvas/index.tsx
除了基本线性 Flow,您还可以创建更复杂的模式来处理不同的场景。
CategorizeNode 组件使用多个源句柄,对应于 category_description 表单字段中定义的类别。 buildCategorizeListFromObject 函数将对象结构转换为表单兼容的数组,而 useBuildCategorizeHandlePositions 管理句柄定位。
边的路由通过匹配类别名称的 sourceHandle 属性进行,同时 updateFormDataOnConnect 在建立连接时同步类别描述中的 to 字段。
来源: web/src/pages/flow/utils.ts405-418 web/src/pages/flow/canvas/node/categorize-node.tsx13-68 web/src/pages/flow/store.ts188-214
RelevantNode 组件提供了带有 yes/no 源处理器的二元路由。这些处理器的表单状态在 form.yes 和 form.no 字段中进行管理,并通过 updateFormDataOnConnect 在创建边时自动更新。
RewriteQuestionForm 组件通过 LLM 处理来增强查询,并使用可配置的 language 和 message_history_window_size 参数来实现上下文感知的细化。
来源: web/src/pages/flow/canvas/node/relevant-node.tsx13-70 web/src/pages/flow/store.ts194-197 web/src/pages/flow/constant.tsx477-481
此模式通过维基百科等来源的外部信息来增强知识库结果。
来源: web/src/pages/flow/constant.tsx
Flow Editor 通过专门的钩子和组件实现了流程的持久化和测试。
导出流程:
handleExportJson 通过 buildDslComponentsByGraph 触发 DSL 转换DSLComponents 格式导入流程:
handleImportJson 打开 JsonUploadModalonFileUploadOk 处理上传的 JSONbuildNodesAndEdgesFromDSLComponents 重构画布状态测试执行:
RunDrawer 组件处理流程执行showChatModal 切换到 ChatDrawer 进行交互式测试状态管理:
useShowDrawer 钩子协调抽屉可见性runVisible/chatVisible 状态控制 UI 过渡流程状态通过以下方式自动持久化:
useWatchNodeFormDataChange - 监控表单更改updateNodeForm 调用同步到后端存储来源: web/src/pages/flow/hooks/use-export-json.ts web/src/pages/flow/utils.ts129-157 web/src/pages/flow/utils.ts65-91 web/src/pages/flow/hooks/use-show-drawer.ts
来源: web/src/pages/flow/utils.ts
Flow Editor 是 RAGFlow 中用于创建自定义 RAG 管道的强大工具。通过组合不同的组件,您可以创建复杂的流程,以检索、处理和生成满足您特定需求的信息。在探索 Flow Editor 的可能性时,请将本指南作为参考。
有关每个组件及其配置选项的详细信息,请参阅 组件参考。