Files
qihuaiflow/migrations/008_evolution_v2.sql
T
qyyfw 78ff261b5a 初始提交: Qihu-AIFlow v2.0.1 完整项目
- 前端 React+TypeScript (源码+构建产物)
- 后端 Python FastAPI
- 数据库迁移 001-015
- Docker部署配置
- 微信ClawBot API频道绑定
- 项目文档 README.md
2026-07-02 14:40:46 +08:00

123 lines
6.2 KiB
SQL

-- AI自进化引擎 v2 数据库变更
-- Qihu-AIFlow v2.0.0
-- 使用存储过程进行幂等的列添加,确保可重复执行
DELIMITER $$
-- ============================================================
-- 1. 现有表新增字段(幂等操作)
-- ============================================================
-- evolution_trajectories 新增字段
CREATE PROCEDURE IF NOT EXISTS add_col_evtraj()
BEGIN
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'evolution_trajectories' AND COLUMN_NAME = 'error_msg') THEN
ALTER TABLE `evolution_trajectories` ADD COLUMN `error_msg` VARCHAR(500) DEFAULT NULL COMMENT '轨迹处理失败的错误信息';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'evolution_trajectories' AND COLUMN_NAME = 'retry_count') THEN
ALTER TABLE `evolution_trajectories` ADD COLUMN `retry_count` INT DEFAULT 0 COMMENT '失败重试次数';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'evolution_trajectories' AND COLUMN_NAME = 'tasks_extracted') THEN
ALTER TABLE `evolution_trajectories` ADD COLUMN `tasks_extracted` INT DEFAULT 0 COMMENT '拆分的AtomTask数量';
END IF;
END$$
-- messages 新增字段
CREATE PROCEDURE IF NOT EXISTS add_col_msgs()
BEGIN
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'messages' AND COLUMN_NAME = 'used_skills') THEN
ALTER TABLE `messages` ADD COLUMN `used_skills` JSON DEFAULT NULL COMMENT '该轮对话调用的进化技能名列表';
END IF;
END$$
-- user_evolution_config 新增字段
CREATE PROCEDURE IF NOT EXISTS add_col_uec()
BEGIN
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_evolution_config' AND COLUMN_NAME = 'watcher_error') THEN
ALTER TABLE `user_evolution_config` ADD COLUMN `watcher_error` VARCHAR(500) DEFAULT NULL COMMENT 'watcher异常信息';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_evolution_config' AND COLUMN_NAME = 'pipeline_status') THEN
ALTER TABLE `user_evolution_config` ADD COLUMN `pipeline_status` VARCHAR(20) DEFAULT 'idle' COMMENT '流水线状态: running/idle/error';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_evolution_config' AND COLUMN_NAME = 'pipeline_processed') THEN
ALTER TABLE `user_evolution_config` ADD COLUMN `pipeline_processed` INT DEFAULT 0 COMMENT '已处理轨迹数';
END IF;
END$$
DELIMITER ;
-- 执行列添加
CALL add_col_evtraj();
CALL add_col_msgs();
CALL add_col_uec();
-- 清理存储过程
DROP PROCEDURE IF EXISTS add_col_evtraj;
DROP PROCEDURE IF EXISTS add_col_msgs;
DROP PROCEDURE IF EXISTS add_col_uec;
-- ============================================================
-- 2. 新增表: skill_versions (技能版本历史, 用于回滚)
-- ============================================================
CREATE TABLE IF NOT EXISTS `skill_versions` (
`id` VARCHAR(36) NOT NULL PRIMARY KEY,
`user_id` VARCHAR(36) NOT NULL,
`skill_name` VARCHAR(200) NOT NULL,
`version` INT NOT NULL DEFAULT 1,
`skill_md_content` LONGTEXT COMMENT '该版本的SKILL.md完整内容',
`git_commit_sha` VARCHAR(40) COMMENT 'Git提交SHA',
`description` TEXT COMMENT '版本变更说明',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_sv_user_skill` (`user_id`, `skill_name`),
INDEX `idx_sv_version` (`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- 3. 新增表: evolution_reports (进化报告)
-- ============================================================
CREATE TABLE IF NOT EXISTS `evolution_reports` (
`id` VARCHAR(36) NOT NULL PRIMARY KEY,
`user_id` VARCHAR(36) NOT NULL,
`report_type` VARCHAR(20) NOT NULL COMMENT 'weekly / monthly',
`period_start` DATE NOT NULL COMMENT '报告周期开始日期',
`period_end` DATE NOT NULL COMMENT '报告周期结束日期',
`report_data` JSON COMMENT '报告详细数据(JSON)',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_er_user_type` (`user_id`, `report_type`),
INDEX `idx_er_period` (`period_start`, `period_end`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- 4. 新增表: skill_publish_records (技能市场发布记录)
-- ============================================================
CREATE TABLE IF NOT EXISTS `skill_publish_records` (
`id` VARCHAR(36) NOT NULL PRIMARY KEY,
`skill_id` VARCHAR(36) NOT NULL COMMENT '关联evolution_skills.id',
`skill_name` VARCHAR(200) NOT NULL,
`user_id` VARCHAR(36) NOT NULL,
`market_app_id` VARCHAR(36) COMMENT '关联market_apps.id',
`price` DECIMAL(10, 2) DEFAULT 0.00,
`market_description` TEXT,
`status` VARCHAR(20) NOT NULL DEFAULT 'published' COMMENT 'published/unpublished',
`published_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_spr_skill_id` (`skill_id`),
INDEX `idx_spr_user_id` (`user_id`),
INDEX `idx_spr_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- 5. 新增表: team_shared_skills (团队共享技能)
-- ============================================================
CREATE TABLE IF NOT EXISTS `team_shared_skills` (
`id` VARCHAR(36) NOT NULL PRIMARY KEY,
`team_id` VARCHAR(36) NOT NULL,
`skill_id` VARCHAR(36) NOT NULL COMMENT '关联evolution_skills.id',
`skill_name` VARCHAR(200) NOT NULL,
`shared_by` VARCHAR(36) NOT NULL COMMENT '分享者user_id',
`shared_by_name` VARCHAR(100) COMMENT '分享者昵称',
`is_public` TINYINT(1) DEFAULT 1 COMMENT '团队内是否可见',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY `uk_tss_team_skill` (`team_id`, `skill_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;