LangFlow技术深度解析:可视化编排LangChain应用的新范式 -(2)流编辑器系统

Flow Editor System | langflow-ai/langflow | DeepWiki

流编辑器系统

相关源文件

流编辑器系统是 Langflow 的核心交互式组件,允许用户直观地创建、编辑和管理 LLM 驱动的应用程序。它提供了一个直观的画布,用户可以在其中添加节点、将其与边缘连接并配置其属性以构建复杂的 LLM 工作流,而无需编写代码。有关为编辑器中的节点提供支持的更广泛的组件系统的信息,请参阅组件系统

概述 架构

流编辑器系统构建在 ReactFlow 之上,并遵循基于组件的架构,状态管理由 Zustand 存储处理。

来源:来源/前端/src/pages/FlowPage/components/PageComponent/index.tsx src/frontend/src/stores/flowStore.ts 来源/前端/来源/商店/flowsManagerStore.ts

核心组件

GenericNode 组件

该组件是流编辑器的主要构建块,它使用统一的界面渲染所有节点,无论其类型如何。GenericNode

来源:src/frontend/src/CustomNodes/GenericNode/index.tsx

GenericNode 组件的主要功能:

  • 动态节点标头:显示节点名称、图标和状态指示器
  • 交互式输入/输出句柄:连接的输入参数和输出句柄
  • 可折叠界面:可以最小化以节省空间
  • 可自定义视图:支持显示/隐藏详细信息
  • **Node Status Indicators(节点状态指示器):**显示构建状态、验证错误等。
  • 工具栏:提供对特定于节点的作的快速访问
  • Tool Mode:代理工作流程中用作工具的节点的特殊模式

Node Toolbar 组件

NodeToolbarComponent 提供了一组丰富的作,用于作流中的节点。

来源:src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx

工具栏提供以下主要功能:

  • 代码编辑:打开可自定义节点的代码编辑器
  • 控件:通过模态界面配置节点参数
  • 冻结:保留节点状态并防止在流程执行期间进行更新
  • Tool Mode:在兼容节点的标准模式和工具模式之间切换
  • 组件管理:保存、复制、共享、下载组件
  • 文档:Access 组件文档
  • 视觉调整:最小化/扩展节点以管理画布空间
  • 编辑作:复制、粘贴和删除节点

流编辑器页面

Flow Editor Page (流编辑器页面) 是管理 ReactFlow 画布和所有交互处理的主要容器组件。

来源:来源/前端/src/pages/FlowPage/components/PageComponent/index.tsx

流编辑器页面提供:

  • 组件拖放:通过从侧边栏拖动将组件添加到画布
  • 连接管理:创建和验证组件之间的连接
  • 选择处理:多选、分组和作多个节点
  • 画布控件:缩放、平移和导航画布
  • 键盘快捷键:撤消/重做、复制/粘贴、删除和其他作
  • 流程构建:验证和准备要执行的流程

状态管理

流编辑器系统使用 Zustand 存储进行状态管理,其中两个主要存储处理流编辑的不同方面。

流存储

该 管理当前流的状态,包括节点、边缘和构建状态。flowStore

来源:src/frontend/src/stores/flowStore.ts

Flows Manager 商店

它管理多个流、撤消/重做功能的历史记录和流元数据。flowsManagerStore

来源:来源/前端/来源/商店/flowsManagerStore.ts

数据模型

流编辑器系统使用多个关键数据模型来表示流元素。

节点和边缘类型

来源:来源/前端/来源/类型/流/index.ts 来源/前端/src/types/api/index.ts

