feat: AI虚拟用户新闻互动系统 v1.3.0 初始提交

- 虚拟用户管理(昵称/头像/性别/简介/邮箱同步到目标平台)
- AI互动调度(点赞/收藏/评论/转发)
- 日志时间改为北京时间
- 评论达上限后继续执行点赞收藏转发
- 一键登出全部功能
- 浅色主题UI
This commit is contained in:
stefanfeng
2026-03-31 10:20:57 +08:00
commit 0cfc9bf9c8
53 changed files with 8457 additions and 0 deletions

294
README.md Normal file
View File

@@ -0,0 +1,294 @@
# 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 部署
**方式A1Panel 应用商店(推荐)**
1. 登录 1Panel → 应用商店 → 搜索 "Docker Compose"
2. 上传本项目目录
3. 点击部署
**方式BSSH 命令行**
```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人格
**方式BExcel批量导入**
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`