-- AI虚拟用户新闻互动系统 数据库初始化脚本 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- 虚拟用户表 CREATE TABLE IF NOT EXISTS `virtual_users` ( `id` bigint NOT NULL AUTO_INCREMENT, `nickname` varchar(64) NOT NULL COMMENT '昵称', `account` varchar(128) NOT NULL COMMENT '新闻平台账号', `password_enc` varchar(512) NOT NULL COMMENT 'AES加密密码', `avatar_url` varchar(512) DEFAULT NULL COMMENT '头像URL', `status` tinyint NOT NULL DEFAULT 0 COMMENT '0未登录 1登录中 2已登录 3登录失效 4封禁', `activity_level` tinyint NOT NULL DEFAULT 1 COMMENT '0低 1中 2高', `daily_comment_limit` int NOT NULL DEFAULT 10 COMMENT '每日最大评论次数', `daily_like_limit` int NOT NULL DEFAULT 30 COMMENT '每日最大点赞次数', `today_comment_count` int NOT NULL DEFAULT 0 COMMENT '今日已评论次数', `today_like_count` int NOT NULL DEFAULT 0 COMMENT '今日已点赞次数', `total_interactions` int NOT NULL DEFAULT 0 COMMENT '累计互动次数', `session_token` text DEFAULT NULL COMMENT '当前会话Token', `session_expires_at` datetime DEFAULT NULL COMMENT '会话过期时间', `last_login_at` datetime DEFAULT NULL COMMENT '最后登录时间', `last_interact_at` datetime DEFAULT NULL COMMENT '最后互动时间', `real_name` varchar(64) DEFAULT NULL COMMENT '真实姓名(平台同步)', `sex` tinyint(1) NOT NULL DEFAULT 0 COMMENT '性别 0未知 1男 2女', `platform_uid` varchar(64) DEFAULT NULL COMMENT '平台用户ID', `remark` varchar(256) DEFAULT NULL COMMENT '备注', `is_enabled` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_account` (`account`), UNIQUE KEY `uk_nickname` (`nickname`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='虚拟用户表'; -- 用户人格表 CREATE TABLE IF NOT EXISTS `user_personalities` ( `id` bigint NOT NULL AUTO_INCREMENT, `user_id` bigint NOT NULL COMMENT '用户ID', `character_type` varchar(32) DEFAULT NULL COMMENT '性格类型:开朗/内敛/毒舌/温和', `language_style` varchar(32) DEFAULT NULL COMMENT '语言风格:严肃/幽默/文艺/吐槽', `interest_tags` json DEFAULT NULL COMMENT '兴趣偏好JSON数组', `interact_tendency` varchar(32) DEFAULT NULL COMMENT '互动倾向:爱评论/爱点赞/潜水', `word_count_min` int DEFAULT 20 COMMENT '最少字数', `word_count_max` int DEFAULT 100 COMMENT '最多字数', `personality_desc` text DEFAULT NULL COMMENT 'AI生成的人格描述', `comment_style_prompt` text DEFAULT NULL COMMENT '评论风格提示词', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户人格表'; -- 互动记录表 CREATE TABLE IF NOT EXISTS `interaction_records` ( `id` bigint NOT NULL AUTO_INCREMENT, `user_id` bigint NOT NULL COMMENT '虚拟用户ID', `user_nickname` varchar(64) DEFAULT NULL COMMENT '用户昵称', `user_account` varchar(128) DEFAULT NULL COMMENT '用户账号', `article_id` varchar(64) DEFAULT NULL COMMENT '文章ID', `article_title` varchar(256) DEFAULT NULL COMMENT '文章标题', `interact_type` varchar(16) NOT NULL COMMENT 'comment/reply/like/collect/forward', `content` text DEFAULT NULL COMMENT '评论/回复内容', `parent_comment_id` varchar(64) DEFAULT NULL COMMENT '父评论ID(回复时用)', `session_id` varchar(128) DEFAULT NULL COMMENT '登录会话ID', `token_consumed` int DEFAULT 0 COMMENT '消耗Token数', `status` tinyint NOT NULL DEFAULT 0 COMMENT '0执行中 1成功 2失败', `error_msg` varchar(512) DEFAULT NULL COMMENT '失败原因', `retry_count` tinyint DEFAULT 0 COMMENT '重试次数', `executed_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_executed_at` (`executed_at`), KEY `idx_interact_type` (`interact_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='互动记录表'; -- Token消耗统计表 CREATE TABLE IF NOT EXISTS `token_stats` ( `id` bigint NOT NULL AUTO_INCREMENT, `stat_date` date NOT NULL COMMENT '统计日期', `model_name` varchar(64) DEFAULT NULL COMMENT '模型名称', `total_tokens` int NOT NULL DEFAULT 0 COMMENT '当日消耗总Token', `prompt_tokens` int NOT NULL DEFAULT 0 COMMENT 'Prompt Token', `completion_tokens` int NOT NULL DEFAULT 0 COMMENT 'Completion Token', `call_count` int NOT NULL DEFAULT 0 COMMENT '调用次数', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_stat_date` (`stat_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Token消耗统计表'; -- AI模型配置表 CREATE TABLE IF NOT EXISTS `ai_model_configs` ( `id` bigint NOT NULL AUTO_INCREMENT, `model_name` varchar(64) NOT NULL COMMENT '模型名称', `provider` varchar(32) NOT NULL COMMENT 'openai/zhipu/wenxin/qianwen/local', `api_base_url` varchar(256) DEFAULT NULL COMMENT 'API地址', `api_key_enc` varchar(512) DEFAULT NULL COMMENT '加密API Key', `model_version` varchar(64) DEFAULT NULL COMMENT '模型版本', `temperature` float DEFAULT 0.7 COMMENT '温度', `max_tokens` int DEFAULT 1000 COMMENT '最大Token', `timeout_seconds` int DEFAULT 30 COMMENT '超时秒数', `is_default` tinyint NOT NULL DEFAULT 0 COMMENT '是否默认模型', `is_enabled` tinyint NOT NULL DEFAULT 1 COMMENT '是否启用', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI模型配置表'; -- 系统配置表 CREATE TABLE IF NOT EXISTS `system_configs` ( `id` bigint NOT NULL AUTO_INCREMENT, `config_key` varchar(64) NOT NULL COMMENT '配置键', `config_value` text DEFAULT NULL COMMENT '配置值', `config_type` varchar(16) DEFAULT 'string' COMMENT '类型:string/int/json/bool', `description` varchar(256) DEFAULT NULL COMMENT '说明', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_config_key` (`config_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表'; -- 登录日志表 CREATE TABLE IF NOT EXISTS `login_logs` ( `id` bigint NOT NULL AUTO_INCREMENT, `user_id` bigint NOT NULL, `user_account` varchar(128) DEFAULT NULL, `action` varchar(16) NOT NULL COMMENT 'login/logout/refresh/fail', `session_id` varchar(128) DEFAULT NULL, `ip_address` varchar(64) DEFAULT NULL, `error_msg` varchar(512) DEFAULT NULL, `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_created_at` (`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='登录日志表'; -- 初始系统配置 INSERT INTO `system_configs` (`config_key`, `config_value`, `config_type`, `description`) VALUES ('interact_time_start', '08:00', 'string', '互动开始时间'), ('interact_time_end', '22:00', 'string', '互动结束时间'), ('interact_interval_min', '300', 'int', '互动最小间隔(秒)'), ('interact_interval_max', '1800', 'int', '互动最大间隔(秒)'), ('max_concurrent_users', '5', 'int', '并发登录用户数上限'), ('daily_token_limit', '100000', 'int', '每日全局Token上限'), ('today_token_used', '0', 'int', '今日已使用Token'), ('token_limit_reached', 'false', 'bool', 'Token限额是否已达上限'), -- 目标平台接口配置 ('news_platform_base_url', 'http://192.168.1.200:63120', 'string', '新闻业务平台接口地址'), ('auth_base_url', 'http://192.168.1.200:60040', 'string', '认证服务接口地址'), -- 目标平台客户端参数(需根据实际情况配置) ('platform_app_id', '', 'string', '平台appId(客户端标识)'), ('platform_access_id', '', 'string', '平台accessId(客户端accessId)'), ('platform_access_secret', '', 'string', '平台accessSecret(签名密钥,可为空)'), ('platform_client_code', '', 'string', '平台clientCode(登录用)'), ('platform_org_id', '', 'string', '平台组织Id(orgId,新闻列表必填)'), -- 互动概率 ('comment_probability', '0.4', 'string', '评论触发概率'), ('reply_probability', '0.2', 'string', '回复触发概率'), ('like_probability', '0.6', 'string', '点赞触发概率'), ('collect_probability', '0.3', 'string', '收藏触发概率'), ('forward_probability', '0.15', 'string', '转发触发概率'), ('system_start_time', NULL, 'string', '系统启动时间'), ('scheduler_enabled', 'true', 'bool', '调度器是否启用') ON DUPLICATE KEY UPDATE config_value = VALUES(config_value); SET FOREIGN_KEY_CHECKS = 1;