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 sourceHandleTypetargetHandle: string; // JSON stringified targetHandleTypedata: EdgeDataType;
}
- APIClassType:表示組件的 API 規范
{base_classes?: Array<string>;description: string;template: APITemplateType; // Map of input parametersdisplay_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
- 節點標頭(圖標、標題)
- 狀態指示燈
- 描述 (展開時)
- 輸入參數
- 輸出手柄
組件根據其狀態(展開/最小化、選中、使用工具模式等)以不同的方式顯示
資料來源:[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 會驗證:
- 源和目標是不同的節點
- 源的輸出類型與目標的輸入類型兼容
- 對于非列表輸入,輸入尚未建立連接
資料來源: [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 實現了雙重存儲策略:
- 數據庫存儲:使用 SQLModel 的主存儲,其中包含流和相關數據的表
- 文件系統存儲(可選):通過 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
流相互關系
流與系統中的其他幾個組件有連接:
這些關系可確保:
- 聊天歷史記錄隨流一起保留
- 存儲執行記錄以供調試
- 構建緩存可加快重復執行的速度
- 上傳的文件仍與其流關聯
刪除流時,級聯刪除過程將刪除所有相關記錄。
來源:來源/后端/基礎/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 工作流的綜合系統。雙存儲方法(數據庫和文件系統)可確保數據持久性,而基于文件夾的組織可幫助用戶管理流集合。具有撤消/重做功能的前端狀態管理可提供流暢的編輯體驗,而導入/導出功能支持在用戶或實例之間輕松共享流。