☰
PaiAgent 企业级 AI 工作流可视化编排平台:双引擎架构、Skills 技能系统与实战部署指南
2026/10/14 6:39:39 网站建设 项目流程
  • 人工智能
  • AI Agent
  • 流程编排
  • 后端
  • 前端

【免费下载链接】PaiAgent

🔥轻量级的AI工作流编排系统,类似dify、n8n,全程使用Vibe Coding,AI工具为Qoder+CLI。涉及到的技术栈包括SpringAI、LangGraph4J、SSE、MinIO、DAG自定引擎等。

项目地址:https://gitcode.com/javabetter/PaiAgent
点击查看免费下载

PaiAgent 是一个基于 Spring Boot 3.4.1 + Java 21 + React 18 的企业级 AI 工作流可视化编排平台,通过拖拽式界面即可完成多模型、多工具节点的组合调度。本文以项目根目录 README.md 为主线,结合后端引擎、LangGraph4j 集成、Skills 技能系统与前端工作流 API 的真实源码,系统讲解其双引擎架构原理、技能系统设计与从零部署运行的完整实战流程。读完本文,你将掌握 PaiAgent 的 DAG / LangGraph 双引擎切换机制、SKILL.md 声明式技能定义与三级加载策略、SSE 实时调试链路,并能独立完成数据库初始化、环境变量配置、前后端启动与首个工作流的编排调试。

一、项目定位与核心价值

PaiAgent 定位为"企业级 AI 工作流可视化编排平台",核心理念是让 AI 能力的组合与调度变得简单高效:开发者和业务人员无需编写代码,仅通过可视化拖拽即可构建复杂的 AI 处理流程,实现多种大模型的协同工作。其项目教程、用户使用指南与开发进度分别记录在 docs/USER_GUIDE.md、docs/PROGRESS.md 与 docs/SUMMARY.md 中。

项目的主要优势体现在六个方面:

  • 零代码编排:可视化拖拽界面,无需编程即可构建复杂 AI 工作流;
  • 双引擎驱动:自研 DAG 引擎 + LangGraph4j 状态图引擎,按需切换,兼顾简洁与复杂场景;
  • 多模型统一:基于 Spring AI 框架,统一接入 OpenAI、DeepSeek、通义千问、智谱 GLM 等主流大模型;
  • Skills 技能系统:内置提示词工程技能框架,支持 YAML 前置声明式技能定义与三级渐进式加载;
  • 灵活扩展:基于插件化设计(节点执行器工厂),轻松开发自定义节点;
  • 实时调试:内置调试面板,支持 SSE 流式输出,可视化执行过程。

二、技术架构与选型

2.1 分层架构

README 给出完整的分层架构视图,自顶向下依次为:

┌─────────────────────────────────────────────────────────┐ │ 前端层 (Frontend) │ │ React 18 + TypeScript + ReactFlow + Ant Design │ │ • 可视化编辑器 • 节点面板 • 调试工具 │ └────────────────────┬────────────────────────────────────┘ │ REST API / SSE ┌────────────────────┴────────────────────────────────────┐ │ 应用层 (Backend) │ │ Spring Boot 3.4.1 + Java 21 │ │ • Controller • Service • Interceptor │ └────────────────────┬────────────────────────────────────┘ │ ┌────────────────────┴────────────────────────────────────┐ │ 核心引擎层 (Engine) │ │ • EngineSelector: 引擎路由(DAG / LangGraph) │ │ • DAGParser: 拓扑排序 + 循环检测 │ │ • LangGraph4j: 状态图编排 + 条件路由 │ │ • SkillRegistry: 技能注册中心 + 渐进式加载 │ │ • NodeExecutor: 节点执行器工厂 │ └────────────────────┬────────────────────────────────────┘ │ ┌────────────────────┴────────────────────────────────────┐ │ AI 模型层 (Spring AI) │ │ • Spring AI: OpenAI/DeepSeek/智谱 等兼容接口 │ │ • Spring AI Alibaba: 通义千问 DashScope 原生支持 │ │ • ChatClientFactory: 统一的 ChatClient 动态工厂 │ └────────────────────┬────────────────────────────────────┘ │ ┌────────────────────┴────────────────────────────────────┐ │ 数据层 (Data & Storage) │ │ • MySQL: 工作流配置、执行记录 │ │ • MinIO: 文件存储 (可选) │ └─────────────────────────────────────────────────────────┘

