feat(trace): add session run isolation schema

This commit is contained in:
zhuyongxin
2026-07-10 17:47:56 +08:00
parent 841437fa06
commit 52bf0302c6
21 changed files with 1718 additions and 1 deletions
@@ -0,0 +1,111 @@
-- V011: split conversation metadata from diagnosis execution runs.
CREATE TABLE chat_session (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
session_id VARCHAR(64) UNIQUE NOT NULL COMMENT 'Chat session id / conversation context id',
status VARCHAR(16) DEFAULT 'ACTIVE' COMMENT 'ACTIVE/EXPIRED/CLOSED',
message_pair_count INT DEFAULT 0 COMMENT 'Cached Redis message pair count snapshot',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
last_active_at DATETIME DEFAULT CURRENT_TIMESTAMP,
expires_at DATETIME COMMENT 'Directory metadata only; Redis message history may expire independently',
INDEX idx_chat_session_last_active (last_active_at),
INDEX idx_chat_session_status (status),
INDEX idx_chat_session_expires_at (expires_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Chat session metadata table';
CREATE TABLE diagnosis_run (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
run_id VARCHAR(64) UNIQUE NOT NULL COMMENT 'Diagnosis run id, format run-uuid',
session_id VARCHAR(64) NOT NULL COMMENT 'Owner chat_session.session_id',
query TEXT NOT NULL COMMENT 'User question or AIOps alert summary for this run',
status VARCHAR(16) DEFAULT 'PENDING' COMMENT 'PENDING/RUNNING/SUCCESS/FAILED',
agent_flow VARCHAR(32) COMMENT 'CHAT / AI_OPS',
answer LONGTEXT COMMENT 'Final answer/report for this run',
self_evaluation JSON COMMENT 'Run-scoped self evaluation payload',
feedback VARCHAR(16) COMMENT 'User feedback for this run',
total_duration_ms INT COMMENT 'Run duration in milliseconds',
total_token_count INT COMMENT 'Run token count',
step_count INT COMMENT 'Run agent step count',
tool_call_count INT COMMENT 'Run tool invocation count',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_diagnosis_run_session_created (session_id, created_at, id),
INDEX idx_diagnosis_run_session_run (session_id, run_id),
INDEX idx_diagnosis_run_status (status),
INDEX idx_diagnosis_run_agent_flow (agent_flow)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Diagnosis execution run table';
ALTER TABLE agent_step
ADD COLUMN run_id VARCHAR(64) NULL COMMENT '关联 diagnosis_run.run_id' AFTER session_id,
ADD INDEX idx_agent_step_run_step (run_id, step_index);
ALTER TABLE tool_invocation
ADD COLUMN run_id VARCHAR(64) NULL COMMENT '关联 diagnosis_run.run_id' AFTER session_id,
ADD INDEX idx_tool_invocation_run_id (run_id, id);
INSERT INTO chat_session (
session_id,
status,
message_pair_count,
created_at,
last_active_at,
expires_at
)
SELECT
ds.session_id,
'ACTIVE',
0,
ds.created_at,
COALESCE(ds.updated_at, ds.created_at),
NULL
FROM diagnosis_session ds;
INSERT INTO diagnosis_run (
run_id,
session_id,
query,
status,
agent_flow,
answer,
self_evaluation,
feedback,
total_duration_ms,
total_token_count,
step_count,
tool_call_count,
created_at,
updated_at
)
SELECT
CONCAT('run-', UUID()),
ds.session_id,
ds.query,
ds.status,
ds.agent_flow,
ds.answer,
ds.self_evaluation,
ds.feedback,
ds.total_duration_ms,
ds.total_token_count,
ds.step_count,
ds.tool_call_count,
ds.created_at,
ds.updated_at
FROM diagnosis_session ds;
UPDATE agent_step ast
JOIN diagnosis_run dr ON dr.session_id = ast.session_id
SET ast.run_id = dr.run_id
WHERE ast.run_id IS NULL;
UPDATE tool_invocation ti
JOIN diagnosis_run dr ON dr.session_id = ti.session_id
SET ti.run_id = dr.run_id
WHERE ti.run_id IS NULL;