wangzhibo
2026-10-08 220e4fab27b7f419b3e89e2f2d28ae789aac09d7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
-- 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事件';