diff --git a/README.md b/README.md index 80b2be9e..b74d166e 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ ### 企业级AI助手平台 -*开箱即用的全栈AI平台,支持多智能体协同、Supervisor模式编排、多种决策模型,提供先进的RAG技术和可视化流程编排能力* +*开箱即用的全栈AI平台,支持多智能体协同、Supervisor模式编排、多种决策模式、RAG技术和流程编排能力* **[English](README_EN.md)** | **[📖 使用文档](https://doc.pandarobot.chat)** | **[🚀 在线体验](https://web.pandarobot.chat)** | **[🐛 问题反馈](https://github.com/ageerle/ruoyi-ai/issues)** | **[💡 功能建议](https://github.com/ageerle/ruoyi-ai/issues)** @@ -27,17 +27,15 @@ - - ## ✨ 核心亮点 -| 模块 | 现有能力 | 扩展方向 | -|:----------:|---|------------------------| -| **模型管理** | 多模型接入(OpenAI/DeepSeek/通义/智谱)、多模态理解、Coze/DIFY/FastGPT平台集成 | 自动模式、容错机制、计费管理 | -| **知识管理** | 本地RAG + 向量库(Milvus/Weaviate) + 文档解析 | 多模态、知识出处、知识图谱、重排序 | -| **工具管理** | Mcp协议集成、Skills能力 + 可扩展工具生态 | 工具插件市场、 | -| **流程编排** | 可视化工作流设计器、节点拖拽编排、SSE流式执行,目前已经支持模型调用,邮件发送,人工审核等节点 | 更多节点类型 | -| **多智能体** | 基于Langchain4j的Agent框架、Supervisor模式编排,支持多种决策模型 | 智能体可配置 | +| 模块 | 现有能力 +|:----------:|--- +| **模型管理** | 多模型接入(OpenAI/DeepSeek/通义/智谱)、多模态理解、Coze/DIFY/FastGPT平台集成 +| **知识管理** | 本地RAG + 向量库(Milvus/Weaviate) + 文档解析 +| **工具管理** | Mcp协议集成、Skills能力 + 可扩展工具生态 +| **流程编排** | 可视化工作流设计器、节点拖拽编排、SSE流式执行,目前已经支持模型调用,邮件发送,人工审核等节点 +| **多智能体** | 基于Langchain4j的Agent框架、Supervisor模式编排,支持多种决策模型 ## 🚀 快速体验 @@ -246,30 +244,6 @@ docker-compose -f docker-compose-all.yaml restart [服务名] --- - - -## 📺 视频教程 - -
- - - - - - - -
-微信二维码
-打开抖音扫一扫
-获取免费视频教程 -
-QQ群二维码
-打开B站扫一扫
-获取免费视频教程 -
- -
-
**[⭐ 点个Star支持一下](https://github.com/ageerle/ruoyi-ai)** • **[ Fork 开始贡献](https://github.com/ageerle/ruoyi-ai/fork)** • **[📚 English](README_EN.md)** • **[📖 查看完整文档](https://doc.pandarobot.chat)** diff --git a/Dockerfile.backend b/docs/docker/ruoyi-ai/Dockerfile.backend similarity index 100% rename from Dockerfile.backend rename to docs/docker/ruoyi-ai/Dockerfile.backend diff --git a/Dockerfile.mysql b/docs/docker/ruoyi-ai/Dockerfile.mysql similarity index 100% rename from Dockerfile.mysql rename to docs/docker/ruoyi-ai/Dockerfile.mysql diff --git a/docker-compose-all.yaml b/docs/docker/ruoyi-ai/docker-compose-all.yaml similarity index 100% rename from docker-compose-all.yaml rename to docs/docker/ruoyi-ai/docker-compose-all.yaml diff --git a/docker-compose.yaml b/docs/docker/ruoyi-ai/docker-compose.yaml similarity index 100% rename from docker-compose.yaml rename to docs/docker/ruoyi-ai/docker-compose.yaml diff --git a/ruoyi-modules/ruoyi-aiflow/流程编排模块说明.md b/ruoyi-modules/ruoyi-aiflow/流程编排模块说明.md new file mode 100644 index 00000000..d65a33ba --- /dev/null +++ b/ruoyi-modules/ruoyi-aiflow/流程编排模块说明.md @@ -0,0 +1,425 @@ +# Ruoyi-AI 流程编排模块详细说明文档 + +## 概述 + +Ruoyi-AI 工作流模块是一个基于 LangGraph4j 的智能工作流引擎,支持可视化工作流设计、AI 模型集成、条件分支、人机交互等高级功能。该模块采用微服务架构,提供完整的 +RESTful API 和流式响应支持。 + +## 模块架构 + +### 1. 核心依赖 + +- **LangGraph4j**: 1.5.3 - 工作流图执行引擎 +- **LangChain4j**: 1.11.0 - AI 模型集成框架 +- **Spring Boot**: 3.5.8 - 应用框架 +- **MyBatis Plus**: 数据访问层 +- **Redis**: 缓存和状态管理 +- **OpenAPI**: API 文档 + +## 核心功能 + +### 1. 工作流管理 + +#### 1.1 工作流定义 + +- **创建工作流**: 支持自定义标题、描述、公开性设置 +- **编辑工作流**: 可视化节点编辑、连接线配置 +- **版本控制**: 支持工作流的版本管理和回滚 +- **权限管理**: 支持公开/私有工作流设置 + +#### 1.2 工作流执行 + +- **流式执行**: 基于 SSE 的实时流式响应 +- **状态管理**: 完整的执行状态跟踪 +- **错误处理**: 详细的错误信息和异常处理 +- **中断恢复**: 支持工作流中断和恢复执行 + +### 2. 节点类型 + +#### 2.1 基础节点 + +- **Start**: 开始节点,定义工作流入口 +- **End**: 结束节点,定义工作流出口 + + +#### 2.2 AI 模型节点 + +- **Answer**: 大语言模型问答节点 +- **Dalle3**: DALL-E 3 图像生成 +- **Tongyiwanx**: 通义万相图像生成 +- **Classifier**: 内容分类节点 + +#### 2.3 数据处理节点 + +- **DocumentExtractor**: 文档信息提取 +- **KeywordExtractor**: 关键词提取 +- **FaqExtractor**: 常见问题提取 +- **KnowledgeRetrieval**: 知识库检索 + +#### 2.4 控制流节点 + +- **Switcher**: 条件分支节点 +- **HumanFeedback**: 人机交互节点 + +#### 2.5 外部集成节点 + +- **Google**: Google 搜索集成 +- **MailSend**: 邮件发送 +- **HttpRequest**: HTTP 请求 +- **Template**: 模板转换 + +### 3. 数据流管理 + +#### 3.1 输入输出定义 + +```java +// 节点输入输出数据结构 +public class NodeIOData { + private String name; // 参数名称 + private NodeIODataContent content; // 参数内容 +} + +// 支持的数据类型 +public enum WfIODataTypeEnum { + TEXT, // 文本 + NUMBER, // 数字 + BOOLEAN, // 布尔值 + FILES, // 文件 + OPTIONS // 选项 +} +``` + +#### 3.2 参数引用 + +- **节点间引用**: 支持上游节点输出作为下游节点输入 +- **参数映射**: 自动处理参数名称映射 +- **类型转换**: 自动进行数据类型转换 + +## 数据库设计 + +### 1. 核心表结构 + +#### 1.1 工作流定义表 (t_workflow) + +```sql +CREATE TABLE t_workflow ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + uuid VARCHAR(32) NOT NULL DEFAULT '', + title VARCHAR(100) NOT NULL DEFAULT '', + remark TEXT NOT NULL DEFAULT '', + user_id BIGINT NOT NULL DEFAULT 0, + is_public TINYINT(1) NOT NULL DEFAULT 0, + is_enable TINYINT(1) NOT NULL DEFAULT 1, + create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + is_deleted TINYINT(1) NOT NULL DEFAULT 0 +); +``` + +#### 1.2 工作流节点表 (t_workflow_node) + +```sql +CREATE TABLE t_workflow_node ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + uuid VARCHAR(32) NOT NULL DEFAULT '', + workflow_id BIGINT NOT NULL DEFAULT 0, + workflow_component_id BIGINT NOT NULL DEFAULT 0, + user_id BIGINT NOT NULL DEFAULT 0, + title VARCHAR(100) NOT NULL DEFAULT '', + remark VARCHAR(500) NOT NULL DEFAULT '', + input_config JSON NOT NULL DEFAULT ('{}'), + node_config JSON NOT NULL DEFAULT ('{}'), + position_x DOUBLE NOT NULL DEFAULT 0, + position_y DOUBLE NOT NULL DEFAULT 0, + create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + is_deleted TINYINT(1) NOT NULL DEFAULT 0 +); +``` + +#### 1.3 工作流边表 (t_workflow_edge) + +```sql +CREATE TABLE t_workflow_edge ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + uuid VARCHAR(32) NOT NULL DEFAULT '', + workflow_id BIGINT NOT NULL DEFAULT 0, + source_node_uuid VARCHAR(32) NOT NULL DEFAULT '', + source_handle VARCHAR(32) NOT NULL DEFAULT '', + target_node_uuid VARCHAR(32) NOT NULL DEFAULT '', + create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + is_deleted TINYINT(1) NOT NULL DEFAULT 0 +); +``` + +#### 1.4 工作流运行时表 (t_workflow_runtime) + +```sql +CREATE TABLE t_workflow_runtime ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + uuid VARCHAR(32) NOT NULL DEFAULT '', + user_id BIGINT NOT NULL DEFAULT 0, + workflow_id BIGINT NOT NULL DEFAULT 0, + input JSON NOT NULL DEFAULT ('{}'), + output JSON NOT NULL DEFAULT ('{}'), + status SMALLINT NOT NULL DEFAULT 1, + status_remark VARCHAR(250) NOT NULL DEFAULT '', + create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + is_deleted TINYINT(1) NOT NULL DEFAULT 0 +); +``` + +#### 1.5 工作流组件表 (t_workflow_component) + +```sql +CREATE TABLE t_workflow_component ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + uuid VARCHAR(32) DEFAULT '' NOT NULL, + name VARCHAR(32) DEFAULT '' NOT NULL, + title VARCHAR(100) DEFAULT '' NOT NULL, + remark TEXT NOT NULL, + display_order INT DEFAULT 0 NOT NULL, + is_enable TINYINT(1) DEFAULT 0 NOT NULL, + create_time DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, + update_time DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, + is_deleted TINYINT(1) DEFAULT 0 NOT NULL +); +``` + +## API 接口 + +### 1. 工作流管理接口 + +#### 1.1 基础操作 + +```http +# 创建工作流 +POST /workflow/add +Content-Type: application/json +{ + "title": "工作流标题", + "remark": "工作流描述", + "isPublic": false +} + +# 更新工作流 +POST /workflow/update +Content-Type: application/json +{ + "uuid": "工作流UUID", + "title": "新标题", + "remark": "新描述" +} + +# 删除工作流 +POST /workflow/del/{uuid} + +# 启用/禁用工作流 +POST /workflow/enable/{uuid}?enable=true +``` + +#### 1.2 搜索和查询 + +```http +# 搜索我的工作流 +GET /workflow/mine/search?keyword=关键词&isPublic=true¤tPage=1&pageSize=10 + +# 搜索公开工作流 +GET /workflow/public/search?keyword=关键词¤tPage=1&pageSize=10 + +# 获取工作流组件列表 +GET /workflow/public/component/list +``` + +### 2. 工作流执行接口 + +#### 2.1 流式执行 + +```http +# 流式执行工作流 +POST /workflow/run +Content-Type: application/json +Accept: text/event-stream +{ + "uuid": "工作流UUID", + "inputs": [ + { + "name": "input", + "content": { + "type": 1, + "textContent": "用户输入内容" + } + } + ] +} +``` + +#### 2.2 运行时管理 + +```http +# 恢复中断的工作流 +POST /workflow/runtime/resume/{runtimeUuid} +Content-Type: application/json +{ + "feedbackContent": "用户反馈内容" +} + +# 查询工作流执行历史 +GET /workflow/runtime/page?wfUuid=工作流UUID¤tPage=1&pageSize=10 + +# 查询运行时节点详情 +GET /workflow/runtime/nodes/{runtimeUuid} + +# 清理运行时数据 +POST /workflow/runtime/clear?wfUuid=工作流UUID +``` + +### 3. 管理端接口 + +#### 3.1 工作流管理 + +```http +# 搜索所有工作流 +POST /admin/workflow/search +Content-Type: application/json +{ + "title": "搜索关键词", + "isPublic": true, + "isEnable": true +} + +# 启用/禁用工作流 +POST /admin/workflow/enable?uuid=工作流UUID&isEnable=true +``` + +## 核心实现 + +### 1. 工作流引擎 (WorkflowEngine) + +工作流引擎是整个模块的核心,负责: + +- 工作流图的构建和编译 +- 节点执行调度 +- 状态管理和持久化 +- 流式输出处理 + +```java +public class WorkflowEngine { + // 核心执行方法 + public void run(User user, List userInputs, SseEmitter sseEmitter) { + // 1. 验证工作流状态 + // 2. 创建运行时实例 + // 3. 构建状态图 + // 4. 执行工作流 + // 5. 处理流式输出 + } + + // 恢复执行方法 + public void resume(String userInput) { + // 1. 更新状态 + // 2. 继续执行 + } +} +``` + +### 2. 节点工厂 (WfNodeFactory) + +节点工厂负责根据组件类型创建对应的节点实例: + +```java +public class WfNodeFactory { + public static AbstractWfNode create(WorkflowComponent component, + WorkflowNode node, + WfState wfState, + WfNodeState nodeState) { + // 根据组件类型创建对应的节点实例 + switch (component.getName()) { + case "Answer": + return new LLMAnswerNode(component, node, wfState, nodeState); + case "Switcher": + return new SwitcherNode(component, node, wfState, nodeState); + // ... 其他节点类型 + } + } +} +``` + +### 3. 图构建器 (WorkflowGraphBuilder) + +图构建器负责将工作流定义转换为可执行的状态图: + +```java +public class WorkflowGraphBuilder { + public StateGraph build(WorkflowNode startNode) { + // 1. 构建编译节点树 + // 2. 转换为状态图 + // 3. 添加节点和边 + // 4. 处理条件分支 + // 5. 处理并行执行 + } +} +``` + +## 流式响应机制 + +### 1. SSE 事件类型 + +工作流执行过程中会发送多种类型的 SSE 事件: + +```javascript +// 节点开始执行 +[NODE_RUN_节点UUID] - 节点执行开始事件 + +// 节点输入数据 +[NODE_INPUT_节点UUID] - 节点输入数据事件 + +// 节点输出数据 +[NODE_OUTPUT_节点UUID] - 节点输出数据事件 + +// 流式内容块 +[NODE_CHUNK_节点UUID] - 流式内容块事件 + +// 等待用户输入 +[NODE_WAIT_FEEDBACK_BY_节点UUID] - 等待用户输入事件 +``` + +### 2. 流式处理流程 + +1. **初始化**: 创建工作流运行时实例 +2. **节点执行**: 逐个执行工作流节点 +3. **实时输出**: 通过 SSE 实时推送执行结果 +4. **状态更新**: 实时更新节点和工作流状态 +5. **错误处理**: 捕获并处理执行过程中的错误 + +## 扩展开发 + +### 1. 自定义节点开发 + +要开发自定义工作流节点,需要: + +1. **创建节点类**:继承 `AbstractWfNode` +2. **实现处理逻辑**:重写 `onProcess()` 方法 +3. **定义配置类**:创建节点配置类 +4. **注册组件**:在组件表中注册新组件 + +```java +public class CustomNode extends AbstractWfNode { + @Override + protected NodeProcessResult onProcess() { + // 实现自定义处理逻辑 + List outputs = new ArrayList<>(); + // ... 处理逻辑 + return NodeProcessResult.success(outputs); + } +} +``` + +### 2. 自定义组件注册 + +```sql +-- 在 t_workflow_component 表中添加新组件 +INSERT INTO t_workflow_component (uuid, name, title, remark, is_enable) +VALUES (REPLACE(UUID(), '-', ''), 'CustomNode', '自定义节点', '自定义节点描述', true); +```