2.2 技术栈详情

层级技术选型版本要求说明
前端React18.x现代化 UI 框架
前端TypeScript5.x类型安全保障
前端Vite5.x高性能构建工具
前端ReactFlow最新版专业流程图库
前端Ant Design + Tailwind CSS-企业级 UI 组件
前端Zustand最新版轻量级状态管理
后端Spring Boot3.4.1企业级 Java 框架
后端Java21+LTS 长期支持版本
后端MyBatis-Plus3.5.5增强版 ORM 框架
后端Spring AI1.0.0-M5AI 模型统一调用框架
后端Spring AI Alibaba1.0.0-M6.1通义千问 DashScope 原生支持
后端MySQL8.0+关系型数据库
后端FastJSON2最新版高性能 JSON 库
后端MinIO可选对象存储服务
核心引擎自研 DAG 引擎-拓扑排序 + 循环检测
核心引擎LangGraph4j Core1.1.5状态图工作流引擎
核心引擎LangGraph4j Spring AI1.8.0-beta3LangGraph4j 与 Spring AI 集成桥接
核心引擎Skills 技能系统-声明式提示词工程框架
核心引擎EngineSelector-双引擎动态路由选择
核心引擎Spring AI ChatClient-统一 AI 模型调用接口
核心引擎ChatClientFactory-动态创建不同模型客户端

数据库初始化脚本与核心配置分别位于 backend/src/main/resources/schema.sql 与 backend/src/main/resources/application.yml。workflow表通过engine_type字段(默认dag)记录每个工作流使用的引擎类型,execution_record、execution_snapshot、execution_variable三张表分别承载执行记录、断点快照与执行变量(用于断点续执行)。

三、核心特性详解

3.1 可视化流程编辑器

基于 ReactFlow 构建的专业流程图编辑器,前端核心组件为 frontend/src/components/FlowCanvas.tsx(画布)、frontend/src/components/NodePanel.tsx(可拖拽节点面板)与 frontend/src/components/DebugDrawer.tsx(调试抽屉),支持节点拖拽、连线配置、参数编辑等完整功能。

3.2 多大模型节点支持

基于 Spring AI + Spring AI Alibaba 框架统一接入:

  • OpenAI 节点:GPT 系列模型(Spring AI OpenAI 接口)
  • DeepSeek 节点:国产大模型(OpenAI 兼容接口)
  • 通义千问节点:阿里云千问系列(Spring AI Alibaba DashScope 原生支持)
  • 智谱 AI 节点:GLM 系列模型(OpenAI 兼容接口)
  • AIPing 节点:第三方模型代理(OpenAI 兼容接口)

schema.sql中预置的节点定义还包含step(阶跃星辰)、react_agent(ReAct Agent)与tts(超拟人音频合成)等节点,并给出了每个节点的input_schema/output_schema/config_schema(JSON Schema),例如 OpenAI 节点默认模型gpt-3.5-turbo、temperature 默认0.7。

3.3 工具节点生态

  • TTS 音频合成:支持通义 Qwen3 TTS 与阶跃星辰 StepAudio 的超拟人语音生成(tts节点默认模型qwen3-tts-flash、默认音色Cherry、默认采样率24000);
  • 输入/输出节点:灵活的数据输入输出;
  • 条件分支节点:condition节点基于上游输出的 JSON 字段做条件判断,支持eq/neq/gt/gte/lt/lte/contains/notContains/startsWith/endsWith/isEmpty/isNotEmpty共 12 种操作符;
  • 自定义扩展:基于统一接口开发专属节点。

四、DAG 工作流引擎机制(源码级解析)

4.1 工作流解析与执行流程

DAG 引擎的核心位于 backend/src/main/java/com/paiagent/engine/WorkflowEngine.java 与 backend/src/main/java/com/paiagent/engine/dag/DAGParser.java,其执行流水线为:

  1. JSON 解析:WorkflowConfigParser.parse(flowData)将前端配置解析为WorkflowConfig对象(节点 + 边);
  2. 拓扑排序:DAGParser.parse(config)使用 Kahn 算法确定节点执行顺序;
  3. 循环检测:DFS 深度优先搜索检测循环依赖,一旦发现立即抛出"工作流存在循环依赖,节点: xxx"异常;
  4. 节点调度:按拓扑顺序依次执行节点,NodeExecutorFactory根据node.getType()分发到对应执行器;
  5. 数据传递:resolveNodeInput会优先聚合所有已执行前驱节点的输出作为当前节点输入,否则回退到{input: inputData};
  6. 结果记录:保存每个节点的执行结果和日志,同时写入ExecutionSnapshot快照(供断点续执行)。

