feat: 全新智能体功能

- 基于先进智能体框架,增加智能体编排功能
- 增加智能体聊天,并对接持久化
This commit is contained in:
2026-05-25 11:42:48 +08:00
parent 6c3d98eaac
commit 72df00f25b
168 changed files with 22045 additions and 400 deletions

View File

@@ -52,6 +52,10 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>tech.easyflow</groupId>
<artifactId>easyflow-module-agent</artifactId>
</dependency>
<dependency>
<groupId>tech.easyflow</groupId>
<artifactId>easyflow-module-auth</artifactId>

View File

@@ -0,0 +1,83 @@
CREATE TABLE IF NOT EXISTS `tb_agent_category` (
`id` BIGINT NOT NULL COMMENT 'ID',
`tenant_id` BIGINT NULL COMMENT '租户ID',
`category_name` VARCHAR(128) NOT NULL COMMENT '分类名称',
`sort_no` INT DEFAULT 0 COMMENT '排序',
`status` INT DEFAULT 1 COMMENT '状态',
`created` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` BIGINT NULL COMMENT '创建人',
`modified` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`modified_by` BIGINT NULL COMMENT '修改人',
PRIMARY KEY (`id`),
KEY `idx_agent_category_tenant` (`tenant_id`, `status`, `sort_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Agent 分类';
CREATE TABLE IF NOT EXISTS `tb_agent` (
`id` BIGINT NOT NULL COMMENT 'ID',
`tenant_id` BIGINT NULL COMMENT '租户ID',
`dept_id` BIGINT NULL COMMENT '部门ID',
`name` VARCHAR(128) NOT NULL COMMENT 'Agent 名称',
`description` VARCHAR(1024) NULL COMMENT '描述',
`avatar` VARCHAR(512) NULL COMMENT '头像',
`category_id` BIGINT NULL COMMENT '分类ID',
`model_id` BIGINT NULL COMMENT '模型ID',
`model_config_json` JSON NULL COMMENT '模型配置',
`generation_config_json` JSON NULL COMMENT '生成参数配置',
`prompt_config_json` JSON NULL COMMENT '提示词配置',
`memory_config_json` JSON NULL COMMENT '记忆配置',
`execution_config_json` JSON NULL COMMENT '运行配置',
`status` INT DEFAULT 1 COMMENT '数据状态',
`visibility_scope` VARCHAR(32) NULL COMMENT '可见范围',
`publish_status` VARCHAR(32) DEFAULT 'DRAFT' COMMENT '发布状态',
`current_approval_instance_id` BIGINT NULL COMMENT '当前审批实例ID',
`published_snapshot_json` JSON NULL COMMENT '已发布快照',
`published_at` DATETIME NULL COMMENT '发布时间',
`published_by` BIGINT NULL COMMENT '发布人',
`created` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` BIGINT NULL COMMENT '创建人',
`modified` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`modified_by` BIGINT NULL COMMENT '修改人',
PRIMARY KEY (`id`),
KEY `idx_agent_tenant_category` (`tenant_id`, `category_id`, `status`),
KEY `idx_agent_publish_status` (`publish_status`),
KEY `idx_agent_created_by` (`created_by`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Agent';
CREATE TABLE IF NOT EXISTS `tb_agent_tool_binding` (
`id` BIGINT NOT NULL COMMENT 'ID',
`tenant_id` BIGINT NULL COMMENT '租户ID',
`agent_id` BIGINT NOT NULL COMMENT 'Agent ID',
`tool_type` VARCHAR(32) NOT NULL COMMENT '工具类型',
`target_id` BIGINT NOT NULL COMMENT '目标资源ID',
`tool_name` VARCHAR(128) NULL COMMENT '工具名称',
`enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`hitl_enabled` TINYINT(1) DEFAULT 0 COMMENT '是否启用工具执行前确认',
`hitl_config_json` JSON NULL COMMENT 'HITL 配置',
`options_json` JSON NULL COMMENT '选项',
`sort_no` INT DEFAULT 0 COMMENT '排序',
`created` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` BIGINT NULL COMMENT '创建人',
`modified` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`modified_by` BIGINT NULL COMMENT '修改人',
PRIMARY KEY (`id`),
KEY `idx_agent_tool_agent` (`agent_id`, `enabled`, `sort_no`),
KEY `idx_agent_tool_target` (`tool_type`, `target_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Agent 工具绑定';
CREATE TABLE IF NOT EXISTS `tb_agent_knowledge_binding` (
`id` BIGINT NOT NULL COMMENT 'ID',
`tenant_id` BIGINT NULL COMMENT '租户ID',
`agent_id` BIGINT NOT NULL COMMENT 'Agent ID',
`knowledge_id` BIGINT NOT NULL COMMENT '知识库ID',
`retrieval_mode` VARCHAR(32) NULL COMMENT '检索模式',
`enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`options_json` JSON NULL COMMENT '选项',
`sort_no` INT DEFAULT 0 COMMENT '排序',
`created` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` BIGINT NULL COMMENT '创建人',
`modified` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`modified_by` BIGINT NULL COMMENT '修改人',
PRIMARY KEY (`id`),
KEY `idx_agent_knowledge_agent` (`agent_id`, `enabled`, `sort_no`),
KEY `idx_agent_knowledge_target` (`knowledge_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Agent 知识库绑定';

View File

@@ -0,0 +1,210 @@
SET NAMES utf8mb4;
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
SELECT
367300000000000001, 0, 0, 'menus.ai.agents', '/ai/agents', '/ai/agents/AgentList', 'lucide:bot',
1, '', 2, 0, '2026-05-20 10:00:00', 1, '2026-05-20 10:00:00', 1, '管理端 Agent 编排菜单'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367300000000000001
);
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
SELECT
367300000000000011, 367300000000000001, 1, '查询', '', '', '',
0, '/api/v1/agent/query', 1, 0, '2026-05-20 10:00:00', 1, '2026-05-20 10:00:00', 1, 'Agent-查询'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367300000000000011
);
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
SELECT
367300000000000012, 367300000000000001, 1, '详情', '', '', '',
0, '/api/v1/agent/getDetail', 2, 0, '2026-05-20 10:00:00', 1, '2026-05-20 10:00:00', 1, 'Agent-详情'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367300000000000012
);
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
SELECT
367300000000000013, 367300000000000001, 1, '保存', '', '', '',
0, '/api/v1/agent/save', 3, 0, '2026-05-20 10:00:00', 1, '2026-05-20 10:00:00', 1, 'Agent-保存'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367300000000000013
);
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
SELECT
367300000000000014, 367300000000000001, 1, '更新', '', '', '',
0, '/api/v1/agent/update', 4, 0, '2026-05-20 10:00:00', 1, '2026-05-20 10:00:00', 1, 'Agent-更新'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367300000000000014
);
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
SELECT
367300000000000015, 367300000000000001, 1, '删除', '', '', '',
0, '/api/v1/agent/remove', 5, 0, '2026-05-20 10:00:00', 1, '2026-05-20 10:00:00', 1, 'Agent-删除'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367300000000000015
);
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
SELECT
367300000000000016, 367300000000000001, 1, '发布', '', '', '',
0, '/api/v1/agent/submitPublishApproval', 6, 0, '2026-05-20 10:00:00', 1, '2026-05-20 10:00:00', 1, 'Agent-发布审批'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367300000000000016
);
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
SELECT
367300000000000017, 367300000000000001, 1, '下线', '', '', '',
0, '/api/v1/agent/submitOfflineApproval', 7, 0, '2026-05-20 10:00:00', 1, '2026-05-20 10:00:00', 1, 'Agent-下线审批'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367300000000000017
);
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
SELECT
367300000000000018, 367300000000000001, 1, '删除审批', '', '', '',
0, '/api/v1/agent/submitDeleteApproval', 8, 0, '2026-05-20 10:00:00', 1, '2026-05-20 10:00:00', 1, 'Agent-删除审批'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367300000000000018
);
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
SELECT
367300000000000019, 367300000000000001, 1, '工具绑定', '', '', '',
0, '/api/v1/agent/toolBinding/update', 9, 0, '2026-05-20 10:00:00', 1, '2026-05-20 10:00:00', 1, 'Agent-工具绑定更新'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367300000000000019
);
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
SELECT
367300000000000020, 367300000000000001, 1, '知识绑定', '', '', '',
0, '/api/v1/agent/knowledgeBinding/update', 10, 0, '2026-05-20 10:00:00', 1, '2026-05-20 10:00:00', 1, 'Agent-知识库绑定更新'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367300000000000020
);
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
SELECT 367300000000000101, 1, 367300000000000001
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367300000000000001
);
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
SELECT 367300000000000111, 1, 367300000000000011
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367300000000000011
);
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
SELECT 367300000000000112, 1, 367300000000000012
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367300000000000012
);
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
SELECT 367300000000000113, 1, 367300000000000013
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367300000000000013
);
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
SELECT 367300000000000114, 1, 367300000000000014
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367300000000000014
);
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
SELECT 367300000000000115, 1, 367300000000000015
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367300000000000015
);
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
SELECT 367300000000000116, 1, 367300000000000016
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367300000000000016
);
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
SELECT 367300000000000117, 1, 367300000000000017
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367300000000000017
);
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
SELECT 367300000000000118, 1, 367300000000000018
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367300000000000018
);
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
SELECT 367300000000000119, 1, 367300000000000019
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367300000000000019
);
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
SELECT 367300000000000120, 1, 367300000000000020
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367300000000000020
);

View File

@@ -0,0 +1,73 @@
CREATE TABLE IF NOT EXISTS `tb_agent_session` (
`id` BIGINT NOT NULL COMMENT 'ID',
`tenant_id` BIGINT NULL COMMENT '租户ID',
`agent_id` BIGINT NULL COMMENT 'Agent ID',
`chat_session_id` BIGINT NULL COMMENT '聊天会话ID',
`runtime_session_id` VARCHAR(128) NOT NULL COMMENT '运行时会话ID',
`session_key` VARCHAR(255) NOT NULL COMMENT 'AgentScope session key',
`state_json` JSON NULL COMMENT 'AgentScope session state envelope',
`version` BIGINT NOT NULL DEFAULT 0 COMMENT '版本号',
`cache_version` BIGINT NOT NULL DEFAULT 0 COMMENT '缓存版本号',
`last_access_at` DATETIME NULL COMMENT '最后访问时间',
`expires_at` DATETIME NULL COMMENT '过期时间',
`created` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` BIGINT NULL COMMENT '创建人',
`modified` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`modified_by` BIGINT NULL COMMENT '修改人',
`is_deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_agent_session_key` (`agent_id`, `session_key`),
KEY `idx_agent_session_chat` (`chat_session_id`),
KEY `idx_agent_session_runtime` (`runtime_session_id`),
KEY `idx_agent_session_modified` (`modified`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AgentScope 会话状态';
CREATE TABLE IF NOT EXISTS `tb_agent_hitl_pending` (
`id` BIGINT NOT NULL COMMENT 'ID',
`tenant_id` BIGINT NULL COMMENT '租户ID',
`agent_id` BIGINT NULL COMMENT 'Agent ID',
`chat_session_id` BIGINT NULL COMMENT '聊天会话ID',
`runtime_session_id` VARCHAR(128) NULL COMMENT '运行时会话ID',
`request_id` VARCHAR(64) NULL COMMENT '运行请求ID',
`resume_token` VARCHAR(128) NOT NULL COMMENT '恢复令牌',
`tool_call_id` VARCHAR(128) NULL COMMENT '工具调用ID',
`tool_name` VARCHAR(128) NULL COMMENT '工具名称',
`tool_input_json` JSON NULL COMMENT '工具入参',
`status` VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT '状态',
`reject_reason` VARCHAR(1024) NULL COMMENT '拒绝原因',
`expires_at` DATETIME NULL COMMENT '过期时间',
`consumed_at` DATETIME NULL COMMENT '消费时间',
`metadata_json` JSON NULL COMMENT '元数据',
`created` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` BIGINT NULL COMMENT '创建人',
`modified` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`modified_by` BIGINT NULL COMMENT '修改人',
`is_deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_agent_hitl_resume_token` (`resume_token`),
KEY `idx_agent_hitl_session_status` (`chat_session_id`, `status`, `expires_at`),
KEY `idx_agent_hitl_request` (`request_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Agent 工具审批挂起态';
CREATE TABLE IF NOT EXISTS `tb_agent_run_event` (
`id` BIGINT NOT NULL COMMENT 'ID',
`tenant_id` BIGINT NULL COMMENT '租户ID',
`agent_id` BIGINT NULL COMMENT 'Agent ID',
`chat_session_id` BIGINT NULL COMMENT '聊天会话ID',
`round_id` BIGINT NULL COMMENT '聊天轮次ID',
`round_no` INT NULL COMMENT '聊天轮次序号',
`variant_index` INT NOT NULL DEFAULT 1 COMMENT '答案版本序号',
`request_id` VARCHAR(64) NULL COMMENT '运行请求ID',
`event_id` VARCHAR(64) NULL COMMENT '运行事件ID',
`event_type` VARCHAR(64) NOT NULL COMMENT '运行事件类型',
`event_phase` VARCHAR(64) NULL COMMENT '运行事件阶段',
`tool_call_id` VARCHAR(128) NULL COMMENT '工具调用ID',
`payload_json` JSON NULL COMMENT '事件载荷',
`metadata_json` JSON NULL COMMENT '事件元数据',
`created` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` BIGINT NULL COMMENT '创建人',
PRIMARY KEY (`id`),
KEY `idx_agent_event_session_round` (`chat_session_id`, `round_id`, `created`, `id`),
KEY `idx_agent_event_request` (`request_id`, `created`, `id`),
KEY `idx_agent_event_type` (`event_type`, `created`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Agent 运行事件摘要';

View File

@@ -0,0 +1,14 @@
SET NAMES utf8mb4;
INSERT INTO `tb_sys_menu` (
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
)
VALUES
(367300000000000002, 0, 0, '智能体聊天', '/ai/agent-chat', '/ai/agent-chat/index', 'lucide:message-square', 1, '', 3, 0, '2026-05-24 19:30:00', 1, '2026-05-24 19:30:00', 1, '管理端 Agent 正式聊天菜单'),
(367300000000000022, 367300000000000002, 1, '会话查询', '', '', '', 0, '/api/v1/agent/session/query', 1, 0, '2026-05-24 19:30:00', 1, '2026-05-24 19:30:00', 1, 'Agent-会话查询');
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
VALUES
(367300000000000102, 1, 367300000000000002),
(367300000000000122, 1, 367300000000000022);