From b8e9aded6b36b9807bcbe7ba1facca9140e58509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AC=A3=E5=8D=97=E7=A7=91=E6=8A=80?= Date: Fri, 14 Mar 2025 14:10:47 +0800 Subject: [PATCH] Manage agent api (#334) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update:更换新表 * update:优化用户表sql语句 --------- Co-authored-by: hrz <1710360675@qq.com> --- .../modules/device/entity/DeviceEntity.java | 5 +- .../modules/sys/entity/SysUserEntity.java | 2 +- .../resources/db/changelog/202503101631.sql | 2 - .../{001create_sys.sql => 202503141335.sql} | 7 +- .../{202503131429.sql => 202503141346.sql} | 216 ++++++++++-------- .../db/changelog/db.changelog-master.yaml | 15 +- 6 files changed, 126 insertions(+), 121 deletions(-) delete mode 100644 main/manager-api/src/main/resources/db/changelog/202503101631.sql rename main/manager-api/src/main/resources/db/changelog/{001create_sys.sql => 202503141335.sql} (95%) rename main/manager-api/src/main/resources/db/changelog/{202503131429.sql => 202503141346.sql} (65%) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java index bc1a7e88..ccbe4683 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java @@ -31,11 +31,8 @@ public class DeviceEntity { @Schema(description = "设备别名") private String alias; - @Schema(description = "智能体编码") - private String agentCode; - @Schema(description = "智能体ID") - private Long agentId; + private String agentId; @Schema(description = "固件版本号") private String appVersion; diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysUserEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysUserEntity.java index 764ee199..c519dd12 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysUserEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysUserEntity.java @@ -36,7 +36,7 @@ public class SysUserEntity extends BaseEntity { * 更新者 */ @TableField(fill = FieldFill.INSERT) - private Long create_date; + private Date createDate; /** * 更新者 */ diff --git a/main/manager-api/src/main/resources/db/changelog/202503101631.sql b/main/manager-api/src/main/resources/db/changelog/202503101631.sql deleted file mode 100644 index 4055cad5..00000000 --- a/main/manager-api/src/main/resources/db/changelog/202503101631.sql +++ /dev/null @@ -1,2 +0,0 @@ --- 给用户表添加一个创建者 -ALTER TABLE sys_user ADD COLUMN creator BIGINT COMMENT '创建者'; \ No newline at end of file diff --git a/main/manager-api/src/main/resources/db/changelog/001create_sys.sql b/main/manager-api/src/main/resources/db/changelog/202503141335.sql similarity index 95% rename from main/manager-api/src/main/resources/db/changelog/001create_sys.sql rename to main/manager-api/src/main/resources/db/changelog/202503141335.sql index c5bb0cdf..cc51f054 100644 --- a/main/manager-api/src/main/resources/db/changelog/001create_sys.sql +++ b/main/manager-api/src/main/resources/db/changelog/202503141335.sql @@ -13,10 +13,10 @@ CREATE TABLE sys_user ( status tinyint COMMENT '状态 0:停用 1:正常', create_date datetime COMMENT '创建时间', updater bigint COMMENT '更新者', + creator bigint COMMENT '创建者', update_date datetime COMMENT '更新时间', primary key (id), - unique key uk_username (username), - key idx_create_date (create_date) + unique key uk_username (username) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户'; -- 系统用户Token @@ -45,8 +45,7 @@ create table sys_params updater bigint COMMENT '更新者', update_date datetime COMMENT '更新时间', primary key (id), - unique key uk_param_code (param_code), - key idx_create_date (create_date) + unique key uk_param_code (param_code) )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='参数管理'; -- 字典类型 diff --git a/main/manager-api/src/main/resources/db/changelog/202503131429.sql b/main/manager-api/src/main/resources/db/changelog/202503141346.sql similarity index 65% rename from main/manager-api/src/main/resources/db/changelog/202503131429.sql rename to main/manager-api/src/main/resources/db/changelog/202503141346.sql index e939b7fe..de14fd71 100644 --- a/main/manager-api/src/main/resources/db/changelog/202503131429.sql +++ b/main/manager-api/src/main/resources/db/changelog/202503141346.sql @@ -1,12 +1,29 @@ +-- 模型供应器表 +DROP TABLE IF EXISTS `ai_model_provider`; +CREATE TABLE `ai_model_provider` ( + `id` VARCHAR(32) NOT NULL COMMENT '主键', + `model_type` VARCHAR(20) COMMENT '模型类型(Memory/ASR/VAD/LLM/TTS)', + `provider_code` VARCHAR(50) COMMENT '供应器类型', + `name` VARCHAR(50) COMMENT '供应器名称', + `fields` JSON COMMENT '供应器字段列表(JSON格式)', + `sort` INT UNSIGNED DEFAULT 0 COMMENT '排序', + `creator` BIGINT COMMENT '创建者', + `create_date` DATETIME COMMENT '创建时间', + `updater` BIGINT COMMENT '更新者', + `update_date` DATETIME COMMENT '更新时间', + PRIMARY KEY (`id`), + INDEX `idx_ai_model_provider_model_type` (`model_type`) COMMENT '创建模型类型的索引,用于快速查找特定类型下的所有供应器信息' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模型配置表'; + -- 模型配置表 DROP TABLE IF EXISTS `ai_model_config`; CREATE TABLE `ai_model_config` ( - `id` BIGINT NOT NULL COMMENT '主键', + `id` VARCHAR(32) NOT NULL COMMENT '主键', `model_type` VARCHAR(20) COMMENT '模型类型(Memory/ASR/VAD/LLM/TTS)', `model_code` VARCHAR(50) COMMENT '模型编码(如AliLLM、DoubaoTTS)', `model_name` VARCHAR(50) COMMENT '模型名称', `is_default` TINYINT(1) DEFAULT 0 COMMENT '是否默认配置(0否 1是)', - `is_enabled` TINYINT(1) DEFAULT 0 COMMENT '是否启用(原注释有误,应为是否启用而非是否默认配置)', + `is_enabled` TINYINT(1) DEFAULT 0 COMMENT '是否启用', `config_json` JSON COMMENT '模型配置(JSON格式)', `doc_link` VARCHAR(200) COMMENT '官方文档链接', `remark` VARCHAR(255) COMMENT '备注', @@ -15,14 +32,15 @@ CREATE TABLE `ai_model_config` ( `create_date` DATETIME COMMENT '创建时间', `updater` BIGINT COMMENT '更新者', `update_date` DATETIME COMMENT '更新时间', - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + INDEX `idx_ai_model_config_model_type` (`model_type`) COMMENT '创建模型类型的索引,用于快速查找特定类型下的所有配置信息' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模型配置表'; -- TTS 音色表 DROP TABLE IF EXISTS `ai_tts_voice`; CREATE TABLE `ai_tts_voice` ( - `id` BIGINT NOT NULL COMMENT '主键', - `tts_model_id` BIGINT COMMENT '对应 TTS 模型主键', + `id` VARCHAR(32) NOT NULL COMMENT '主键', + `tts_model_id` VARCHAR(32) COMMENT '对应 TTS 模型主键', `name` VARCHAR(20) COMMENT '音色名称', `tts_voice` VARCHAR(50) COMMENT '音色编码', `languages` VARCHAR(50) COMMENT '语言', @@ -33,99 +51,14 @@ CREATE TABLE `ai_tts_voice` ( `create_date` DATETIME COMMENT '创建时间', `updater` BIGINT COMMENT '更新者', `update_date` DATETIME COMMENT '更新时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='TTS 音色表'; - --- 对话历史表 -DROP TABLE IF EXISTS `ai_chat_history`; -CREATE TABLE `ai_chat_history` ( - `id` BIGINT NOT NULL COMMENT '对话编号', - `user_id` BIGINT COMMENT '用户编号', - `agent_id` BIGINT DEFAULT NULL COMMENT '聊天角色', - `device_id` BIGINT DEFAULT NULL COMMENT '设备编号(原注释有误,应为设备编号)', - `message_count` INT COMMENT '信息汇总', - `sort` INT UNSIGNED DEFAULT 0 COMMENT '排序', - `creator` BIGINT COMMENT '创建者', - `create_date` DATETIME COMMENT '创建时间', - `updater` BIGINT COMMENT '更新者', - `update_date` DATETIME COMMENT '更新时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对话历史表'; - --- 对话信息表 -DROP TABLE IF EXISTS `ai_chat_message`; -CREATE TABLE `ai_chat_message` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '对话记录唯一标识', - `user_id` BIGINT COMMENT '用户唯一标识', - `chat_id` VARCHAR(64) COMMENT '对话历史 ID', - `agent_name` VARCHAR(64) COMMENT '智能体名称', - `role` ENUM('user', 'assistant') COMMENT '角色(用户或助理)', - `content` TEXT COMMENT '对话内容', - `embedding` TEXT COMMENT '对话内容的嵌入向量(可选)', - `url` VARCHAR(255) COMMENT '相关音频文件的 URL(可选)', - `prompt_tokens` INT UNSIGNED DEFAULT 0 COMMENT '提示令牌数', - `total_tokens` INT UNSIGNED DEFAULT 0 COMMENT '总令牌数', - `completion_tokens` INT UNSIGNED DEFAULT 0 COMMENT '完成令牌数', - `prompt_ms` INT UNSIGNED DEFAULT 0 COMMENT '提示耗时(毫秒)', - `total_ms` INT UNSIGNED DEFAULT 0 COMMENT '总耗时(毫秒)', - `completion_ms` INT UNSIGNED DEFAULT 0 COMMENT '完成耗时(毫秒)', - `sort` INT UNSIGNED DEFAULT 0 COMMENT '排序', - `creator` BIGINT COMMENT '创建者', - `create_date` DATETIME COMMENT '创建时间', - `updater` BIGINT COMMENT '更新者', - `update_date` DATETIME COMMENT '更新时间', PRIMARY KEY (`id`), - INDEX `idx_user_id_chat_id_role` (`user_id`, `chat_id`) COMMENT '用户 ID、聊天会话 ID 和角色的联合索引,用于快速检索对话记录', - INDEX `idx_created_at` (`create_date`) COMMENT '创建时间的索引,用于按时间排序或检索对话记录' -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对话信息表'; - --- 设备信息表 -DROP TABLE IF EXISTS `ai_device`; -CREATE TABLE `ai_device` ( - `id` BIGINT NOT NULL COMMENT '设备唯一标识', - `user_id` BIGINT COMMENT '关联用户 ID', - `mac_address` VARCHAR(50) COMMENT 'MAC 地址', - `last_connected_at` DATETIME COMMENT '最后连接时间', - `auto_update` TINYINT UNSIGNED DEFAULT 0 COMMENT '自动更新开关(0 关闭/1 开启)', - `board` VARCHAR(50) COMMENT '设备硬件型号', - `alias` VARCHAR(64) DEFAULT NULL COMMENT '设备别名', - `agent_code` VARCHAR(36) COMMENT '智能体编码', - `agent_id` BIGINT COMMENT '智能体 ID', - `app_version` VARCHAR(20) COMMENT '固件版本号', - `sort` INT UNSIGNED DEFAULT 0 COMMENT '排序', - `creator` BIGINT COMMENT '创建者', - `create_date` DATETIME COMMENT '创建时间', - `updater` BIGINT COMMENT '更新者', - `update_date` DATETIME COMMENT '更新时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备信息表'; - --- 智能体配置表 -DROP TABLE IF EXISTS `ai_agent`; -CREATE TABLE `ai_agent` ( - `id` BIGINT NOT NULL COMMENT '智能体唯一标识', - `user_id` BIGINT COMMENT '所属用户 ID', - `agent_code` VARCHAR(36) COMMENT '智能体唯一凭证', - `agent_name` VARCHAR(64) COMMENT '智能体名称', - `tts_voice` VARCHAR(64) COMMENT '语音合成标识', - `llm_model` VARCHAR(32) COMMENT '大语言模型标识', - `memory` TEXT COMMENT '历史记忆数据', - `character` TEXT COMMENT '角色设定参数', - `long_memory_switch` TINYINT UNSIGNED DEFAULT 0 COMMENT '长期记忆开关', - `lang_code` VARCHAR(10) COMMENT '语言编码', - `language` VARCHAR(10) COMMENT '交互语种', - `sort` INT UNSIGNED DEFAULT 0 COMMENT '排序权重', - `creator` BIGINT COMMENT '创建者 ID', - `created_at` DATETIME COMMENT '创建时间', - `updater` BIGINT COMMENT '更新者 ID', - `updated_at` DATETIME COMMENT '更新时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='智能体配置表'; + INDEX `idx_ai_tts_voice_tts_model_id` (`tts_model_id`) COMMENT '创建 TTS 模型主键的索引,用于快速查找对应模型的音色信息' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='TTS 音色表'; -- 智能体配置模板表 DROP TABLE IF EXISTS `ai_agent_template`; CREATE TABLE `ai_agent_template` ( - `id` BIGINT NOT NULL COMMENT '智能体唯一标识', + `id` VARCHAR(32) NOT NULL COMMENT '智能体唯一标识', `agent_code` VARCHAR(36) COMMENT '智能体编码', `agent_name` VARCHAR(64) COMMENT '智能体名称', `asr_model_id` VARCHAR(32) COMMENT '语音识别模型标识', @@ -133,9 +66,9 @@ CREATE TABLE `ai_agent_template` ( `llm_model_id` VARCHAR(32) COMMENT '大语言模型标识', `tts_model_id` VARCHAR(32) COMMENT '语音合成模型标识', `tts_voice_id` VARCHAR(32) COMMENT '音色标识', - `memory` TEXT COMMENT '历史记忆数据', - `character` TEXT COMMENT '角色设定参数', - `long_memory_switch` TINYINT UNSIGNED DEFAULT 0 COMMENT '长期记忆开关', + `mem_model_id` VARCHAR(32) COMMENT '记忆模型标识', + `intent_model_id` VARCHAR(32) COMMENT '意图模型标识', + `system_prompt` TEXT COMMENT '角色设定参数', `lang_code` VARCHAR(10) COMMENT '语言编码', `language` VARCHAR(10) COMMENT '交互语种', `sort` INT UNSIGNED DEFAULT 0 COMMENT '排序权重', @@ -146,13 +79,60 @@ CREATE TABLE `ai_agent_template` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='智能体配置模板表'; +-- 智能体配置表 +DROP TABLE IF EXISTS `ai_agent`; +CREATE TABLE `ai_agent` ( + `id` VARCHAR(32) NOT NULL COMMENT '智能体唯一标识', + `user_id` BIGINT COMMENT '所属用户 ID', + `agent_code` VARCHAR(36) COMMENT '智能体编码', + `agent_name` VARCHAR(64) COMMENT '智能体名称', + `asr_model_id` VARCHAR(32) COMMENT '语音识别模型标识', + `vad_model_id` VARCHAR(64) COMMENT '语音活动检测标识', + `llm_model_id` VARCHAR(32) COMMENT '大语言模型标识', + `tts_model_id` VARCHAR(32) COMMENT '语音合成模型标识', + `tts_voice_id` VARCHAR(32) COMMENT '音色标识', + `mem_model_id` VARCHAR(32) COMMENT '记忆模型标识', + `intent_model_id` VARCHAR(32) COMMENT '意图模型标识', + `system_prompt` TEXT COMMENT '角色设定参数', + `lang_code` VARCHAR(10) COMMENT '语言编码', + `language` VARCHAR(10) COMMENT '交互语种', + `sort` INT UNSIGNED DEFAULT 0 COMMENT '排序权重', + `creator` BIGINT COMMENT '创建者 ID', + `created_at` DATETIME COMMENT '创建时间', + `updater` BIGINT COMMENT '更新者 ID', + `updated_at` DATETIME COMMENT '更新时间', + PRIMARY KEY (`id`), + INDEX `idx_ai_agent_user_id` (`user_id`) COMMENT '创建用户的索引,用于快速查找用户下的智能体信息' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='智能体配置表'; + +-- 设备信息表 +DROP TABLE IF EXISTS `ai_device`; +CREATE TABLE `ai_device` ( + `id` VARCHAR(32) NOT NULL COMMENT '设备唯一标识', + `user_id` BIGINT COMMENT '关联用户 ID', + `mac_address` VARCHAR(50) COMMENT 'MAC 地址', + `last_connected_at` DATETIME COMMENT '最后连接时间', + `auto_update` TINYINT UNSIGNED DEFAULT 0 COMMENT '自动更新开关(0 关闭/1 开启)', + `board` VARCHAR(50) COMMENT '设备硬件型号', + `alias` VARCHAR(64) DEFAULT NULL COMMENT '设备别名', + `agent_id` VARCHAR(32) COMMENT '智能体 ID', + `app_version` VARCHAR(20) COMMENT '固件版本号', + `sort` INT UNSIGNED DEFAULT 0 COMMENT '排序', + `creator` BIGINT COMMENT '创建者', + `create_date` DATETIME COMMENT '创建时间', + `updater` BIGINT COMMENT '更新者', + `update_date` DATETIME COMMENT '更新时间', + PRIMARY KEY (`id`), + INDEX `idx_ai_device_created_at` (`mac_address`) COMMENT '创建mac的索引,用于快速查找设备信息' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备信息表'; + -- 声纹识别表 DROP TABLE IF EXISTS `ai_voiceprint`; CREATE TABLE `ai_voiceprint` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '声纹唯一标识', + `id` VARCHAR(32) NOT NULL COMMENT '声纹唯一标识', `name` VARCHAR(64) COMMENT '声纹名称', `user_id` BIGINT COMMENT '用户 ID(关联用户表)', - `agent_id` BIGINT COMMENT '关联智能体 ID', + `agent_id` VARCHAR(32) COMMENT '关联智能体 ID', `agent_code` VARCHAR(36) COMMENT '关联智能体编码', `agent_name` VARCHAR(36) COMMENT '关联智能体名称', `description` VARCHAR(255) COMMENT '声纹描述', @@ -164,4 +144,42 @@ CREATE TABLE `ai_voiceprint` ( `updater` BIGINT COMMENT '更新者 ID', `updated_at` DATETIME COMMENT '更新时间', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='声纹识别表'; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='声纹识别表'; + +-- 对话历史表 +DROP TABLE IF EXISTS `ai_chat_history`; +CREATE TABLE `ai_chat_history` ( + `id` VARCHAR(32) NOT NULL COMMENT '对话编号', + `user_id` BIGINT COMMENT '用户编号', + `agent_id` VARCHAR(32) DEFAULT NULL COMMENT '聊天角色', + `device_id` VARCHAR(32) DEFAULT NULL COMMENT '设备编号', + `message_count` INT COMMENT '信息汇总', + `creator` BIGINT COMMENT '创建者', + `create_date` DATETIME COMMENT '创建时间', + `updater` BIGINT COMMENT '更新者', + `update_date` DATETIME COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对话历史表'; + +-- 对话信息表 +DROP TABLE IF EXISTS `ai_chat_message`; +CREATE TABLE `ai_chat_message` ( + `id` VARCHAR(32) NOT NULL COMMENT '对话记录唯一标识', + `user_id` BIGINT COMMENT '用户唯一标识', + `chat_id` VARCHAR(64) COMMENT '对话历史 ID', + `role` ENUM('user', 'assistant') COMMENT '角色(用户或助理)', + `content` TEXT COMMENT '对话内容', + `prompt_tokens` INT UNSIGNED DEFAULT 0 COMMENT '提示令牌数', + `total_tokens` INT UNSIGNED DEFAULT 0 COMMENT '总令牌数', + `completion_tokens` INT UNSIGNED DEFAULT 0 COMMENT '完成令牌数', + `prompt_ms` INT UNSIGNED DEFAULT 0 COMMENT '提示耗时(毫秒)', + `total_ms` INT UNSIGNED DEFAULT 0 COMMENT '总耗时(毫秒)', + `completion_ms` INT UNSIGNED DEFAULT 0 COMMENT '完成耗时(毫秒)', + `creator` BIGINT COMMENT '创建者', + `create_date` DATETIME COMMENT '创建时间', + `updater` BIGINT COMMENT '更新者', + `update_date` DATETIME COMMENT '更新时间', + PRIMARY KEY (`id`), + INDEX `idx_ai_chat_message_user_id_chat_id_role` (`user_id`, `chat_id`) COMMENT '用户 ID、聊天会话 ID 和角色的联合索引,用于快速检索对话记录', + INDEX `idx_ai_chat_message_created_at` (`create_date`) COMMENT '创建时间的索引,用于按时间排序或检索对话记录' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对话信息表'; diff --git a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml index d1d7a557..89ed7ff5 100755 --- a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml @@ -3,23 +3,16 @@ # 每次对数据表进行改动时,只允许新建新对changeSet,不允许对上一个changeSet配置及文件进行修改 databaseChangeLog: - changeSet: - id: 001create_sys + id: 202503141335 author: John changes: - sqlFile: encoding: utf8 - path: classpath:db/changelog/001create_sys.sql + path: classpath:db/changelog/202503141335.sql - changeSet: - id: 202503101631 - author: zjy - changes: - - sqlFile: - encoding: utf8 - path: classpath:db/changelog/202503101631.sql - - changeSet: - id: 202503131429 + id: 202503141346 author: czc changes: - sqlFile: encoding: utf8 - path: classpath:db/changelog/202503131429.sql \ No newline at end of file + path: classpath:db/changelog/202503141346.sql \ No newline at end of file