纳入范围: - backend/ Spring Boot 多模块后端(iot-common/device/rule/data/alarm/auth) - frontend/admin/ Vue3 + Element Plus 管理后台 - Android/ 涂鸦原生 APP (com.xhai.iot) - backend/sql/ Flyway 风格迁移脚本(V2~V21) - docs/ 对接文档与设计文档 排除范围: - 构建产物: node_modules/ target/ build/ dist/ .gradle/ - 签名密钥: *.jks *.keystore (严禁入库) - 本机配置: Android/local.properties - 运行日志: logs/ *.log - AI 协作本地数据 .codebuddy/ 与第三方 demo tuya-demo/ .gitattributes 统一以 LF 存储, Windows 批处理保留 CRLF
88 lines
6.4 KiB
SQL
88 lines
6.4 KiB
SQL
-- V12: AI 自然语言控制地基表
|
||
-- 设计说明:
|
||
-- 1) ai_alias 统一别名库:把用户的口语说法映射到真实目标(设备/场景/房间)
|
||
-- 这是 AI 控制准确率的"地基",因为涂鸦设备 device_type 多为空,
|
||
-- 仅靠 device_name 无法稳定匹配(如用户说"客厅开关"而设备名叫"dvevo1")。
|
||
-- 2) ai_device_profile 设备控制档案:记录开/关等真实指令码(如 switch_1/switch_led),
|
||
-- 由 iot-device 侧通过涂鸦状态接口自动探测写入,iot-rule 侧读取使用。
|
||
-- 3) ai_command_log 指令日志与纠错反馈:记录每次自然语言解析与执行结果,
|
||
-- 用户纠正后的目标会回写为别名,形成"越用越准"的正循环。
|
||
|
||
-- ============ 1. 别名库 ============
|
||
CREATE TABLE IF NOT EXISTS ai_alias (
|
||
id BIGINT NOT NULL COMMENT '主键',
|
||
target_type VARCHAR(16) NOT NULL COMMENT '目标类型: device/scene/room',
|
||
target_id VARCHAR(64) NOT NULL COMMENT '目标ID: device.device_id / scene.id / room.id',
|
||
alias VARCHAR(64) NOT NULL COMMENT '用户说法(原始)',
|
||
normalized VARCHAR(64) NOT NULL COMMENT '归一化别名(去空格标点+小写, 匹配用)',
|
||
owner_id BIGINT NOT NULL COMMENT '归属用户ID(member.id)',
|
||
home_id BIGINT NULL COMMENT '归属家庭ID(home.id)',
|
||
source VARCHAR(16) NOT NULL DEFAULT 'manual' COMMENT '来源: manual手动/learned纠正学习/import导入',
|
||
hit_count INT NOT NULL DEFAULT 0 COMMENT '命中次数(用于优先级排序)',
|
||
enabled TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用: 1启用 0停用',
|
||
deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除: 0正常 1删除',
|
||
create_time DATETIME NULL COMMENT '创建时间',
|
||
update_time DATETIME NULL COMMENT '更新时间',
|
||
tenant_id BIGINT NULL COMMENT '租户ID',
|
||
create_by BIGINT NULL COMMENT '创建人',
|
||
update_by BIGINT NULL COMMENT '更新人',
|
||
PRIMARY KEY (id),
|
||
KEY idx_ai_alias_match (owner_id, target_type, normalized, deleted),
|
||
KEY idx_ai_alias_target (target_type, target_id, deleted)
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'AI 自然语言别名库';
|
||
|
||
-- ============ 2. 设备控制档案 ============
|
||
CREATE TABLE IF NOT EXISTS ai_device_profile (
|
||
id BIGINT NOT NULL,
|
||
device_id VARCHAR(64) NOT NULL COMMENT '设备业务ID(device.device_id)',
|
||
owner_id BIGINT NOT NULL COMMENT '设备归属用户ID',
|
||
power_code VARCHAR(64) NULL COMMENT '开/关指令码, 如 switch_1 / switch_led / switch',
|
||
power_on_value VARCHAR(64) NOT NULL DEFAULT 'true' COMMENT '开启时下发的值',
|
||
power_off_value VARCHAR(64) NOT NULL DEFAULT 'false' COMMENT '关闭时下发的值',
|
||
brightness_code VARCHAR(64) NULL COMMENT '亮度指令码, 如 bright_value',
|
||
color_temp_code VARCHAR(64) NULL COMMENT '色温指令码, 如 temp_value',
|
||
temperature_code VARCHAR(64) NULL COMMENT '温度设定指令码, 如 temp_set',
|
||
mode_code VARCHAR(64) NULL COMMENT '模式指令码, 如 mode',
|
||
source VARCHAR(16) NOT NULL DEFAULT 'auto' COMMENT '来源: auto状态探测/manual手动/type-default类型默认',
|
||
raw_status TEXT NULL COMMENT '探测到的原始状态JSON(排查用)',
|
||
enabled TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
create_time DATETIME NULL,
|
||
update_time DATETIME NULL,
|
||
tenant_id BIGINT NULL,
|
||
create_by BIGINT NULL,
|
||
update_by BIGINT NULL,
|
||
PRIMARY KEY (id),
|
||
KEY idx_ai_profile_device (device_id, deleted),
|
||
KEY idx_ai_profile_owner (owner_id, deleted)
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'AI 设备控制指令码档案';
|
||
|
||
-- ============ 3. 指令日志与反馈 ============
|
||
CREATE TABLE IF NOT EXISTS ai_command_log (
|
||
id BIGINT NOT NULL,
|
||
owner_id BIGINT NOT NULL COMMENT '发起用户ID',
|
||
input_text VARCHAR(500) NOT NULL COMMENT '用户原始输入',
|
||
normalized_text VARCHAR(500) NULL COMMENT '归一化后的文本',
|
||
parse_source VARCHAR(16) NULL COMMENT '解析来源: rule规则模板/llm大模型',
|
||
intent_type VARCHAR(32) NULL COMMENT '意图类型: device_control/scene_execute/query/unknown',
|
||
action VARCHAR(32) NULL COMMENT '动作: turn_on/turn_off/set_brightness等',
|
||
matched_type VARCHAR(16) NULL COMMENT '命中目标类型: device/scene',
|
||
matched_id VARCHAR(64) NULL COMMENT '命中目标ID',
|
||
matched_name VARCHAR(64) NULL COMMENT '命中目标名称',
|
||
confidence DECIMAL(4,3) NULL COMMENT '置信度 0-1',
|
||
success TINYINT NOT NULL DEFAULT 0 COMMENT '是否执行成功',
|
||
reply VARCHAR(500) NULL COMMENT '返回给用户的回复文案',
|
||
candidates VARCHAR(2000) NULL COMMENT '歧义候选JSON(用于前端二次确认)',
|
||
corrected_target_id VARCHAR(64) NULL COMMENT '用户纠正后的目标ID(学习数据)',
|
||
cost_ms INT NULL COMMENT '解析+执行耗时(毫秒)',
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
create_time DATETIME NULL,
|
||
update_time DATETIME NULL,
|
||
tenant_id BIGINT NULL,
|
||
create_by BIGINT NULL,
|
||
update_by BIGINT NULL,
|
||
PRIMARY KEY (id),
|
||
KEY idx_ai_log_owner_time (owner_id, create_time),
|
||
KEY idx_ai_log_text (owner_id, normalized_text)
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'AI 指令日志与纠错反馈';
|