关键数据结构:

  • FlowType:表示包含元数据和内容的完整流

    {
    name: string;
    id: string;
    data: ReactFlowJsonObject<AllNodeType, EdgeType> | null;
    description: string;
    endpoint_name?: string | null;
    is_component?: boolean;
    // ...additional metadata
    }

  • NodeDataType:表示节点内的数据

    {
    showNode?: boolean;
    type: string;
    node: APIClassType;
    id: string;
    output_types?: string[];
    buildStatus?: BuildStatus;
    }

  • EdgeType:表示节点之间的连接

    {
    id: string;
    source: string;
    target: string;
    sourceHandle: string; // JSON stringified sourceHandleType
    targetHandle: string; // JSON stringified targetHandleType
    data: EdgeDataType;
    }

  • APIClassType:表示组件的 API 规范

    {
    base_classes?: Array<string>;
    description: string;
    template: APITemplateType; // Map of input parameters
    display_name: string;
    outputs?: Array<OutputFieldType>;
    // ...additional properties
    }

用户交互流

将组件添加到 Canvas

来源:来源/前端/src/pages/FlowPage/components/PageComponent/index.tsx

连接节点

来源:src/frontend/src/stores/flowStore.ts 来源/前端/src/utils/reactflowUtils.ts

构建和运行流

来源:src/frontend/src/stores/flowStore.ts 来源/前端/src/utils/buildUtils.ts

节点配置和自定义

Flow Editor 提供了多种配置和自定义节点的方法:

工具栏作

Node Toolbar 提供对常见节点作的直接访问:

|--------|---------|---------------|
| 按钮 | 行动 | 描述 |
| 法典 | 打开代码编辑器 | 用于在节点中编辑自定义代码 |
| 控制 | 打开参数编辑器 | 用于配置节点参数 |
| 冻结 | 冻结节点状态 | 防止在流程执行期间进行更新 |
| 工具模式 | 切换工具模式 | 将节点转换为代理工具 |
| 更多 | 打开其他选项 | 提供扩展功能 |

来源:src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx

代码编辑器模态

代码编辑器模态允许编辑自定义组件的 Python 代码:

来源:src/frontend/src/modals/codeAreaModal/index.tsx

输入参数

每个节点可以有多个不同类型的输入参数:

|----------|--------|-----------|
| 参数类型 | 描述 | 连接支持 |
| 字符串 | 文本输入 | 可以连接或手动输入 |
| 数 | 数字输入 | 可以连接或手动输入 |
| 布尔 | 切换输入 | 可以连接或手动切换 |
| 列表 | 数组输入 | 可以连接或手动配置 |
| 字典 | 字典输入 | 可以连接或手动配置 |
| 文件 | 文件上传 | 可以连接或手动上传 |
| 法典 | 代码编辑器 | 可以连接或手动编辑 |

来源:来源/前端/src/types/api/index.ts

流程管理

Flow Editor System 提供了全面的流程管理功能:

保存和加载流

来源:src/frontend/src/stores/flowStore.ts 来源/前端/来源/商店/flowsManagerStore.ts

导出和导入流

来源:src/frontend/src/modals/exportModal/index.tsx

撤消/重做功能

来源:来源/前端/来源/商店/flowsManagerStore.ts

结论

Flow Editor System 是 Langflow 可视化开发体验的核心。它提供了一个丰富、直观的界面,用于通过拖放交互、可视化连接和可配置节点的组合来创建和作流。该系统由强大的架构提供支持,该架构将 ReactFlow 的画布功能与自定义组件和状态管理相结合,以创建无缝的开发体验。

本文档涵盖了构成 Flow Editor 系统的核心组件、数据模型、状态管理、用户交互和自定义选项。有关可在流程中使用的组件的更多信息,请参阅 Component System 页面。

来源:src/frontend/src/CustomNodes/GenericNode/index.tsx src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx 来源/前端/src/pages/FlowPage/components/PageComponent/index.tsx src/frontend/src/stores/flowStore.ts 来源/前端/来源/商店/flowsManagerStore.ts 来源/前端/来源/类型/流/index.ts 来源/前端/src/types/api/index.ts 来源/前端/src/utils/reactflowUtils.ts 来源/前端/src/utils/buildUtils.ts

节点和边

相关源文件

本页介绍了 Langflow 可视化编程接口的核心构建块:节点和边。节点表示可以通过边缘连接以创建 AI 工作流的组件(如 LLM、链、工具等)。本文档解释了节点和边在 Langflow 系统中是如何构建和渲染的,以及它们如何相互交互。

