151 lines
3.9 KiB
Markdown
151 lines
3.9 KiB
Markdown
|
|
## AI 告警平台开发计划
|
|||
|
|
|
|||
|
|
### 项目定位
|
|||
|
|
**职责**:仅接收边缘端告警、保存告警证据、提供可视化与人工处理能力
|
|||
|
|
**不负责**:设备管理、推理逻辑、用户体系(复用芋道前端用户体系)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 一、边缘端 → 告警平台 数据协议
|
|||
|
|
|
|||
|
|
**传输方式**:multipart/form-data(JSON + 图片文件)
|
|||
|
|
|
|||
|
|
**JSON 字段**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"camera_id": "cam-001",
|
|||
|
|
"roi_id": "roi-01",
|
|||
|
|
"alert_type": "leave_post",
|
|||
|
|
"algorithm": "LeavePostAlgorithm",
|
|||
|
|
"confidence": 0.85,
|
|||
|
|
"duration_minutes": 5,
|
|||
|
|
"trigger_time": "2024-01-20T10:30:00Z",
|
|||
|
|
"message": "离岗告警"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**图片字段**:`snapshot`(二进制文件)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 二、后端架构(FastAPI)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
alert_platform/
|
|||
|
|
├── app/
|
|||
|
|
│ ├── main.py # FastAPI 入口
|
|||
|
|
│ ├── config.py # 配置(SQLite + 图片存储路径)
|
|||
|
|
│ ├── models.py # SQLAlchemy 告警模型
|
|||
|
|
│ ├── schemas.py # Pydantic 请求/响应模型
|
|||
|
|
│ ├── api/
|
|||
|
|
│ │ └── alert.py # 告警接收 & 查询接口
|
|||
|
|
│ ├── service/
|
|||
|
|
│ │ ├── alert_service.py # 告警业务逻辑
|
|||
|
|
│ │ └── analyzer.py # 异步大模型分析
|
|||
|
|
│ └── storage.py # 图片存储
|
|||
|
|
├── data/ # SQLite + 图片目录
|
|||
|
|
├── requirements.txt
|
|||
|
|
└── Dockerfile
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**核心接口**:
|
|||
|
|
| 方法 | 路径 | 描述 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| POST | `/api/v1/alerts` | 接收边缘端告警(multipart/form-data) |
|
|||
|
|
| GET | `/api/v1/alerts` | 查询告警列表(分页 + 筛选) |
|
|||
|
|
| GET | `/api/v1/alerts/{id}` | 告警详情 |
|
|||
|
|
| PUT | `/api/v1/alerts/{id}/handle` | 处理告警(确认/忽略/备注) |
|
|||
|
|
| GET | `/api/v1/alerts/{id}/image` | 获取告警图片 |
|
|||
|
|
| GET | `/api/v1/alerts/statistics` | 告警统计 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 三、前端架构(芋道 UI)
|
|||
|
|
|
|||
|
|
**在 yudao-ui-admin-vben 中新增模块**:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
apps/web-antd/src/
|
|||
|
|
├── api/alert/
|
|||
|
|
│ └── alert.ts # 告警 API
|
|||
|
|
├── views/alert/
|
|||
|
|
│ ├── list/
|
|||
|
|
│ │ ├── data.ts # 列表表单/列配置
|
|||
|
|
│ │ └── index.vue # 告警列表页
|
|||
|
|
│ └── detail/
|
|||
|
|
│ ├── data.ts
|
|||
|
|
│ └── index.vue # 告警详情页
|
|||
|
|
└── router/routes/modules/
|
|||
|
|
└── alert.ts # 告警路由
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**前端功能**:
|
|||
|
|
- 告警列表:时间/类型/状态筛选 + 分页
|
|||
|
|
- 告警详情:图片展示 + 算法信息 + 离岗时长
|
|||
|
|
- 人工处理:确认、忽略、备注操作
|
|||
|
|
- 大模型分析结果展示(可选)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 四、大模型分析(异步)
|
|||
|
|
|
|||
|
|
**流程**:
|
|||
|
|
1. 告警写入数据库后,触发异步任务
|
|||
|
|
2. 任务队列发送图片 + 上下文到大模型服务
|
|||
|
|
3. 大模型返回:风险等级、告警描述、误报建议
|
|||
|
|
4. 结果写入告警记录的 `ai_analysis` 扩展字段
|
|||
|
|
|
|||
|
|
**实现方式**:Python `asyncio` 或 Celery(预留)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 五、技术栈
|
|||
|
|
|
|||
|
|
| 层级 | 技术 |
|
|||
|
|
|------|------|
|
|||
|
|
| 后端框架 | FastAPI + Uvicorn |
|
|||
|
|
| 数据库 | SQLite(轻量)或 MySQL |
|
|||
|
|
| 图片存储 | 本地文件系统 / 对象存储 |
|
|||
|
|
| 前端框架 | Vue 3 + Vben Admin(芋道) |
|
|||
|
|
| 异步任务 | asyncio(预留 Celery) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 六、开发优先级
|
|||
|
|
|
|||
|
|
**Phase 1(核心)**:
|
|||
|
|
1. 后端告警接收接口(multipart/form-data)
|
|||
|
|
2. 图片存储与访问
|
|||
|
|
3. SQLite 持久化
|
|||
|
|
4. 告警查询接口
|
|||
|
|
|
|||
|
|
**Phase 2(前端)**:
|
|||
|
|
1. 告警列表页
|
|||
|
|
2. 告警详情页
|
|||
|
|
3. 人工处理功能
|
|||
|
|
|
|||
|
|
**Phase 3(增强)**:
|
|||
|
|
1. 异步大模型分析
|
|||
|
|
2. 告警统计图表
|
|||
|
|
3. Docker 部署
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 七、与 ai_edge 对接示例
|
|||
|
|
|
|||
|
|
边缘端(ai_edge)调用:
|
|||
|
|
```python
|
|||
|
|
import requests
|
|||
|
|
|
|||
|
|
files = {
|
|||
|
|
'snapshot': ('alert.jpg', image_bytes, 'image/jpeg'),
|
|||
|
|
'data': (None, json.dumps(alert_data), 'application/json')
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response = requests.post(
|
|||
|
|
"http://alert-platform/api/v1/alerts",
|
|||
|
|
files=files
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|