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

295 lines
9.6 KiB
Markdown
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虚拟用户新闻互动系统
> 基于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`