有关如何管理和保存流的信息,请参阅流管理

节点和 Edge 概述

在 Langflow 中,流由由边(表示数据流)连接的节点(表示组件或功能)组成。可视化界面建立在 React Flow 之上,React Flow 为图形编辑器提供了基本功能。

资料来源: [src/frontend/src/CustomNodes/GenericNode/index.tsx], [src/frontend/src/types/flow/index.ts], [src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx]

节点类型和结构

Langflow 有两种主要节点类型:GenericNode(用于组件)和 NoteNode(用于注释)。

节点数据类型

节点的核心数据结构定义为 TypeScript 类型:

资料来源:[src/frontend/src/types/flow/index.ts:37-70], [src/frontend/src/types/api/index.ts:31-66]

GenericNode 组件

它是主要节点类型,代表 Langflow 中可用的不同组件(LLM、链、代理等)。它是一个复杂的组件,它呈现:GenericNode

  1. 节点标头(图标、标题)
  2. 状态指示灯
  3. 描述 (展开时)
  4. 输入参数
  5. 输出手柄

组件根据其状态(展开/最小化、选中、使用工具模式等)以不同的方式显示

资料来源:[src/frontend/src/CustomNodes/GenericNode/index.tsx:66-592]

边和连接

边表示节点之间的数据流,将一个节点的输出连接到另一个节点的输入。

边缘结构

Langflow 中的每个边缘都有:

  • 唯一 ID
  • 源节点 ID 和句柄
  • 目标节点 ID 和句柄
  • 包含连接元数据的数据对象

资料来源:[src/frontend/src/types/flow/index.ts:85-131], [src/frontend/src/utils/reactflowUtils.ts:104-166]

连接验证

连接节点时,Langflow 会验证:

  1. 源和目标是不同的节点
  2. 源的输出类型与目标的输入类型兼容
  3. 对于非列表输入,输入尚未建立连接

资料来源: [src/frontend/src/utils/reactflowUtils.ts:316-363]

节点渲染

该组件根据节点的状态和元数据动态呈现。GenericNode

视觉状态

节点具有多种视觉状态:

  • 扩展/最小化 ( 属性)showNode
  • 已选中(单击时)
  • 构建(在流程执行期间)
  • 错误(验证失败时)
  • 冻结(显式设置时)
  • 工具模式(特殊执行模式)

节点的外观会根据这些状态而变化,以提供视觉反馈。

输入参数渲染

输入参数根据节点的模板呈现,该模板指定每个参数的类型、要求和 UI。

资料来源:[src/frontend/src/CustomNodes/GenericNode/index.tsx:447-458], [src/frontend/src/CustomNodes/GenericNode/components/RenderInputParameters.tsx]

输出参数

输出参数表示节点可以发送到其他节点的数据。它们将呈现为节点右侧的连接手柄。

每个输出都有:

  • 名字
  • 显示名称
  • 类型 (它可以提供的数据类型)
  • 可选的可见性控制(可以隐藏)

资料来源:[src/frontend/src/CustomNodes/GenericNode/index.tsx:539-582]、[src/frontend/src/CustomNodes/GenericNode/components/NodeOutputParameter.tsx]

节点工具栏

选择节点后,将显示 NodeToolbar,提供作来作该节点。

资料来源: [src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx:44-770]

代码编辑

对于具有代码字段的节点(如自定义函数),工具栏提供对代码编辑器的访问:

来源:[src/frontend/src/modals/codeAreaModal/index.tsx:34-289], [src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx:446-456]

工具模式

工具模式是某些节点的一项特殊功能,可更改它们在流程中的处理方式:

资料来源:[src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx:485-532]

节点状态和验证

节点具有指示其在流中的当前状态的构建状态:

资料来源:[src/frontend/src/CustomNodes/GenericNode/components/NodeStatus/index.tsx], [src/frontend/src/style/applies.css:116-138]

节点验证

在执行流之前,会验证节点以确保它们具有所有必需的输入:

资料来源:[src/frontend/src/utils/reactflowUtils.ts:518-601]

Edge 交互和渲染

