当前位置: 首页 > news >正文

dify之Web 前端工作流编排(Workflow Builder)

Dify 的 Web 前端工作流编排(Workflow Builder) 是整个平台里最复杂、也是最具创新性的部分之一。

下面是一个完整、深入但清晰的技术分析👇:


🧩 一、工作流编排的核心定位

Dify 的“工作流编排”模块(Workflow Builder)是可视化拖拽式的流程设计器,允许用户在网页上像画流程图一样组装 LLM 应用逻辑

它实现了:

  • 拖拽节点(Node)
  • 节点间连线(Edge)
  • 参数设置面板(Properties Panel)
  • 实时预览与执行
  • 流程的保存、发布、执行回调

🧠 二、技术栈概览(前端部分)

模块技术
框架基础React + TypeScript
UI组件库TailwindCSS + Radix UI + Shadcn/UI
工作流可视化引擎🧩 React Flow(核心)
状态管理Zustand / React Query
构建工具Vite
代码组织Monorepo(基于 pnpm workspace)
国际化i18next
通信REST + WebSocket(实时运行状态)

🔧 三、核心依赖:React Flow

Dify 前端工作流界面使用了 React Flow —— 一个专门用于构建可视化流程图编辑器的 React 库。
它支持:

  • 拖拽节点、缩放、平移
  • 自定义节点类型(例如:LLM 节点、Tool 节点、条件判断节点等)
  • 连线事件与动态计算
  • 节点状态(运行中、错误、完成)可视化

🔗 官方库地址: https://reactflow.dev/

在 Dify 中,你会看到类似以下结构:

web/├─ app/│   ├─ components/workflow/│   │   ├─ index.tsx          ← 工作流主入口│   │   ├─ node-types/        ← 自定义节点组件(LLM、HTTP、Condition 等)│   │   ├─ edges/             ← 自定义连线样式与逻辑│   │   ├─ store.ts           ← Zustand 状态管理│   │   ├─ useWorkflow.ts     ← 流程逻辑 Hooks│   │   └─ ...│   └─ pages/workflow/        ← 页面布局├─ shared/│   ├─ api/                   ← 与后端交互│   ├─ ui/                    ← 通用UI组件(如 Modal、Sidebar、Tabs)

🧱 四、运行机制(前端层面)

简化流程如下:

  1. 用户拖拽节点

    • React Flow 负责渲染与节点管理;
    • 新节点定义写入 Zustand 全局 store。
  2. 节点参数配置

    • 点击节点 → 打开右侧属性面板;
    • 参数编辑后写入 store;
    • 实时校验。
  3. 连线逻辑

    • React Flow 提供 onConnect() 事件;
    • 保存连线关系,更新 DAG(有向无环图)结构。
  4. 保存/发布

    • 前端序列化工作流(节点 + 连线 + 参数);
    • 通过 API 调用后端(/api/workflows)保存。
  5. 执行可视化

    • 运行时通过 WebSocket 获取后端执行状态;
    • 动态高亮节点、显示输出结果。

🧩 五、前后端交互

功能前端调用后端模块
保存工作流POST /api/workflowsdify/server/workflow/
加载工作流GET /api/workflows/:id
执行工作流POST /api/workflows/:id/executeCelery 异步任务
实时状态WebSocket /ws/workflows/:idFastAPI WebSocket 通道

💡 六、React Flow + 自定义节点举例

例如一个“LLM 调用节点”前端定义结构:

import { Handle, Position } from 'reactflow'export default function LLMNode({ data }) {return (<div className="p-3 rounded-2xl bg-white shadow-sm border"><div className="font-semibold text-sm mb-2">LLM Node</div><div className="text-xs text-gray-500">Model: {data.model}</div><Handle type="target" position={Position.Left} /><Handle type="source" position={Position.Right} /></div>)
}

这类自定义节点在 Dify 中以多种形式存在:

  • Input node
  • LLM node
  • Tool node
  • Condition node
  • Output node
  • HTTP Request node

🔍 七、总结

维度技术说明
核心框架React + TypeScript
UI 框架TailwindCSS + Shadcn/UI
工作流引擎React Flow
状态管理Zustand
后端交互REST / WebSocket
执行引擎(后端)Python + Celery + FastAPI
主要文件目录/web/app/components/workflow/

🚀 八、可扩展方向(如果你想二开)

  • 新增节点类型:在 node-types/ 目录增加组件 + 注册节点类型;
  • 定制参数面板:扩展右侧属性表单;
  • 接入自定义 API:修改工作流执行时序;
  • 样式/布局修改:调整 React Flow 配置项(如 snap-to-grid、mini-map 等)。

在这里插入图片描述

http://www.dtcms.com/a/516188.html

相关文章:

  • 环境变量进阶:本地变量、内建命令与全局属性的深度解析
  • 《图解技术体系》Wonderful talk AI ~~Google AI
  • 咸阳网站建设培训学校国外网站 国内访问速度
  • 建设一个网站的工作方案企业信息公开网查询
  • 半导体晶圆制造关于设备制程几个核心概念及映射关系
  • 欧美购物网站排名国内自动化网站建设
  • DeepSeek-OCR: Contexts Optical Compression 详解
  • 第七章 查找——课后习题解练【数据结构(c语言版 第2版)】
  • 江西建设安全网站公司注册查询核名
  • 常用docker命令速查表
  • 响应式酒店网站模板做公司网站要多久
  • 1号店网站网页特效企业网站建设方案价位
  • spring是如何解决循环依赖的(二级缓存不行吗)?
  • 【Python高级编程】基于正则表达式的爬虫
  • 网站链接改名怎做301口碑好的网站建设商家
  • 软文代写费用昆明关键词优化
  • JAVA算法练习题day47
  • 服装外包加工网网站排名优化公司
  • linux系统中进程通信之信号
  • 求数字1-10的阶乘
  • 如何使用最简单的get请求融合众多AI API,包括ChatGPT、Grok等
  • 链表的概念和单向链表的实现
  • 2013年下半年试题二:论企业应用系统的分层架构风格
  • U 盘写写保护解决方法
  • 简约手机网站源码兴宁电子商务网站建设
  • 教程网站搭建wordpress二次元风格
  • 02-Vue 插值
  • 【NebulaGraph】Nebula Importer使用
  • 不同形态组织镊在口腔临床的适配性选择
  • 深入理解进程、线程与协程