# AI虚拟用户新闻互动系统 > 基于AI驱动的虚拟用户新闻互动自动化平台,支持批量虚拟用户管理、AI人格生成、真实登录新闻平台、自动随机互动。 --- ## 📁 项目结构 ``` ai-virtual-news/ ├── docker-compose.yml # Docker编排文件 ├── docker/ │ └── mysql/ │ └── init.sql # 数据库初始化脚本 ├── backend/ # Python FastAPI 后端 │ ├── Dockerfile │ ├── requirements.txt │ └── app/ │ ├── main.py # 应用入口 │ ├── api/ # API路由层 │ ├── core/ # 核心配置(DB/Redis/日志) │ ├── models/ # SQLAlchemy ORM模型 │ ├── schemas/ # Pydantic数据模型 │ ├── services/ # 业务服务层 │ └── utils/ # 工具类(AES加密等) └── frontend/ # Vue3 前端 ├── Dockerfile ├── nginx.conf ├── src/ │ ├── views/ # 页面组件 │ ├── api/ # Axios API封装 │ ├── router/ # Vue Router │ ├── layouts/ # 布局组件 │ └── styles/ # 全局样式 └── package.json ``` --- ## 🚀 快速部署(1Panel Docker) ### 前置要求 - 已安装 1Panel 面板 - 已安装 Docker 及 Docker Compose - 服务器内网可访问新闻平台接口(192.168.1.200:63120) ### 第一步:修改环境配置 编辑 `docker-compose.yml`,修改以下**必须**更改的安全参数: ```yaml environment: - SECRET_KEY=your-secret-key-change-in-production # ⚠️ 必须修改 - AES_KEY=your-aes-key-32-chars-change-now! # ⚠️ 必须修改(必须32字符) - DB_PASSWORD=AiVirtual@2024 # ⚠️ 建议修改 ``` 同时修改 MySQL 的 `MYSQL_PASSWORD` 与 `DB_PASSWORD` 保持一致。 ### 第二步:通过 1Panel 部署 **方式A:1Panel 应用商店(推荐)** 1. 登录 1Panel → 应用商店 → 搜索 "Docker Compose" 2. 上传本项目目录 3. 点击部署 **方式B:SSH 命令行** ```bash # 1. 上传项目到服务器 scp -r ai-virtual-news/ root@your-server:/opt/ # 2. 进入项目目录 cd /opt/ai-virtual-news # 3. 启动所有服务 docker-compose up -d # 4. 查看启动日志 docker-compose logs -f ``` ### 第三步:访问系统 | 服务 | 地址 | |------|------| | 前端控制台 | http://服务器IP:9000 | | 后端API文档 | http://服务器IP:8000/api/docs | | MySQL | 服务器IP:3306 | | Redis | 服务器IP:6379 | --- ## ⚙️ 初始配置 ### 1. 配置AI模型 访问控制台 → **AI模型配置** → 添加模型: | 字段 | 说明 | 示例 | |------|------|------| | 模型名称 | 自定义名称 | GPT-4生产 | | 提供商 | 选择对应供应商 | OpenAI | | API地址 | 留空用默认 | https://api.openai.com/v1 | | API Key | 对应平台的Key | sk-... | | 模型版本 | 具体模型名 | gpt-4-turbo | > 配置完成后点击「设为默认」,系统将使用此模型进行所有AI操作。 > 点击「测试」验证模型可用性。 **支持的国产模型配置:** | 提供商 | API地址 | 模型版本示例 | |--------|---------|-------------| | 智谱GLM | https://open.bigmodel.cn/api/paas/v4 | glm-4 | | 文心一言 | https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat | ERNIE-Bot-4 | | 通义千问 | https://dashscope.aliyuncs.com/compatible-mode/v1 | qwen-turbo | ### 2. 配置新闻平台地址 访问控制台 → **调度设置** → 修改「平台接口地址」为实际地址。 ### 3. 创建虚拟用户 **方式A:单个创建** 控制台 → 虚拟用户 → 新增用户 → 填写账号密码 → 系统自动生成AI人格 **方式B:Excel批量导入** 1. 下载导入模板 2. 填写账号/密码/昵称等信息 3. 上传Excel,系统自动校验并为每个用户生成AI人格 ### 4. 启动自动互动 1. 确认用户已登录(状态为「已登录」) 2. 调度设置 → 确认互动时间段和概率配置 3. 调度器默认启动,系统将在设定时间段自动执行互动 --- ## 🔧 运维管理 ### Docker 常用命令 ```bash # 查看所有容器状态 docker compose ps # 重启后端服务(后端代码更新后执行) docker compose restart ai-virtual-backend # 查看后端实时日志 docker compose logs -f ai-virtual-backend # 停止所有服务 docker compose down # 启动所有服务 docker compose up -d # 进入后端容器 docker exec -it ai-virtual-backend bash # 进入MySQL docker exec -it ai-virtual-mysql mysql -u aivirtual -p ai_virtual_news ``` ### ⚠️ 前端更新(重要:必须用此方式) > `docker compose build` 存在缓存问题,前端代码修改后**必须**用以下方式重新 build,否则修改不会生效。 ```bash cd /opt/1panel/docker/compose/ai-virtual-news/frontend # 第一步:清缓存并 build(使用 node 镜像直接 build 宿主机目录) rm -rf dist node_modules/.vite docker run --rm -v $(pwd):/app -w /app node:18-alpine sh -c "npm run build" # 第二步:把 dist 复制到运行中的容器 docker cp dist/. ai-virtual-frontend:/usr/share/nginx/html/ # 第三步:重载 nginx(无需重启容器,立即生效) docker exec ai-virtual-frontend nginx -s reload ``` ### 数据备份(1Panel) 1. 1Panel → 数据库 → MySQL → 定时备份 2. 建议每天凌晨 3 点备份,保留 30 天 3. 或手动备份: ```bash docker exec ai-virtual-mysql mysqldump -u aivirtual -pAiVirtual@2024 ai_virtual_news > backup_$(date +%Y%m%d).sql ``` ### 日志位置 | 日志类型 | 容器路径 | 宿主机路径 | |----------|----------|------------| | 应用日志 | /app/logs/app_*.log | ./backend/logs/ | | 错误日志 | /app/logs/error_*.log | ./backend/logs/ | | AI调用日志 | /app/logs/ai_*.log | ./backend/logs/ | --- ## 🔒 安全注意事项 1. **AES密钥**:`AES_KEY` 必须修改为32字符随机字符串,用于加密存储账号密码 2. **数据库密码**:生产环境务必修改默认密码 3. **端口暴露**:建议通过 Nginx 反向代理访问,不要直接暴露 8000 端口 4. **防火墙**:MySQL(3306)、Redis(6379) 端口不应对外暴露 5. **互动频率**:合理设置互动间隔,避免触发新闻平台风控 --- ## 📊 功能模块说明 ### 数据看板 - 实时展示用户总数、在线数、今日互动量 - Token消耗折线图(近30天/7天) - 近12个月月度消耗柱状图 - 系统运行状态监控 ### 虚拟用户管理 - 新增/编辑/删除用户,账号密码AES加密存储 - Excel批量导入(含格式校验、去重、错误详情) - Excel批量导出(不含密码密文) - AI人格生成:性格/语言风格/兴趣/互动倾向/字数偏好 - 编辑用户资料(昵称/真实姓名/性别/头像/简介/邮箱),支持同步到目标平台 - 头像上传:上传图片到平台 filecenter,自动更新用户头像 - 单个/批量启用、禁用、登出操作 - 手动触发登录/登出 ### AI互动模块 - 真实调用新闻平台登录接口获取会话Token - 会话自动校验(10分钟/次),失效自动重登 - 随机翻页获取文章,按用户兴趣偏好筛选,自动过滤无效新闻 - AI生成贴合人格的评论/回复内容,内容完整不截断,自动过滤敏感词 - 按概率随机触发:评论/回复/点赞/收藏/转发 - 每日互动次数限额控制 - 互动记录支持手动重试、取消 ### AI模型配置 - 支持 OpenAI / 智谱GLM / 文心一言 / 通义千问 / 本地模型 - API Key AES加密存储 - 模型测试功能(验证可用性 + Token消耗预览) - 多模型管理,设置默认模型 ### 调度设置 - 互动时间段配置(北京时间) - 最小互动间隔控制(秒),防止同一用户频繁互动 - 各互动类型概率独立配置 - 并发用户数上限(0=不限) - 每日Token配额管控 - 一键暂停/启动调度器 - 立即触发互动(测试用) ### 日志管理 - 登录日志:登录/登出/失败记录 - 日志文件:应用日志/错误日志实时查看 - 日志下载 --- ## 🐛 常见问题 **Q: 容器启动失败,提示数据库连接失败?** A: MySQL 启动需要时间,后端依赖 healthcheck。等待 30-60 秒后重试:`docker compose restart ai-virtual-backend` **Q: 用户登录始终失败?** A: 1) 检查新闻平台接口地址是否正确;2) 检查账号密码是否正确;3) 查看后端日志定位具体错误 **Q: AI人格生成失败?** A: 未配置AI模型时系统会随机生成人格作为兜底,这是正常行为。配置有效的AI模型后可重新生成。 **Q: 调度器不执行互动?** A: 检查:1) 调度器是否启用;2) 是否在设定的互动时间段内(北京时间);3) 是否有已登录状态的用户;4) Token是否已达每日上限;5) 用户最近互动时间是否超过最小间隔 **Q: 前端修改后没有生效?** A: 不能用 `docker compose build`,必须用上方「前端更新」中的 node 镜像 build 方式。 **Q: 互动报"服务器繁忙"?** A: 通常是 orgId 为空导致。系统已自动从广场文章数据获取 orgId,如仍报错请检查文章是否有效。 **Q: 评论报敏感词?** A: AI 提示词已包含安全规则,偶发属正常,系统不重试敏感词失败。 **Q: 后端 502 错误?** A: 查看日志定位原因:`docker compose logs --tail=20 ai-virtual-backend | grep -E "Error|Exception"` --- ## 📞 技术支持 - 后端API文档:`http://服务器IP:8000/api/docs` - 接口健康检查:`http://服务器IP:8000/health`