-- Phase 3 TaskInstance persistence (Session JSON projection). Do not DROP.
|
|
CREATE TABLE `ai_task_instance`
|
(
|
`id` VARCHAR(32) NOT NULL COMMENT '主键=task_session_id',
|
`mac_address` VARCHAR(50) DEFAULT NULL COMMENT '设备MAC',
|
`agent_id` VARCHAR(32) DEFAULT NULL COMMENT '智能体id,可空',
|
`ws_session_id` VARCHAR(64) DEFAULT NULL COMMENT 'WS连接级session_id',
|
`app_id` VARCHAR(32) NOT NULL COMMENT 'App唯一名',
|
`task_id` VARCHAR(32) NOT NULL COMMENT 'Task id',
|
`source` VARCHAR(24) DEFAULT NULL COMMENT 'voice/mqtt_immediate/schedule',
|
`interaction_mode` VARCHAR(32) DEFAULT NULL COMMENT 'SHADOWING/PLAY_AUDIO/...',
|
`status` VARCHAR(16) NOT NULL DEFAULT 'running' COMMENT 'running/completed/cancelled',
|
`end_reason` VARCHAR(32) DEFAULT NULL COMMENT 'finished/user_exit/disconnected/...',
|
`started_at` BIGINT DEFAULT NULL COMMENT 'epoch ms',
|
`ended_at` BIGINT DEFAULT NULL COMMENT 'epoch ms',
|
`created_at` DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3) NOT NULL COMMENT '创建时间',
|
`updated_at` DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3) NOT NULL ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
PRIMARY KEY (`id`),
|
KEY `idx_task_instance_mac_started` (`mac_address`, `started_at`),
|
KEY `idx_task_instance_app_task_started` (`app_id`, `task_id`, `started_at`),
|
KEY `idx_task_instance_status` (`status`)
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Task实例(跟读/复读会话)';
|
|
CREATE TABLE `ai_task_step`
|
(
|
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
`instance_id` VARCHAR(32) NOT NULL COMMENT 'ai_task_instance.id',
|
`step_index` INT NOT NULL COMMENT 'turns[].index',
|
`prompt_text` TEXT COMMENT '范读文本或SD路径',
|
`asr_text` TEXT COMMENT '用户ASR',
|
`echo_rejected` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否回声拒绝',
|
`audio_id` VARCHAR(32) DEFAULT NULL COMMENT 'ai_agent_chat_audio.id',
|
`recorded_at` BIGINT DEFAULT NULL COMMENT 'epoch ms',
|
PRIMARY KEY (`id`),
|
UNIQUE KEY `uk_task_step_instance_index` (`instance_id`, `step_index`),
|
KEY `idx_task_step_audio` (`audio_id`),
|
CONSTRAINT `fk_task_step_instance` FOREIGN KEY (`instance_id`) REFERENCES `ai_task_instance` (`id`) ON DELETE CASCADE
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Task步骤(跟读一轮)';
|
|
CREATE TABLE `ai_task_event`
|
(
|
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
`instance_id` VARCHAR(32) NOT NULL COMMENT 'ai_task_instance.id',
|
`name` VARCHAR(64) NOT NULL COMMENT 'audio.completed/audio.stopped/listen_timeout/...',
|
`app_id` VARCHAR(32) DEFAULT NULL,
|
`task_id` VARCHAR(32) DEFAULT NULL,
|
`at_ms` BIGINT DEFAULT NULL COMMENT 'JSON at,epoch ms',
|
PRIMARY KEY (`id`),
|
KEY `idx_task_event_instance` (`instance_id`),
|
CONSTRAINT `fk_task_event_instance` FOREIGN KEY (`instance_id`) REFERENCES `ai_task_instance` (`id`) ON DELETE CASCADE
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Task事件';
|