Edge 可视化节点之间的连接并支持各种交互:

资料来源: [src/frontend/src/utils/reactflowUtils.ts:74-166], [src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx:428-449]

边缘清洁

当节点更改时,将 "清理" 边缘以删除无效连接:

资料来源:[src/frontend/src/utils/reactflowUtils.ts:74-162]

特殊节点功能

冻结节点

节点可以被 "冻结" ,这在视觉上表明它们在流程执行期间不会被重新计算:

资料来源:[src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx:468-484], [src/frontend/src/style/applies.css:116-138]

节点最小化

可以最小化节点以节省复杂流程中的空间:

资料来源:[src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx:190-208]

结论

Langflow 中的节点和边缘系统为构建 AI 工作流提供了灵活的可视化编程界面。节点表示具有特定功能的组件,而 edges 表示这些组件之间的数据流。该系统包括全面的验证、状态指示器和交互功能,可帮助用户有效地创建和调试其流程。

通过 ReactFlow 基础,Langflow 提供了高度交互的体验,用户可以通过连接兼容的组件并配置其参数来直观地构建复杂的工作流程。

流程管理

相关源文件

Langflow 中的流管理是指负责在应用程序内创建、保存、加载和组织流的一组进程和系统。流表示将各种 AI 组件连接在一起以构建应用程序的可视化工作流。本页记录了如何在 Langflow 系统中存储、组织和管理流。

有关流程和节点连接的可视化编辑的信息,请参阅 Flow Editor 系统

流数据模型

Langflow 中的流由结构化数据模型表示,该模型包含存储和执行工作流所需的所有信息。

流的关键属性包括:

  • id:唯一标识符
  • name:流的显示名称
  • description:可选描述
  • user_id:流的所有者
  • folder_id:包含流的父文件夹
  • data:包含节点、边缘和其他流程详细信息的 JSON 对象
  • is_component:指示流是否为可重用组件的标志
  • endpoint_name:可选的自定义 API 终端节点名称
  • access_type:隐私设置(PRIVATE、PUBLIC、UNLISTED)

来源:来源/backend/base/langflow/api/v1/flows.py36-137

流存储架构

Langflow 为 flow 实现了双重存储策略:

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

创建或更新流时,会将其保存到数据库,如果提供了路径,则会选择性地保存到文件系统中。

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

流的 CRUD作

创建流

创建新流时:

API 通过向重复名称附加数字来自动处理名称冲突(例如,"MyFlow"、"MyFlow (1)")。指定终端节点名称时,终端节点名称同样是唯一的。

来源:来源/backend/base/langflow/api/v1/flows.py56-136 来源/backend/base/langflow/api/v1/flows.py139-168

检索流

Langflow 提供了多个用于检索流的终端节点:

  • GET /flows/:获取所有流(带筛选选项)
  • GET /flows/{flow_id}:获取特定流
  • GET /flows/public_flow/{flow_id}:获取公开共享的流

响应包括所有流元数据和完整的流定义(节点、边缘等)。

来源:来源/backend/base/langflow/api/v1/flows.py171-253 来源/backend/base/langflow/api/v1/flows.py274-284

更新流

流通过终端节点进行更新:PATCH /flows/{flow_id}

更新流程时,您可以修改任何属性,包括名称、描述、数据、文件夹分配等。如果配置为这样做,系统会在保存之前自动删除敏感数据,例如 API 密钥。

来源:来源/backend/base/langflow/api/v1/flows.py302-364

删除流

删除流时,系统会执行级联删除以删除所有相关数据:

该函数可确保删除所有相关数据,从而防止数据库中出现孤立记录。cascade_delete_flow

来源:来源/backend/base/langflow/api/v1/flows.py367-385 来源/后端/基础/langflow/api/utils.py291-303

流组织

文件夹结构

Langflow 中的流被组织到文件夹中:

每个流程都必须属于一个文件夹。如果在创建过程中未指定文件夹,则流程将自动分配给默认的 "My Collection" 文件夹。