4.2 Kahn 拓扑排序与 DFS 循环检测

在DAGParser中,算法分三步实现:

  • 构建依赖图:遍历边集合,构造dependencies(节点 → 其前置节点列表)与dependents(节点 → 其后继节点列表);
  • DFS 循环检测:借助visited与recStack(递归栈)两个集合做深度优先搜索,若递归过程中再次遇到递归栈中的节点即判定存在环;
  • Kahn 拓扑排序:统计每个节点的入度,将所有入度为 0 的节点入队;每弹出一个节点,将其所有后继节点的入度减 1,减为 0 时入队。若最终排序结果数量小于节点总数,说明图中仍有环,抛出运行时异常。
// 节点执行器接口(简化自 backend/src/main/java/com/paiagent/engine/executor/NodeExecutor.java) public interface NodeExecutor { Map<String, Object> execute(WorkflowNode node, Map<String, Object> input) throws Exception; default Map<String, Object> execute(WorkflowNode node, Map<String, Object> input, Consumer<ExecutionEvent> progressCallback) throws Exception { return execute(node, input); } String getSupportedNodeType(); }

4.3 数据传递与条件分支路由

DAG 引擎支持一对多、多对一的连接方式,并自动检测循环依赖防止死锁。当执行到condition节点时,ConditionNodeExecutor 会在输出中写入__selectedBranch__字段(未匹配任何条件时为"default"),随后WorkflowEngine.markSkippedNodes依据条件节点出边的sourceHandle与选中分支的匹配关系,递归标记未选中分支下游的所有节点为跳过状态——只有所有入边都来自已跳过节点时才跳过,避免误伤多入边汇聚节点。

4.4 断点续执行

DAG 引擎还支持断点续执行:resumeExecution会根据执行快照找到第一个FAILED(或未完成)的节点作为恢复起点,支持通过ResumeExecutionRequest指定startNodeId、skipSuccessNodes(跳过已成功节点)与modifiedVariables(修改执行变量后重跑),执行变量表execution_variable记录用户修改过的变量及类型(STRING/NUMBER/BOOLEAN/JSON)。前端对应 API 封装在 frontend/src/api/workflow.ts 的resumeWorkflowExecution中,默认开启skipSuccessNodes: true与useSnapshotVariables: true。

五、LangGraph4j 状态图引擎机制

5.1 双引擎选择与路由

EngineSelector 根据工作流的engineType字段自动选择执行引擎:dag路由到WorkflowEngine,langgraph路由到LangGraphWorkflowEngine,未设置或为空时默认使用 DAG 引擎以确保向后兼容。两个引擎均实现统一的 WorkflowExecutor 接口(execute/executeWithCallback/getEngineType),因此引擎切换对上层 Controller 完全透明。

// 引擎路由逻辑(简化自 EngineSelector.selectEngine) // engineType = "dag" → WorkflowEngine(DAG 引擎) // engineType = "langgraph" → LangGraphWorkflowEngine // engineType = null → DAG 引擎(默认,向后兼容)

5.2 LangGraph4j 执行流程

LangGraphWorkflowEngine 的完整执行流程如下:

  1. 配置解析:WorkflowConfigParser.parse将WorkflowConfig传入 GraphBuilder;
  2. 状态图构建:GraphBuilder 将节点/边转换为 LangGraph4jStateGraph:为每个WorkflowNodeaddNode,为每条边addEdge,并通过查找"无前置节点的节点 / 无后继节点的节点"自动设置START与END入口出口;
  3. 状态初始化:StateManager 的initializeState初始化inputData、currentInput、nodeOutputs、status、startTime五类状态键;
  4. 异步执行:compiledGraph.invoke(initialStateData)驱动图执行;
  5. 事件驱动:执行过程触发ExecutionEvent回调(workflowStart / nodeStart / nodeSuccess / nodeError / workflowComplete);
  6. 结果收集:stateManager.extractNodeResults从nodeOutputs汇总所有节点输出,构建ExecutionResponse,并写入ExecutionRecord。

