Files
Mutual_Fund/sql/memory_unit_upgrade_20260913.sql
T

46 lines
2.9 KiB
SQL
Raw Normal View History

2026-09-13 21:22:54 +08:00
-- memory_unit 表结构升级:对齐 model/memory_unit.py(34 列)
-- 日期:2026-09-13 执行方式:scripts/apply_memory_unit_upgrade.py(幂等)或本文件手工执行
-- 背景:DB 为旧版 20 列结构,缺 session_id/evidence_ref/置信度/同步状态等 17 列,
-- 导致客服 Agent 长期记忆保存与召回抛 OperationalError(memory_warnings 来源)。
-- 1) 新增 17 列
ALTER TABLE memory_unit
ADD COLUMN session_id VARCHAR(64) NULL COMMENT '产生记忆的会话ID',
ADD COLUMN agent_run_id VARCHAR(64) NULL COMMENT '产生记忆的Agent运行ID',
ADD COLUMN evidence_ref JSON NULL COMMENT '证据引用列表(会话/消息溯源)',
ADD COLUMN historical_accuracy DECIMAL(5,2) NOT NULL DEFAULT 0.50 COMMENT '历史准确率',
ADD COLUMN confidence_version VARCHAR(32) NULL COMMENT '置信度算法版本',
ADD COLUMN confidence_reason VARCHAR(255) NULL COMMENT '置信度评分原因',
ADD COLUMN confidence_update_time DATETIME NULL COMMENT '置信度更新时间',
ADD COLUMN memory_version INT NOT NULL DEFAULT 1 COMMENT '记忆版本号',
ADD COLUMN last_verified_at DATETIME NULL COMMENT '最近验证时间',
ADD COLUMN milvus_id VARCHAR(128) NULL COMMENT 'Milvus向量主键',
ADD COLUMN graph_node_id VARCHAR(128) NULL COMMENT 'Neo4j图谱节点ID',
ADD COLUMN milvus_sync_status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT '向量同步状态',
ADD COLUMN neo4j_sync_status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT '图谱同步状态',
ADD COLUMN sync_retry_count INT NOT NULL DEFAULT 0 COMMENT '同步重试次数',
ADD COLUMN last_sync_error VARCHAR(500) NULL COMMENT '最近同步错误',
ADD COLUMN next_retry_at DATETIME NULL COMMENT '下次重试时间',
ADD COLUMN last_synced_at DATETIME NULL COMMENT '最近成功同步时间';
-- 2) 类型对齐:DATE 无法承载时间语义,扩为 DATETIME
ALTER TABLE memory_unit
MODIFY COLUMN valid_from DATETIME NULL COMMENT '生效起始时间',
MODIFY COLUMN valid_until DATETIME NULL COMMENT '失效时间';
-- 3) 状态语义迁移:旧默认 active → 新枚举 candidate,并更新表默认值
UPDATE memory_unit SET status = 'candidate' WHERE status = 'active';
ALTER TABLE memory_unit
MODIFY COLUMN status VARCHAR(16) NOT NULL DEFAULT 'candidate' COMMENT '记忆状态(candidate/confirmed/expired/rejected/archived)';
-- 4) memory_type 旧枚举归并:NULL 与 'FACT' → 'SERVICE_FACT',再收紧 NOT NULL
UPDATE memory_unit SET memory_type = 'SERVICE_FACT'
WHERE memory_type IS NULL OR memory_type = 'FACT';
ALTER TABLE memory_unit
MODIFY COLUMN memory_type VARCHAR(32) NOT NULL COMMENT '记忆业务类型';
-- 说明:
-- - id/customer_id 为 BIGINT UNSIGNED,与 ORM BigInteger 兼容,不做变更;
-- - 遗留列 conflict_count/dimension/polarity 无 ORM 映射,保留不动;
-- - NUMERIC(5,2) 在 MySQL 中即 DECIMAL(5,2),探针报告的差异为别名,非真实差异。