- 虚拟用户管理(昵称/头像/性别/简介/邮箱同步到目标平台) - AI互动调度(点赞/收藏/评论/转发) - 日志时间改为北京时间 - 评论达上限后继续执行点赞收藏转发 - 一键登出全部功能 - 浅色主题UI
295 lines
9.6 KiB
Markdown
295 lines
9.6 KiB
Markdown
# 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`
|