Files
huihuiSquare/docker/mysql/init.sql
stefanfeng 0cfc9bf9c8 feat: AI虚拟用户新闻互动系统 v1.3.0 初始提交
- 虚拟用户管理(昵称/头像/性别/简介/邮箱同步到目标平台)
- AI互动调度(点赞/收藏/评论/转发)
- 日志时间改为北京时间
- 评论达上限后继续执行点赞收藏转发
- 一键登出全部功能
- 浅色主题UI
2026-03-31 10:20:57 +08:00

168 lines
9.0 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 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', '平台组织IdorgId新闻列表必填'),
-- 互动概率
('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;