Files
huihuiSquare/ARCHITECTURE.md
2026-03-23 15:30:38 +08:00

491 lines
14 KiB
Markdown
Raw Permalink 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 互动系统 - 架构设计文档
## 一、系统架构
### 1.1 整体架构图
```
┌─────────────────────────────────────────────────────┐
│ 用户层 │
│ (浏览器 / 移动端) │
└──────────────────┬──────────────────────────────────┘
│ HTTP/HTTPS
┌──────────────────▼──────────────────────────────────┐
│ Nginx │
│ (反向代理 / 静态资源) │
└──────────────────┬──────────────────────────────────┘
┌─────────┴─────────┐
│ │
┌────────▼────────┐ ┌──────▼────────┐
│ Frontend │ │ Backend │
│ Vue3 + │ │ FastAPI │
│ Element Plus │ │ Python │
│ (端口80) │ │ (端口8000) │
└─────────────────┘ └──────┬────────┘
┌─────────────┼─────────────┐
│ │ │
┌──────▼──────┐ ┌───▼────┐ ┌─────▼─────┐
│ MySQL │ │ Redis │ │ 定时任务 │
│ 数据库 │ │ (可选) │ │ 调度器 │
└─────────────┘ └────────┘ └───────────┘
┌─────────────┼─────────────┐
│ │ │
┌──────▼──────┐ ┌───▼────┐ ┌─────▼─────┐
│ 会会 API │ │ AI 模型 │ │ 文件存储 │
│ 接口服务 │ │ 服务 │ │ ( uploads)│
└─────────────┘ └────────┘ └───────────┘
```
### 1.2 技术栈选型
| 层级 | 技术 | 说明 |
|------|------|------|
| **前端** | Vue 3 | 渐进式 JavaScript 框架 |
| | Element Plus | UI 组件库 |
| | Pinia | 状态管理 |
| | Vue Router | 路由管理 |
| | ECharts | 数据可视化 |
| **后端** | Python 3.11 | 编程语言 |
| | FastAPI | 高性能 Web 框架 |
| | SQLAlchemy | ORM 框架 |
| | Pydantic | 数据验证 |
| | APScheduler | 定时任务调度 |
| **数据库** | MySQL 8.0 | 关系型数据库 |
| **AI 对接** | OpenAI SDK | GPT 系列模型 |
| | Zhipu SDK | 智谱 AI 模型 |
| **部署** | Docker | 容器化 |
| | Docker Compose | 编排工具 |
| | Nginx | Web 服务器 |
## 二、模块设计
### 2.1 后端模块划分
```
backend/app/
├── main.py # 应用入口
├── core/ # 核心配置
│ ├── config.py # 系统配置
│ └── __init__.py
├── models/ # 数据库模型
│ ├── base.py # 数据库基础
│ ├── virtual_user.py # 虚拟用户模型
│ ├── interaction.py # 互动记录模型
│ ├── token_usage.py # Token 使用模型
│ ├── system_config.py # 系统配置模型
│ ├── ai_model.py # AI 模型配置模型
│ └── news_cache.py # 新闻缓存模型
├── schemas/ # Pydantic Schema
│ ├── virtual_user.py # 虚拟用户 Schema
│ ├── interaction.py # 互动 Schema
│ ├── dashboard.py # 控制台 Schema
│ ├── ai_model.py # AI 模型 Schema
│ └── system_config.py # 系统配置 Schema
├── services/ # 业务服务
│ ├── huihui_api.py # 会会接口服务
│ ├── ai_service.py # AI 服务
│ ├── virtual_user_service.py # 虚拟用户服务
│ ├── interaction_service.py # 互动服务
│ ├── token_service.py # Token 统计服务
│ └── scheduler_service.py # 定时任务服务
├── api/ # API 路由
│ ├── router.py # 路由注册
│ ├── virtual_user.py # 虚拟用户 API
│ ├── interaction.py # 互动 API
│ ├── ai_model.py # AI 模型 API
│ ├── dashboard.py # 控制台 API
│ └── system_config.py # 系统配置 API
└── utils/ # 工具函数
```
### 2.2 前端模块划分
```
frontend/src/
├── main.js # 应用入口
├── App.vue # 根组件
├── router/ # 路由配置
│ └── index.js
├── api/ # API 接口
│ ├── request.js # Axios 封装
│ └── index.js # API 定义
├── views/ # 页面组件
│ ├── Dashboard.vue # 控制台
│ ├── VirtualUsers.vue # 虚拟用户管理
│ ├── Interactions.vue # 互动记录
│ ├── AIModels.vue # AI 模型配置
│ └── Settings.vue # 系统设置
├── components/ # 公共组件
├── stores/ # Pinia 状态管理
└── utils/ # 工具函数
```
## 三、数据库设计
### 3.1 ER 图
```
┌─────────────────┐ ┌──────────────────┐
│ virtual_users │ │ ai_model_configs │
│─────────────────│ │──────────────────│
│ id (PK) │ │ id (PK) │
│ username │ │ model_name │
│ password │ │ provider │
│ nickname │ │ api_key │
│ avatar_url │ │ is_default │
│ writing_style │ │ is_active │
│ activity_level │ └──────────────────┘
│ status │
│ session_token │ ┌──────────────────┐
│ total_interactions│ │ system_configs │
│ today_comments │ │──────────────────│
│ today_replies │ │ id (PK) │
└────────┬────────┘ │ config_key │
│ │ config_value │
│ 1 │ config_type │
│ └──────────────────┘
│ N
┌────────▼────────┐ ┌──────────────────┐
│interaction_records│ │ token_usages │
│─────────────────│ │──────────────────│
│ id (PK) │ │ id (PK) │
│ virtual_user_id │(FK) │ virtual_user_id │
│ news_id │ │ interaction_id │
│ news_title │ │ tokens_used │
│ interaction_type│ │ ai_model │
│ content │ │ action_type │
│ status │ │ usage_date │
│ retry_count │ └──────────────────┘
│ tokens_used │
│ ai_model_used │ ┌──────────────────┐
└─────────────────┘ │ news_cache │
│──────────────────│
│ id (PK) │
│ news_id │
│ title │
│ content │
│ category │
│ cache_date │
└──────────────────┘
```
### 3.2 核心表结构
#### virtual_users (虚拟用户表)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | INT | 主键 |
| username | VARCHAR(100) | 用户名(唯一) |
| password | VARCHAR(200) | 密码(加密) |
| nickname | VARCHAR(100) | 昵称 |
| avatar_url | VARCHAR(500) | 头像 URL |
| writing_style | VARCHAR(50) | 写作风格 |
| activity_level | ENUM | 活跃度low/medium/high |
| persona_description | TEXT | AI 生成的人格描述 |
| status | ENUM | 状态active/disabled |
| is_logged_in | BOOLEAN | 是否已登录 |
| session_token | VARCHAR(500) | 会话 Token |
| total_interactions | INT | 总互动次数 |
| today_comments | INT | 今日评论数 |
| today_replies | INT | 今日回复数 |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |
#### interaction_records (互动记录表)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | INT | 主键 |
| virtual_user_id | INT | 虚拟用户 ID外键 |
| news_id | VARCHAR(100) | 新闻 ID |
| news_title | VARCHAR(500) | 新闻标题 |
| interaction_type | ENUM | 类型comment/reply/like/favorite/share |
| content | TEXT | 互动内容 |
| target_comment_id | VARCHAR(100) | 目标评论 ID回复时 |
| status | ENUM | 状态pending/success/failed |
| retry_count | INT | 重试次数 |
| error_message | TEXT | 错误信息 |
| tokens_used | INT | 消耗 Token 数 |
| execution_time | DATETIME | 执行时间 |
## 四、核心流程设计
### 4.1 虚拟用户生成流程
```
开始
接收生成请求
(count, styles, levels)
循环 count 次
├─► 生成唯一用户名
├─► 随机生成昵称
├─► 生成随机密码
├─► 选择写作风格
├─► 选择活跃度级别
├─► 调用 AI 生成人格描述
├─► 生成头像 URL
├─► 保存到数据库
返回生成的用户列表
结束
```
### 4.2 自动互动执行流程
```
定时任务触发
检查活动时间段
├─否─► 跳过本次执行
获取活跃虚拟用户列表
随机选择一个用户
检查用户活跃度概率
├─不通过─► 跳过
通过
检查今日限额
├─超出─► 跳过
未超出
随机选择新闻
确定互动类型
(点赞/收藏/转发/评论/回复)
如果是评论/回复
├─► 调用 AI 生成内容
├─► 记录 Token 消耗
调用会会接口执行互动
记录互动结果
更新用户统计
结束
```
### 4.3 AI 内容生成流程
```
接收生成请求
(新闻内容,写作风格,人格)
构建提示词 Prompt
获取默认 AI 模型配置
根据 provider 选择 SDK
├─► OpenAI: 调用 GPT API
├─► Zhipu: 调用 GLM API
├─► Baidu: 调用文心 API
└─► Aliyun: 调用通义 API
接收 AI 响应
解析内容和 Token 数
记录 Token 使用
返回生成结果
结束
```
## 五、API 设计规范
### 5.1 RESTful API 规范
所有 API 遵循 RESTful 设计风格:
```
GET /api/v1/resource # 获取资源列表
GET /api/v1/resource/{id} # 获取单个资源
POST /api/v1/resource # 创建资源
PUT /api/v1/resource/{id} # 更新资源
DELETE /api/v1/resource/{id} # 删除资源
POST /api/v1/resource/action # 资源操作
```
### 5.2 统一响应格式
成功响应:
```json
{
"data": { ... },
"message": "success"
}
```
列表响应:
```json
{
"total": 100,
"items": [ ... ]
}
```
错误响应:
```json
{
"detail": "错误信息",
"status_code": 400
}
```
### 5.3 分页参数
```
GET /api/v1/virtual-users?page=1&page_size=20
```
响应:
```json
{
"total": 100,
"items": [...],
"page": 1,
"page_size": 20
}
```
## 六、安全设计
### 6.1 认证授权
- JWT Token 认证
- Token 有效期 7 天
- 支持刷新 Token
### 6.2 数据安全
- 密码加密存储bcrypt
- API Key 加密存储
- SQL 注入防护ORM 参数化)
- XSS 防护(前端输入过滤)
### 6.3 限流策略
- API 请求限流
- Token 消耗限额
- 单用户互动频次限制
## 七、性能优化
### 7.1 数据库优化
- 索引优化username, status, execution_time
- 分页查询
- 批量操作
### 7.2 缓存策略
- 新闻数据缓存
- 系统配置缓存
- 字典数据缓存
### 7.3 并发控制
- 数据库连接池20-60
- 异步 IOFastAPI + asyncio
- 定时任务并发控制
## 八、扩展性设计
### 8.1 插件化 AI 模型
支持通过配置添加新的 AI 模型提供商,无需修改代码。
### 8.2 可配置的互动策略
所有互动参数可通过系统配置调整:
- 互动概率
- 活跃度分级
- 时间段控制
### 8.3 模块化设计
各功能模块独立,易于扩展新功能:
- 新增互动类型
- 新增数据源
- 新增统计维度
## 九、监控与日志
### 9.1 日志系统
- 应用日志INFO/WARNING/ERROR
- 访问日志
- 慢查询日志
- 日志轮转(保留 30 天)
### 9.2 健康检查
```bash
GET /health
```
响应:
```json
{
"status": "healthy",
"scheduler_running": true
}
```
### 9.3 指标监控
- API 响应时间
- 数据库查询性能
- AI 调用成功率
- Token 消耗速率
---
**文档版本**: v1.0
**更新日期**: 2026-03-23