iotsaas/backend/sql/V12__add_ai_control_tables.sql
2995840376 0ce191c448 chore: 初始化 iotsaas 版本库基线
纳入范围:
- 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
2026-10-27 12:00:41 +08:00

88 lines
6.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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 指令日志与纠错反馈';