5.3 NodeAdapter:零改动复用既有节点执行器

NodeAdapter 是 LangGraph 引擎与既有节点执行器之间的桥接层。它通过适配器模式将NodeExecutor包装为 LangGraph4j 的AsyncNodeAction<AgentState>:

  • 节点开始前触发nodeStart事件;
  • 从状态中取出currentInput作为节点输入,为output节点额外注入__nodeOutputs__以便汇总所有节点输出;
  • 执行executor.execute(node, currentInput, eventCallback)后,将输出写回状态的nodeOutputs,并更新currentInput为当前节点输出(传递给下一个节点)、currentNodeId为当前节点;
  • 节点异常时把状态标记为FAILED并写入errorMessage,同时触发nodeError事件。

由于节点执行逻辑完全复用,LangGraph 引擎上线无需重写任何业务代码。该设计的正确性可参考测试 backend/src/test/java/com/paiagent/engine/langgraph/LangGraphWorkflowEngineTest.java 与 backend/src/test/java/com/paiagent/engine/ConditionBranchRoutingTest.java。

5.4 状态模型

WorkflowState 统一管理工作流上下文,核心状态键包括:

状态键含义
inputData原始输入数据(字符串)
currentInput当前节点输入,节点间数据传递的载体
nodeOutputs节点 ID → 节点输出 的映射
globalContext全局上下文
status运行状态(RUNNING / SUCCESS / FAILED)
currentNodeId当前执行节点 ID

六、Skills 技能系统详解

6.1 技能文件结构

每个技能是一个独立目录,包含SKILL.md主文件和可选的reference子目录。仓库内置示例技能ai-podcast(AI 播客脚本生成),位于 backend/src/main/resources/skills/ai-podcast/:

skills/ └── ai-podcast/ ├── SKILL.md # 技能主文件(YAML Frontmatter + Markdown) └── reference/ # 引用文档目录 ├── script-template.md # 脚本模板 └── voice-guide.md # 语音风格指南

6.2 SKILL.md 格式示例

--- name: ai-podcast description: 生成专业播客脚本,包含开场白、话题展开、问答环节和结尾。适用于创建音频内容、播客脚本、对话式内容。 --- # AI 播客脚本生成 ## 执行规则 **重要**:你必须直接根据用户的提示词生成播客脚本,**绝对不要反问用户任何问题**。 ## 固定参数(不可更改) | 参数 | 固定值 | |------|--------| | 播客风格 | **双人对话**(主持人A和主持人B) | | 时长要求 | **1分钟**(约150-180字) | | 目标听众 | **程序员/技术人员** |

SkillLoader 使用正则^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$解析 YAML Frontmatter 与正文,name为必填字段,Frontmatter 支持简单的key: value键值对(自动剥离引号)。若缺少 Frontmatter 或name为空,会抛出Invalid SKILL.md format异常。

6.3 三级渐进式加载

