菜单

流管理

相关源文件

Langflow 中的流程管理通过 flowsManagerStore 来实现生命周期管理、存储、组织和编排。flows manager store 是流程操作的中心状态管理系统,负责处理从流程选择、自动保存到撤销/重做功能和示例流程管理的所有事务。本文档记录了应用程序级别的流程管理方式,重点关注 flows manager store 及其与后端存储系统的集成。

有关流程可视化编辑和节点连接的信息,请参阅 可视化流程编辑器和节点 (4.1)

Flows Manager Store 架构

useFlowsManagerStore 是前端流程操作的中心状态管理系统。它协调可视化编辑器、后端 API 和用户交互,以提供无缝的流程管理体验。

Flows Manager Store 状态结构

flows manager store 管理的关键状态属性

属性类型目的
flowsFlowType[]所有用户流程的集合
currentFlowFlowType当前正在编辑的活动流程
currentFlowId字符串当前流程的 ID
examplesFlowType[]预构建的示例流程
autoSaving布尔值自动保存功能状态
autoSavingInterval数字自动保存间隔(毫秒)
saveLoading布尔值保存操作加载状态
searchFlowsComponents字符串组件搜索过滤器
healthCheckMaxRetries数字健康检查重试上限

来源: src/frontend/src/stores/flowsManagerStore.ts19-142 src/frontend/src/types/zustand/flowsManager/index.ts3-32

流程存储架构

Langflow 实现了双重流程存储策略

  1. 数据库存储:使用 SQLModel 进行主要存储,包含流程和相关数据的表
  2. 文件系统存储(可选):通过 JSON 文件进行二次存储以实现冗余

创建或更新流程时,会将其保存到数据库,如果提供了路径,还会将其保存到文件系统。

来源: src/backend/base/langflow/api/v1/flows.py47-54 src/backend/base/langflow/api/v1/flows.py136-152

流程的 CRUD 操作

创建流程

当新流程被创建时

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 函数执行几项关键操作

  1. 更新 currentFlowcurrentFlowId 状态
  2. 调用 useFlowStore.getState().resetFlow(flow) 来初始化编辑器
  3. 将 flows manager 与可视化编辑器状态同步

来源: src/frontend/src/stores/flowsManagerStore.ts37-43 src/frontend/src/stores/flowsManagerStore.ts44-46

自动保存系统

flows manager store 实现了一个自动保存系统,具有可配置的间隔和防抖动功能,以防止过多的 API 调用。

自动保存配置

自动保存系统使用 SAVE_DEBOUNCE_TIME 常量作为默认间隔,并提供用户控件进行自定义

属性默认目的
autoSavingtrue启用/禁用自动保存
autoSavingIntervalSAVE_DEBOUNCE_TIME保存间隔(毫秒)
saveLoadingfalse指示活动保存操作

来源: 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

流的相互关系

流与系统中的多个其他组件有关联

这些关系确保

  1. 聊天记录与流一同保存
  2. 执行记录已存储以供调试
  3. 构建缓存可加快重复执行速度
  4. 上传的文件与它们所属的流保持关联

删除流时,级联删除过程会删除所有相关的记录。

来源: 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 工作流。双重存储方法(数据库和文件系统)确保了数据持久性,而基于文件夹的组织则帮助用户管理流的集合。具有撤销/重做功能的前端状态管理提供了流畅的编辑体验,而导入/导出功能则方便了用户之间或实例之间的流共享。