PaiAgent 是一个企业级的 AI 工作流可视化编排平台,让 AI 能力的组合和调度变得简单高效。通过直观的拖拽式界面,开发者和业务人员都能快速构建复杂的 AI 处理流程,无需编写代码即可实现多种大模型的协同工作。
- 🎯 零代码编排:可视化拖拽界面,无需编程即可构建复杂 AI 工作流
- 🚀 高性能引擎:自研轻量级 DAG 引擎,支持拓扑排序和智能循环检测
- 🔌 多模型统一:基于 Spring AI 框架,统一接入 OpenAI、DeepSeek、通义千问等主流大模型
- 🛠️ 灵活扩展:基于插件化设计,轻松开发自定义节点满足个性化需求
- 🐛 实时调试:内置调试面板,支持 SSE 流式输出,可视化执行过程
- 📦 开箱即用:完整的前后端解决方案,快速部署到生产环境
基于 ReactFlow 构建的专业流程图编辑器,支持节点拖拽、连线配置、参数编辑等完整功能。
基于 Spring AI + Spring AI Alibaba 框架统一接入:
- OpenAI 节点:GPT-5 等模型(Spring AI OpenAI 接口)
- DeepSeek 节点:国产大模型(OpenAI 兼容接口)
- 通义千问节点:阿里云千问系列(Spring AI Alibaba DashScope 原生支持)
- 智谱 AI 节点:GLM 系列模型(OpenAI 兼容接口)
- AIPing 节点:第三方模型代理(OpenAI 兼容接口)
- TTS 音频合成:超拟人语音生成
- 输入/输出节点:灵活的数据输入输出
- 自定义扩展:基于统一接口开发专属节点
- 拓扑排序:基于 Kahn 算法的节点调度
- 循环检测:DFS 深度优先搜索防止死循环
- 数据流转:节点间智能数据传递机制
- 执行监控:完整的执行日志和结果记录
| 场景类别 | 具体应用 | 适用对象 |
|---|---|---|
| 📝 内容生成 | 批量文章生成、多语言翻译、内容改写润色 | 内容创作者、营销团队 |
| 💬 智能客服 | 多轮对话流程、意图识别与智能响应 | 客服团队、产品经理 |
| 📊 数据处理 | 文本分析、信息抽取、数据清洗转换 | 数据分析师、研发团队 |
| 🎵 音视频处理 | 语音合成、字幕生成、音频转写 | 内容团队、教育行业 |
| ⚙️ 流程自动化 | 报告生成、邮件自动回复、定时任务 | 运营团队、企业用户 |
┌─────────────────────────────────────────────────────────┐
│ 前端层 (Frontend) │
│ React 18 + TypeScript + ReactFlow + Ant Design │
│ • 可视化编辑器 • 节点面板 • 调试工具 │
└────────────────────┬────────────────────────────────────┘
│ REST API / SSE
┌────────────────────┴────────────────────────────────────┐
│ 应用层 (Backend) │
│ Spring Boot 3.4.1 + Java 21 │
│ • Controller • Service • Interceptor │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────┴────────────────────────────────────┐
│ 核心引擎层 (Engine) │
│ • WorkflowEngine: 工作流调度引擎 │
│ • DAGParser: 拓扑排序 + 循环检测 │
│ • NodeExecutor: 节点执行器工厂 │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────┴────────────────────────────────────┐
│ AI 模型层 (Spring AI) │
│ • Spring AI: OpenAI/DeepSeek/智谱 等兼容接口 │
│ • Spring AI Alibaba: 通义千问 DashScope 原生支持 │
│ • ChatClientFactory: 统一的 ChatClient 动态工厂 │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────┴────────────────────────────────────┐
│ 数据层 (Data & Storage) │
│ • MySQL: 工作流配置、执行记录 │
│ • MinIO: 文件存储 (可选) │
└─────────────────────────────────────────────────────────┘
| 层级 | 技术选型 | 版本要求 | 说明 |
| 前端 | React | 18.x | 现代化 UI 框架 |
| TypeScript | 5.x | 类型安全保障 | |
| Vite | 5.x | 高性能构建工具 | |
| ReactFlow | 最新版 | 专业流程图库 | |
| Ant Design + Tailwind CSS | - | 企业级 UI 组件 | |
| Zustand | 最新版 | 轻量级状态管理 | |
| 后端 | Spring Boot | 3.4.1 | 企业级 Java 框架 |
| Java | 21+ | LTS 长期支持版本 | |
| MyBatis-Plus | 3.5.5 | 增强版 ORM 框架 | |
| Spring AI | 1.0.0-M5 | AI 模型统一调用框架 | |
| Spring AI Alibaba | 1.0.0-M6.1 | 通义千问 DashScope 原生支持 | |
| MySQL | 8.0+ | 关系型数据库 | |
| FastJSON2 | 最新版 | 高性能 JSON 库 | |
| MinIO | 可选 | 对象存储服务 | |
| 核心引擎 | 自研 DAG 引擎 | - | 工作流编排核心 |
| Kahn 拓扑排序 | - | 节点依赖分析 | |
| DFS 循环检测 | - | 防止工作流死锁 | |
| Spring AI ChatClient | - | 统一 AI 模型调用接口 | |
| ChatClientFactory | - | 动态创建不同模型客户端 |
PaiAgent-one/
├── backend/ # Spring Boot 后端服务
│ ├── src/main/
│ │ ├── java/com/paiagent/
│ │ │ ├── engine/ # 🎯 DAG 工作流引擎(核心)
│ │ │ │ ├── WorkflowEngine.java # 工作流编排引擎
│ │ │ │ ├── dag/DAGParser.java # 拓扑排序+循环检测
│ │ │ │ ├── llm/ # LLM 调用层(Spring AI)
│ │ │ │ │ ├── ChatClientFactory.java # ChatClient 动态工厂
│ │ │ │ │ ├── PromptTemplateService.java # 提示词模板处理
│ │ │ │ │ └── LLMNodeConfig.java # LLM 节点配置
│ │ │ │ ├── executor/ # 节点执行器
│ │ │ │ │ ├── NodeExecutor.java # 执行器接口
│ │ │ │ │ ├── NodeExecutorFactory.java # 工厂模式
│ │ │ │ │ └── impl/ # 具体实现
│ │ │ │ │ ├── AbstractLLMNodeExecutor.java # LLM 抽象基类
│ │ │ │ │ ├── InputNodeExecutor.java
│ │ │ │ │ ├── OutputNodeExecutor.java
│ │ │ │ │ ├── OpenAINodeExecutor.java
│ │ │ │ │ ├── DeepSeekNodeExecutor.java
│ │ │ │ │ ├── QwenNodeExecutor.java
│ │ │ │ │ ├── ZhiPuNodeExecutor.java
│ │ │ │ │ ├── AIPingNodeExecutor.java
│ │ │ │ │ └── TTSNodeExecutor.java
│ │ │ │ └── model/ # 数据模型
│ │ │ ├── controller/ # REST API 接口层
│ │ │ ├── service/ # 业务逻辑层
│ │ │ ├── mapper/ # MyBatis-Plus 数据访问层
│ │ │ ├── entity/ # 数据库实体
│ │ │ ├── dto/ # 数据传输对象
│ │ │ ├── config/ # 配置类
│ │ │ ├── interceptor/ # 拦截器(认证)
│ │ │ └── common/ # 通用工具
│ │ └── resources/
│ │ ├── application.yml # 应用配置
│ │ └── schema.sql # 数据库初始化脚本
│ └── pom.xml # Maven 依赖配置
│
├── frontend/ # React 前端应用
│ ├── src/
│ │ ├── components/ # 🎨 核心组件
│ │ │ ├── FlowCanvas.tsx # ReactFlow 流程编辑器
│ │ │ ├── NodePanel.tsx # 可拖拽节点面板
│ │ │ ├── DebugDrawer.tsx # 调试抽屉面板
│ │ │ └── AudioPlayer.tsx # 音频播放器
│ │ ├── pages/ # 页面组件
│ │ │ ├── LoginPage.tsx # 登录页
│ │ │ ├── MainPage.tsx # 工作流列表页
│ │ │ └── EditorPage.tsx # 工作流编辑器页
│ │ ├── store/ # Zustand 状态管理
│ │ │ ├── authStore.ts # 用户认证状态
│ │ │ └── workflowStore.ts # 工作流编辑状态
│ │ ├── api/ # API 调用层
│ │ ├── utils/ # 工具函数
│ │ └── App.tsx # 应用入口
│ ├── package.json # NPM 依赖配置
│ └── vite.config.ts # Vite 构建配置
│
├── docs/ # 📚 项目文档
│ ├── README.md # 项目概览(当前文件)
│ ├── USER_GUIDE.md # 用户使用指南
│ ├── PROGRESS.md # 开发进度追踪
│ ├── SUMMARY.md # 项目技术总结
│ ├── AGENTS.md # AI Agent 开发指引
│ └── mermaid.md # 架构可视化图表
│
└── .gitignore # Git 忽略配置
在开始之前,请确保您的开发环境满足以下要求:
| 工具 | 版本要求 | 说明 |
|---|---|---|
| Java | 21+ | 推荐使用 OpenJDK 或 Oracle JDK |
| Node.js | 18+ | 包含 npm 包管理器 |
| MySQL | 8.0+ | 数据库服务 |
| Maven | 3.8+ | Java 项目构建工具 |
git clone https://github.com/yourusername/PaiAgent-one.git
cd PaiAgent-one2.1 创建数据库
mysql -u root -pCREATE DATABASE paiagent DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;2.2 导入初始化脚本
mysql -u root -p paiagent < backend/src/main/resources/schema.sql2.3 配置数据库连接
编辑 backend/src/main/resources/application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/paiagent?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: your_password # 修改为您的数据库密码cd backend
./mvnw spring-boot:run✅ 后端服务启动成功后,您将看到:
Started PaiAgentApplication in X.XXX seconds
后端服务地址:http://localhost:8080
打开新的终端窗口:
cd frontend
npm install
npm run dev✅ 前端服务启动成功后,您将看到:
➜ Local: http://localhost:5173/
| 服务 | 地址 | 说明 |
|---|---|---|
| 🌐 前端应用 | http://localhost:5173 | 主要操作界面 |
| 🔧 后端 API | http://localhost:8080 | REST API 服务 |
| 📚 API 文档 | http://localhost:8080/swagger-ui.html | Swagger 接口文档 |
默认登录凭证:
- 用户名:
admin - 密码:
123
创建您的第一个工作流:
- 登录系统:使用默认凭证登录
- 创建工作流:点击「新建工作流」按钮
- 拖拽节点:从左侧节点面板拖拽「输入节点」→「OpenAI节点」→「输出节点」到画布
- 连接节点:按顺序连接各个节点
- 配置参数:点击 OpenAI 节点,配置 API Key 和提示词
- 执行调试:点击「调试」按钮,查看执行结果
示例:文本转语音工作流
[输入节点] → [OpenAI节点] → [TTS节点] → [输出节点]
输入文本 生成脚本 语音合成 播放音频
- ✅ 基础架构搭建(Spring Boot + React + TypeScript)
- ✅ 用户认证系统(Token 认证 + 拦截器)
- ✅ 可视化流程编辑器(ReactFlow 集成)
- ✅ DAG 工作流引擎(拓扑排序 + 循环检测)
- ✅ Spring AI 框架集成(v1.0.0-M5)
- 统一的 ChatClient 调用接口
- 支持 OpenAI 兼容协议(OpenAI/DeepSeek/智谱/AIPing)
- ✅ Spring AI Alibaba 集成(v1.0.0-M6.1)
- 通义千问 DashScope 原生支持
- 阿里云 Qwen 系列模型接入
- ✅ 多大模型节点支持
- OpenAI 节点(GPT 系列)
- DeepSeek 节点
- 通义千问节点
- 智谱 AI 节点
- AIPing 节点
- ✅ 工具节点实现
- 输入/输出节点
- TTS 音频合成节点
- 音频播放器组件
- ✅ SSE 实时流式输出(调试抽屉 + 日志输出 + 结果展示)
- ✅ 工作流 CRUD 管理
- ✅ 执行记录查询
当前完成度:95% 🎉
v1.1 版本(近期)
- 🔄 条件分支节点(IF/ELSE 逻辑)
- 🔁 循环执行节点(FOR/WHILE 循环)
- 📝 更多 LLM 节点接入(Claude、Gemini、本地模型)
- 🧪 集成测试完善
- 📊 执行性能监控
v1.5 版本(中期)
- 🔗 子工作流调用(工作流复用)
- ⏰ 定时任务调度(Cron 表达式)
- 📦 工作流版本管理(Git 风格)
- 🎨 工作流模板市场
- 🖼️ 更多工具节点(图像处理、文档解析、Web爬虫)
v2.0 版本(远期)
- 👥 多租户与权限管理
- 🤝 协作与分享功能
- 📈 性能监控与告警
- 🌍 国际化支持(多语言)
- 🔌 插件市场(第三方节点)
| 文档类型 | 文档链接 | 说明 |
|---|---|---|
| 📖 使用指南 | USER_GUIDE.md | 详细使用说明和最佳实践 |
| 📊 开发进度 | PROGRESS.md | 项目开发阶段和完成情况 |
| 📝 项目总结 | SUMMARY.md | 技术选型和实现总结 |
| 📋 完成报告 | PROJECT_COMPLETION_REPORT.md | 项目交付报告 |
| 🏗️ 架构设计 | mermaid.md | 系统架构可视化图表 |
| 🤖 开发指南 | AGENTS.md | AI Agent 开发指引 |
节点类型
- 输入节点:接收外部输入数据,作为工作流的起点
- 输出节点:输出工作流执行结果,作为工作流的终点
- LLM 节点:调用大语言模型进行文本生成、理解等任务
- 工具节点:执行特定功能,如 TTS 语音合成、图像处理等
连线规则
- 节点之间通过有向边连接,表示数据流向
- 支持一对多、多对一的连接方式
- 自动检测循环依赖,防止死锁
工作流解析流程
- JSON 解析:将前端配置解析为 WorkflowConfig 对象
- 拓扑排序:使用 Kahn 算法确定节点执行顺序
- 循环检测:DFS 深度优先搜索检测循环依赖
- 节点调度:按拓扑顺序依次执行节点
- 数据传递:上游节点输出作为下游节点输入
- 结果记录:保存每个节点的执行结果和日志
数据传递机制
// 节点执行器接口
public interface NodeExecutor {
Map<String, Object> execute(WorkflowNode node, Map<String, Object> input);
}
// LLM 节点通过 Spring AI ChatClient 统一调用
ChatClient chatClient = chatClientFactory.createClient(nodeType, apiUrl, apiKey, model, temperature);
String response = chatClient.prompt().user(prompt).call().content();方式一:开发普通工具节点
- 实现 NodeExecutor 接口
public class CustomNodeExecutor implements NodeExecutor {
@Override
public Map<String, Object> execute(WorkflowNode node, Map<String, Object> input) {
// 自定义逻辑
return output;
}
}- 注册到工厂
NodeExecutorFactory.register("custom", new CustomNodeExecutor());方式二:开发 LLM 节点(推荐)
// 继承 AbstractLLMNodeExecutor,自动获得 Spring AI 能力
@Component
public class CustomLLMNodeExecutor extends AbstractLLMNodeExecutor {
@Override
protected String getNodeType() {
return "custom_llm";
}
}- 前端添加节点定义
const customNode = {
type: 'custom',
label: '自定义节点',
category: 'tool'
};项目名称:PaiAgent - 企业级 AI 工作流编排平台
项目描述:基于可视化流程编辑器的 AI Agent 工作流平台,支持用户通过拖拽方式编排多种大模型(DeepSeek、通义千问等)和工具节点,使用自研 DAG 引擎按拓扑顺序执行工作流,实现复杂 AI 任务的自动化编排与执行。
技术栈:Java 21、Spring Boot 3.4.1、Spring AI 1.0.0
核心职责:
- 基于 Spring AI 框架重构 LLM 通信层,采用工厂模式+模板方法模式设计 ChatClientFactory 动态工厂和 AbstractLLMNodeExecutor 抽象基类,将 5 个 LLM 节点执行器的重复代码从 800+行精简至 75 行
- 设计动态 ChatClient 创建机制,支持运行时根据工作流节点配置(apiKey/apiUrl/model)动态实例化不同厂商的 ChatClient,实现多租户场景下每个节点独立配置的能力
- 抽取 PromptTemplateService 公共服务,统一处理
{{variable}}模板变量替换和上下游节点参数引用映射,支持 input 静态值和 reference 动态引用两种参数类型 - 基于 Spring AI 的 Flux 响应式流实现 LLM 流式输出,通过 SSE 实时推送生成进度到前端,配合现有 ExecutionEvent 事件机制,用户可实时查看 AI 生成过程
我们欢迎所有形式的贡献,包括但不限于:
- 🐛 提交 Bug 报告
- 💡 提出新功能建议
- 📝 改进文档
- 🔧 提交代码修复
- ⭐ Star 项目支持我们
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
- 后端:遵循阿里巴巴 Java 开发手册
- 前端:遵循 Airbnb React/JSX 风格指南
- 提交信息:使用约定式提交(Conventional Commits)
- 📬 GitHub Issues:问题反馈和功能建议
- 💭 GitHub Discussions:技术讨论和经验分享
- 📖 官方文档:查看 USER_GUIDE.md 获取完整使用指南
- 项目维护者:@itwanger
- 邮箱:项目相关问题请通过 GitHub Issues 提交
本项目采用 MIT License 开源协议。
感谢所有为本项目做出贡献的开发者!
如果这个项目对您有帮助,请点击 ⭐ Star 支持我们!