SkillRegistry 在应用启动时(@PostConstruct init())自动扫描 classpath(classpath*:skills/*/SKILL.md)与文件系统目录(paiagent.skills.path,默认skills,支持多路径回退查找),注册到ConcurrentHashMap缓存。技能内容按需加载,节省 Token 开销:

  • 第一级 - 摘要:仅加载技能名称和描述(getSkillSummaries()返回SkillSummary(name, description)),用于列表展示;
  • 第二级 - 详情:加载完整 SKILL.md 内容(Skill.getFullContent()),用于技能执行;
  • 第三级 - 引用:按需加载 reference 目录下的文档(SkillRegistry.loadReference),并对 reference 名做白名单校验(^[a-zA-Z0-9._-]+$)与路径穿越防护(startsWith(referenceDir)校验),结果同样缓存。

在 LLM 节点执行器中,AbstractLLMNodeExecutor 对已关联技能采用"直接打包"策略:通过skillRegistry.loadAllReferences一次加载全部引用文档,再以Skill.getFullExecutionPrompt(references)生成完整执行 Prompt 嵌入系统提示词,避免 LLM 多轮函数调用,一次调用即可拿到全部上下文。

6.4 LLM Function 集成与 REST API

技能系统通过 Spring AIFunctionCallback暴露给大模型自主调用(LoadSkillDetailFunction的load_skill_detail与LoadSkillReferenceFunction的load_skill_reference),实现"渐进式披露"——大模型先看到技能摘要,需要时再调用函数拉取详情与引用文档。前端 SkillSelector 组件支持在工作流节点中选择并应用技能。

技能 REST API 由 SkillController 提供:

方法路径说明
GET/api/skills获取所有技能摘要列表
GET/api/skills/{name}获取指定技能详细内容
GET/api/skills/{name}/references/{ref}获取技能引用文档

七、LLM 节点与多模型统一调用层

7.1 ChatClient 动态工厂

ChatClientFactory 根据节点配置在运行时动态实例化不同厂商的ChatClient,支持多租户场景下每个节点独立配置 API Key / API URL / 模型的能力。其核心设计:

  • 提供商标识归一化:normalizeProvider将"open ai"、"通义千问"、"智谱"、"阶跃星辰"、"火山方舟"、"skyclaw"等别名统一映射为内部标识(openai/deepseek/qwen/step/zhipu/ai_ping/agnes/apifree/volcengine_agent_plan);
  • URL 智能归一化:normalizeBaseUrl自动剥离/v1/chat/completions、/v1后缀与尾部斜杠,兼容用户误填完整接口地址的情况;
  • 定制 ChatModel:OpenAI 兼容厂商统一走OpenAiChatModel;apifree(SkyClaw)额外放宽text/plain响应类型;volcengine_agent_plan显式覆盖为/api/plan/v3/chat/completions路径;
  • 函数注册:createClientWithFunctions通过builder.defaultFunctions(...)将 FunctionCallback 注册进 ChatClient。
// 动态创建 ChatClient(简化自 ChatClientFactory) ChatClient chatClient = chatClientFactory.createClientWithFunctions( provider, apiUrl, apiKey, model, temperature, functions); String response = chatClient.prompt().user(prompt).call().content();

7.2 AbstractLLMNodeExecutor 抽象基类

AbstractLLMNodeExecutor 采用模板方法模式,将 5 个 LLM 节点执行器的公共逻辑收敛到一处:配置提取(优先使用全局配置configId,回退节点级配置)→ 配置校验 → Skill 关联 → 系统提示构建 → 模板替换 → ChatClient 创建 → 三种执行模式(普通 / 流式 / 带函数调用,函数调用最多迭代 5 轮)→ Token 统计与输出构建。子类只需实现getNodeType()即可,例如OpenAINodeExecutor返回"openai"、DeepSeekNodeExecutor返回"deepseek"、QwenNodeExecutor返回"qwen"、ZhiPuNodeExecutor返回"zhipu"。

该执行器还支持 RAG 增强:当节点开启memoryEnabled或配置了knowledgeBaseId时,会先调用agentMemoryService.retrieve/knowledgeBaseService.searchRuntime召回记忆与知识库上下文(memoryTopK、knowledgeTopK默认 5,knowledgeScoreThreshold默认 0.2),拼接到用户提示词之前。

7.3 Prompt 模板处理

PromptTemplateService 统一处理{{variable}}模板变量替换与上下游节点参数引用映射,支持两种输入参数类型:

  • input 静态值:直接从节点配置的value字段取值;
  • reference 动态引用:从上游节点输出中按referenceNode(如llm_1.output,取.后段作为键名)动态取值,并兼容user_input存储为input键的旧格式。
// 模板替换示例 String userPrompt = promptTemplateService.processTemplate( config.getPromptTemplate(), config.getInputParams(), input);

八、SSE 实时流式调试

8.1 后端事件推送链路

ExecutionController 提供GET /api/workflows/{id}/execute/stream接口,基于SseEmitter(超时 300 秒)实现实时反馈。执行线程将Consumer<ExecutionEvent>回调注册给引擎,引擎在每个节点启动、成功、出错以及工作流完成时回调,控制器将事件按SseEmitter.event().name(event.getEventType()).data(event)推送给前端。

ExecutionEvent 定义了五类事件,字段包含eventType、nodeId、nodeName、status、message、data、timestamp:

事件类型触发时机状态
WORKFLOW_START工作流开始执行-
NODE_START节点开始执行RUNNING
NODE_PROGRESS流式生成中(携带chunk与累计文本)RUNNING
NODE_SUCCESS节点执行成功(携带输出与耗时)SUCCESS
NODE_ERROR节点执行失败FAILED
WORKFLOW_COMPLETE工作流执行完成(携带总耗时)SUCCESS / FAILED

8.2 前端 EventSource 消费

前端 frontend/src/api/workflow.ts 的executeWorkflowStream使用浏览器原生EventSource订阅上述事件,将每个事件实时渲染到 DebugDrawer 调试抽屉中,实现"输入文本 → LLM 生成 → TTS 合成 → 输出播放"全流程的可视化追踪。该接口还处理了鉴权失败(跳转登录页)与连接中断的兜底逻辑。

九、快速开始(一键启动指南)

9.1 环境要求

工具版本要求说明
Java21+推荐使用 OpenJDK 或 Oracle JDK
Node.js18+包含 npm 包管理器
MySQL8.0+数据库服务
Maven3.8+Java 项目构建工具

9.2 克隆项目与数据库初始化

git clone https://gitcode.com/javabetter/PaiAgent cd PaiAgent

创建数据库并导入初始化脚本(backend/src/main/resources/schema.sql 同时创建workflow、node_definition、execution_record、execution_snapshot、execution_variable、llm_global_config、agent_memory、mcp_tool_config、knowledge_base等表,并预置全部节点定义数据):

mysql -u root -p
CREATE DATABASE paiagent DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql -u root -p paiagent < backend/src/main/resources/schema.sql

9.3 配置环境变量

项目使用环境变量管理敏感配置,application.yml通过spring.config.import: optional:file:.env[.properties]与optional:file:backend/.env[.properties]自动导入.env文件。复制模板并编辑:

cd backend cp .env.example .env
# 必填:数据库密码(生产环境必须使用强密码) MYSQL_PASSWORD=your_strong_password_here # 其他配置按需修改 MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_USERNAME=root MYSQL_DATABASE=paiagent # JWT 密钥(生产环境必须修改!) JWT_SECRET=your_jwt_secret_key_minimum_32_characters # MinIO 凭证(如使用对象存储) MINIO_ACCESS_KEY=your_access_key MINIO_SECRET_KEY=your_secret_key

安全提示:.env文件已加入.gitignore,不会提交到版本库;.env.example是配置模板,不包含真实敏感信息;生产环境建议通过系统环境变量或配置中心注入。application.yml中还内置了 JWT 密钥兜底逻辑——本地开发未配置JWT_SECRET时会自动生成临时强密钥,但生产环境务必显式配置。

9.4 启动后端服务

cd backend ./mvnw spring-boot:run

启动成功后控制台输出Started PaiAgentApplication in X.XXX seconds。后端服务地址为http://localhost:8084(默认端口,可在.env的SERVER_PORT或 application.yml 中修改)。项目内置spring-boot-devtools,修改代码触发编译后应用会自动热重启;启动后可访问http://localhost:8084/swagger-ui.html查看 API 文档。

9.5 启动前端服务

cd frontend cp .env.example .env.local npm install npm run dev

前端通过 Vite 环境变量VITE_API_BASE_URL连接后端,默认http://localhost:8084。启动成功后可看到:

➜ Local: http://localhost:5173/

前端不能直接读取 Spring Boot 的application.yml,因此若后端端口变化,需同步调整frontend/.env.local。

9.6 首次登录与快速演示

开发环境默认账户(可在.env中通过APP_AUTH_DEFAULT_USERNAME/APP_AUTH_DEFAULT_PASSWORD修改):

配置项默认值说明
用户名admin通过APP_AUTH_DEFAULT_USERNAME配置
密码admin123通过APP_AUTH_DEFAULT_PASSWORD配置

⚠️ 安全提示:默认账户仅用于开发测试,生产环境必须修改或禁用(将两个变量都设为空值即可禁用默认账户)。

创建第一个工作流的操作路径:

  1. 登录系统:使用默认凭证登录;
  2. 创建工作流:点击「新建工作流」按钮;
  3. 拖拽节点:从左侧节点面板拖拽「输入节点」→「OpenAI节点」→「输出节点」到画布;
  4. 连接节点:按顺序连接各个节点;
  5. 配置参数:点击 OpenAI 节点,配置 API Key 和提示词;
  6. 执行调试:点击「调试」按钮,通过 SSE 实时查看执行结果。

示例:文本转语音工作流

[输入节点] → [OpenAI节点] → [TTS节点] → [输出节点] 输入文本 生成脚本 语音合成 播放音频

十、节点扩展开发指南

方式一:开发普通工具节点。实现NodeExecutor接口,注册到 NodeExecutorFactory(工厂在构造时通过@Autowired List<NodeExecutor>自动收集所有执行器并按getSupportedNodeType()注册):

public class CustomNodeExecutor implements NodeExecutor { @Override public Map<String, Object> execute(WorkflowNode node, Map<String, Object> input) { // 自定义逻辑 return output; } @Override public String getSupportedNodeType() { return "custom"; } }

方式二:开发 LLM 节点(推荐)。继承AbstractLLMNodeExecutor,自动获得 Spring AI 能力与配置提取、模板替换、流式输出等全部基础能力:

@Component public class CustomLLMNodeExecutor extends AbstractLLMNodeExecutor { @Override protected String getNodeType() { return "custom_llm"; } }

前端添加节点定义(在节点面板注册,参考 frontend/src/components/NodePanel.tsx):

const customNode = { type: 'custom', label: '自定义节点', category: 'tool' };

十一、开发路线图

11.1 已完成功能(v1.0,当前完成度 98%)

  • 基础架构搭建(Spring Boot + React + TypeScript)
  • 用户认证系统(Token 认证 + AuthInterceptor 拦截器)
  • 可视化流程编辑器(ReactFlow 集成)
  • DAG 工作流引擎(拓扑排序 + 循环检测)
  • Spring AI 框架集成(v1.0.0-M5):统一 ChatClient 调用接口,支持 OpenAI 兼容协议
  • Spring AI Alibaba 集成(v1.0.0-M6.1):通义千问 DashScope 原生支持
  • 多大模型节点:OpenAI / DeepSeek / 通义千问 / 智谱 / AIPing
  • 工具节点:输入/输出、TTS 音频合成、音频播放器组件
  • SSE 实时流式输出(调试抽屉 + 日志输出 + 结果展示)
  • 工作流 CRUD 管理与执行记录查询
  • LangGraph4j 状态图引擎:StateGraph 第二执行引擎、EngineSelector 双引擎路由、NodeAdapter 零改动复用、StateManager 统一状态管理
  • Skills 技能系统:YAML Frontmatter + Markdown 声明式定义、SkillRegistry 自动扫描缓存、三级渐进式加载、Spring AI FunctionCallback 集成、前端 SkillSelector、REST API
  • 条件分支节点(IF/ELSE 逻辑)与断点续执行能力

11.2 规划中功能

  • v1.1(近期):循环执行节点(FOR/WHILE)、更多 LLM 节点(Claude、Gemini、本地模型)、更多内置技能、集成测试完善、执行性能监控
  • v1.5(中期):子工作流调用、定时任务调度(Cron 表达式)、工作流版本管理(Git 风格)、工作流模板市场、更多工具节点(图像处理、文档解析、Web 爬虫)
  • v2.0(远期):多租户与权限管理、协作与分享、性能监控与告警、国际化支持、插件市场

十二、项目文档导航

文档类型文档链接说明
📖 使用指南docs/USER_GUIDE.md详细使用说明和最佳实践
📊 开发进度docs/PROGRESS.md项目开发阶段和完成情况
📝 项目总结docs/SUMMARY.md技术选型和实现总结
📋 完成报告docs/PROJECT_COMPLETION_REPORT.md项目交付报告
🏗️ 架构设计docs/mermaid.md系统架构可视化图表
🤖 开发指南AGENTS.mdAI Agent 开发指引

PaiAgent 采用 MIT License 开源。如需深入了解引擎实现细节,可直接阅读 EngineSelector、DAGParser、LangGraphWorkflowEngine、SkillRegistry 与 ChatClientFactory 等核心源码,以及 LangGraphWorkflowEngineTest、ConditionNodeExecutorTest 等测试用例作为行为规范参考。

  • 人工智能
  • AI Agent
  • 流程编排
  • 后端
  • 前端

【免费下载链接】PaiAgent

🔥轻量级的AI工作流编排系统,类似dify、n8n,全程使用Vibe Coding,AI工具为Qoder+CLI。涉及到的技术栈包括SpringAI、LangGraph4J、SSE、MinIO、DAG自定引擎等。

项目地址:https://gitcode.com/javabetter/PaiAgent
点击查看免费下载

相关推荐

上一篇:网盘直链下载技术解析:从痛点突破到实战应用指南
下一篇:3步实现115网盘Kodi原码播放:免下载观影解决方案

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询