Langflow 中的流程管理通过 flowsManagerStore 来实现生命周期管理、存储、组织和编排。flows manager store 是流程操作的中心状态管理系统,负责处理从流程选择、自动保存到撤销/重做功能和示例流程管理的所有事务。本文档记录了应用程序级别的流程管理方式,重点关注 flows manager store 及其与后端存储系统的集成。
有关流程可视化编辑和节点连接的信息,请参阅 可视化流程编辑器和节点 (4.1)。
useFlowsManagerStore 是前端流程操作的中心状态管理系统。它协调可视化编辑器、后端 API 和用户交互,以提供无缝的流程管理体验。
flows manager store 管理的关键状态属性
| 属性 | 类型 | 目的 |
|---|---|---|
flows | FlowType[] | 所有用户流程的集合 |
currentFlow | FlowType | 当前正在编辑的活动流程 |
currentFlowId | 字符串 | 当前流程的 ID |
examples | FlowType[] | 预构建的示例流程 |
autoSaving | 布尔值 | 自动保存功能状态 |
autoSavingInterval | 数字 | 自动保存间隔(毫秒) |
saveLoading | 布尔值 | 保存操作加载状态 |
searchFlowsComponents | 字符串 | 组件搜索过滤器 |
healthCheckMaxRetries | 数字 | 健康检查重试上限 |
来源: src/frontend/src/stores/flowsManagerStore.ts19-142 src/frontend/src/types/zustand/flowsManager/index.ts3-32
Langflow 实现了双重流程存储策略
创建或更新流程时,会将其保存到数据库,如果提供了路径,还会将其保存到文件系统。
来源: src/backend/base/langflow/api/v1/flows.py47-54 src/backend/base/langflow/api/v1/flows.py136-152
当新流程被创建时
API 通过在重复名称后附加数字来自动处理名称冲突(例如,“MyFlow”、“MyFlow (1)”)。端点名称在指定时也会进行类似的唯一化处理。
来源: src/backend/base/langflow/api/v1/flows.py56-136 src/backend/base/langflow/api/v1/flows.py139-168
Langflow 提供多个检索流程的端点
GET /flows/:获取所有流程(可带过滤选项)GET /flows/{flow_id}:获取特定流程GET /flows/public_flow/{flow_id}:获取公开分享的流程响应包含所有流程元数据和完整的流程定义(节点、边等)。
来源: src/backend/base/langflow/api/v1/flows.py171-253 src/backend/base/langflow/api/v1/flows.py274-284
流程通过 PATCH /flows/{flow_id} 端点进行更新
更新流程时,您可以修改包括名称、描述、数据、文件夹分配等在内的任何属性。如果配置允许,系统会在保存前自动移除 API 密钥等敏感数据。
来源: src/backend/base/langflow/api/v1/flows.py302-364
当流程被删除时,系统会执行级联删除以移除所有相关数据
cascade_delete_flow 函数确保移除所有相关数据,防止数据库中出现孤立记录。
来源: src/backend/base/langflow/api/v1/flows.py367-385 src/backend/base/langflow/api/utils.py291-303
Langflow 中的流程按文件夹进行组织
每个流程都必须属于一个文件夹。如果在创建时未指定文件夹,则流程会自动分配到默认的“我的集合”文件夹。
来源: src/backend/base/langflow/api/v1/flows.py118-126 src/backend/base/langflow/api/v1/folders.py35-92
Folders API 提供以下端点
POST /folders/GET /folders/ 和 GET /folders/{folder_id}PATCH /folders/{folder_id}DELETE /folders/{folder_id}删除文件夹时,其中包含的所有流程可以被删除,也可以移动到默认文件夹。
来源: src/backend/base/langflow/api/v1/folders.py94-163 src/backend/base/langflow/api/v1/folders.py226-255
流程可以单独或批量导出
导出过程会自动移除 API 密钥等敏感信息,然后再生成导出文件。
来源: src/backend/base/langflow/api/v1/flows.py483-522
流程可以从 JSON 文件或 ZIP 存档导入
导入过程通过生成唯一的名称来处理名称冲突。
来源: src/backend/base/langflow/api/v1/flows.py408-451
flows manager store 负责协调从创建到删除的完整流程生命周期,并与可视化编辑器和后端存储系统集成。
当用户选择一个流程时,setCurrentFlow 函数会在 flows manager store 和 flow editor store 之间进行协调
setCurrentFlow 函数执行几项关键操作
currentFlow 和 currentFlowId 状态useFlowStore.getState().resetFlow(flow) 来初始化编辑器来源: src/frontend/src/stores/flowsManagerStore.ts37-43 src/frontend/src/stores/flowsManagerStore.ts44-46
flows manager store 实现了一个自动保存系统,具有可配置的间隔和防抖动功能,以防止过多的 API 调用。
自动保存系统使用 SAVE_DEBOUNCE_TIME 常量作为默认间隔,并提供用户控件进行自定义
| 属性 | 默认 | 目的 |
|---|---|---|
autoSaving | true | 启用/禁用自动保存 |
autoSavingInterval | SAVE_DEBOUNCE_TIME | 保存间隔(毫秒) |
saveLoading | false | 指示活动保存操作 |
来源: src/frontend/src/stores/flowsManagerStore.ts27-31 src/frontend/src/stores/flowsManagerStore.ts55-56 src/frontend/src/constants/constants.ts1
flows manager store 实现了一个复杂的撤销/重做系统,具有按流历史跟踪和重复状态检测功能。
takeSnapshot 函数实现了多项优化
撤销/重做系统的关键特性
| 功能 | 实现 | 目的 |
|---|---|---|
| 按流历史记录 | past[currentFlowId] | 为每个流单独的历史记录 |
| 重复检测 | JSON 字符串比较 | 避免冗余快照 |
| 历史记录修剪 | maxHistorySize: 100 | 内存管理 |
| 深度克隆 | 来自 lodash 的cloneDeep() | 防止状态变异 |
该系统为每个流维护独立的 past 和 future 堆栈,使用 currentFlowId 作为历史查找的键。
来源: src/frontend/src/stores/flowsManagerStore.ts59-86 src/frontend/src/stores/flowsManagerStore.ts87-104 src/frontend/src/stores/flowsManagerStore.ts106-124 src/frontend/src/stores/flowsManagerStore.ts11-14
flows manager store 提供了用于搜索和选择流组件和卡片的功能。
搜索系统允许用户在流中过滤和选择组件
searchFlowsComponents:用于组件搜索的字符串过滤器selectedFlowsComponentsCards:所选组件 ID 的数组resetStore() 时,这两种状态都会重置来源: src/frontend/src/stores/flowsManagerStore.ts125-132 src/frontend/src/stores/flowsManagerStore.ts134-141
流与系统中的多个其他组件有关联
这些关系确保
删除流时,级联删除过程会删除所有相关的记录。
来源: src/backend/base/langflow/api/utils.py291-303 src/backend/base/langflow/memory.py73-99 src/backend/base/langflow/api/v1/monitor.py24-43
流支持不同的访问类型
| 访问类型 | 描述 |
|---|---|
| 私有 | 默认。只有所有者可以查看和编辑 |
| 公共 | 拥有链接的任何人都可以查看和运行该流 |
| 未列出 | 未公开列出,但可通过链接访问 |
公共流使用特殊的机制,根据客户端 ID 和流 ID 创建确定性的会话 ID,确保匿名用户的行为一致。
来源: src/backend/base/langflow/api/utils.py315-372 src/backend/base/langflow/api/v1/flows.py287-299
Langflow 中的流管理提供了一个全面的系统,用于创建、组织和共享 AI 工作流。双重存储方法(数据库和文件系统)确保了数据持久性,而基于文件夹的组织则帮助用户管理流的集合。具有撤销/重做功能的前端状态管理提供了流畅的编辑体验,而导入/导出功能则方便了用户之间或实例之间的流共享。