FastGPT源码解析 Agent工作流编排前端详解

发布于:2025-09-05 ⋅ 阅读:(23) ⋅ 点赞:(0)

FastGPT 工作流编排的核心前端框架

ReactFlow (

reactflow: ^11.7.4

1. ReactFlow - 工作流可视化核心

import ReactFlow, { NodeProps, SelectionMode } from 'reactflow';
import 'reactflow/dist/style.css';

// 在 Flow/index.tsx 中使用
<ReactFlow
  ref={reactFlowWrapper}
  fitView
  nodes={nodes}
  edges={edges}
  nodeTypes={nodeTypes}
  edgeTypes={edgeTypes}
  onNodesChange={handleNodesChange}
  onEdgesChange={handleEdgeChange}
  onConnect={customOnConnect}
  // ... 更多配置
/>

ReactFlow 特性:

  • 节点拖拽和连接

  • 自定义节点类型

  • 边的样式和交互

  • 缩放和平移

  • 选择模式

  • 上下文菜单

2. UI 框架 - Chakra UI

"@chakra-ui/react": "2.8.1"
"@chakra-ui/icons": "2.1.1"
"@chakra-ui/next-js": "2.1.5"

3. 状态管理 - Context + Zustand

// 工作流上下文管理
import { WorkflowNodeEdgeContext, WorkflowInitContext } from '../context/workflowInitContext';
import { WorkflowEventContext } from '../context/workflowEventContext';

// 全局状态管理
"zustand": "^4.3.5"
"use-context-selector": "^1.4.4"

4. 自定义节点类型

FastGPT 定义了丰富的节点类型:

const nodeTypes: Record<FlowNodeTypeEnum, any> = {
  [FlowNodeTypeEnum.chatNode]: NodeSimple,           // AI对话节点
  [FlowNodeTypeEnum.datasetSearchNode]: NodeSimple,  // 知识库搜索
  [FlowNodeTypeEnum.httpRequest468]: NodeHttp,       // HTTP请求
  [FlowNodeTypeEnum.ifElseNode]: NodeIfElse,         // 条件判断
  [FlowNodeTypeEnum.code]: NodeCode,                 // 代码执行
  [FlowNodeTypeEnum.loop]: NodeLoop,                 // 循环节点
  // ... 30+ 种节点类型
};

5. 动态加载优化

// 使用 Next.js dynamic 实现按需加载
const NodeSimple = dynamic(() => import('./nodes/NodeSimple'));
const NodeHttp = dynamic(() => import('./nodes/NodeHttp'));

工作流编排架构

节点系统

  • 输入输出: 每个节点有标准化的输入输出接口

  • 连接器: Handle 组件处理节点间的连接

  • 模板系统: 预定义的节点模板和配置

交互功能

  • 拖拽创建: 从模板面板拖拽创建节点

  • 可视化连接: 通过拖拽连接节点

  • 实时预览: 支持工作流调试和预览

  • 上下文菜单: 右键操作菜单

数据流

用户操作 → ReactFlow事件 → Context状态更新 → 节点重渲染 → 后端同步

前端总结

FastGPT 工作流编排前端主要基于 ReactFlow 框架实现,这是一个专门用于构建节点编辑器和工作流的 React 库。配合 Chakra UI 提供美观的界面,使用 Context 和 Zustand 进行状态管理,通过 Next.js 的动态加载优化性能。提供了强大的可视化工作流编排能力,支持复杂的 AI 应用逻辑构建。


网站公告

今日签到

点亮在社区的每一天
去签到