来源:来源/backend/base/langflow/api/v1/flows.py118-126 来源/后端/基础/langflow/api/v1/folders.py35-92

文件夹作

文件夹 API 为以下各项提供端点:

  • 创建文件夹:POST /folders/
  • 检索文件夹: 和**GET /folders/**GET /folders/{folder_id}
  • 更新文件夹:PATCH /folders/{folder_id}
  • 删除文件夹:DELETE /folders/{folder_id}

删除文件夹后,可以删除其中的所有流或将其移动到默认文件夹。

来源:来源/后端/基础/langflow/api/v1/folders.py94-163 来源/后端/基础/langflow/api/v1/folders.py226-255

流导入和导出

导出流

流可以单独或批量导出:

导出过程会在生成导出文件之前自动删除 API 密钥等敏感信息。

来源:来源/backend/base/langflow/api/v1/flows.py483-522

导入流

可以从 JSON 文件或 ZIP 存档导入流:

导入过程通过为导入的流生成唯一名称来处理名称冲突。

来源:来源/backend/base/langflow/api/v1/flows.py408-451

前端流管理

前端使用 Zustand store 来管理 flow 状态:

提供:flowsManagerStore

  • 电流跟踪
  • 可用流列表
  • 自动保存功能
  • 撤消/重做历史记录管理

来源:来源/前端/来源/商店/flowsManagerStore.ts19-150 来源/前端/来源/类型/zustand/flowsManager/index.ts1-39

撤消/重做功能

前端实现了用于流编辑的撤消/重做功能:

此实施对过去和未来状态使用单独的堆栈,允许用户浏览流程的编辑历史记录。

来源:来源/前端/来源/商店/flowsManagerStore.ts59-124

流相互关系

流与系统中的其他几个组件有连接:

这些关系可确保:

  1. 聊天历史记录随流一起保留
  2. 存储执行记录以供调试
  3. 构建缓存可加快重复执行的速度
  4. 上传的文件仍与其流关联

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

来源:来源/后端/基础/langflow/api/utils.py291-303 来源/backend/base/langflow/memory.py73-99 src/backend/base/langflow/api/v1/monitor.py24-43

流访问控制

流支持不同的访问类型:

|----------|--------------------|
| 访问类型 | 描述 |
| 私人 | 违约。只有所有者可以查看和编辑 |
| 公共 | 任何拥有该链接的人都可以查看和运行流 |
| 上市 | 未公开列出,但可通过链接访问 |

公共流使用特殊机制根据客户端 ID 和流 ID 创建确定性会话 ID,从而确保匿名用户的行为一致。

来源:来源/后端/基础/langflow/api/utils.py315-372 来源/backend/base/langflow/api/v1/flows.py287-299

总结

Langflow 中的流管理提供了一个用于创建、组织和共享 AI 工作流的综合系统。双存储方法(数据库和文件系统)可确保数据持久性,而基于文件夹的组织可帮助用户管理流集合。具有撤消/重做功能的前端状态管理可提供流畅的编辑体验,而导入/导出功能支持在用户或实例之间轻松共享流。

相关推荐
JaydenAI9 小时前
[拆解LangChain执行引擎] ManagedValue——一种特殊的只读虚拟通道
python·langchain
OPEN-Source10 小时前
大模型实战:搭建一张“看得懂”的大模型应用可观测看板
人工智能·python·langchain·rag·deepseek
zzz的学习笔记本10 小时前
AI智能体时代的记忆 笔记(由大模型生成)
人工智能·智能体
一切尽在,你来11 小时前
1.4 LangChain 1.2.7 核心架构概览
人工智能·langchain·ai编程
一切尽在,你来12 小时前
1.3 环境搭建
人工智能·ai·langchain·ai编程
蛇皮划水怪18 小时前
深入浅出LangChain4J
java·langchain·llm
、BeYourself20 小时前
LangChain4j 流式响应
langchain
、BeYourself20 小时前
LangChain4j之Chat and Language
langchain
qfljg1 天前
langchain usage
langchain
kjkdd1 天前
6.1 核心组件(Agent)
python·ai·语言模型·langchain·ai编程