- 创建 FastAPI 项目结构 - 实现告警数据模型(SQLAlchemy) - 实现 multipart/form-data 告警接收接口 - 实现阿里云 OSS 图片上传模块 - 实现告警查询和处理 API - 实现异步大模型分析模块
3.9 KiB
3.9 KiB
AI 告警平台开发计划
项目定位
职责:仅接收边缘端告警、保存告警证据、提供可视化与人工处理能力
不负责:设备管理、推理逻辑、用户体系(复用芋道前端用户体系)
一、边缘端 → 告警平台 数据协议
传输方式:multipart/form-data(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 # 告警路由
前端功能:
- 告警列表:时间/类型/状态筛选 + 分页
- 告警详情:图片展示 + 算法信息 + 离岗时长
- 人工处理:确认、忽略、备注操作
- 大模型分析结果展示(可选)
四、大模型分析(异步)
流程:
- 告警写入数据库后,触发异步任务
- 任务队列发送图片 + 上下文到大模型服务
- 大模型返回:风险等级、告警描述、误报建议
- 结果写入告警记录的
ai_analysis扩展字段
实现方式:Python asyncio 或 Celery(预留)
五、技术栈
| 层级 | 技术 |
|---|---|
| 后端框架 | FastAPI + Uvicorn |
| 数据库 | SQLite(轻量)或 MySQL |
| 图片存储 | 本地文件系统 / 对象存储 |
| 前端框架 | Vue 3 + Vben Admin(芋道) |
| 异步任务 | asyncio(预留 Celery) |
六、开发优先级
Phase 1(核心):
- 后端告警接收接口(multipart/form-data)
- 图片存储与访问
- SQLite 持久化
- 告警查询接口
Phase 2(前端):
- 告警列表页
- 告警详情页
- 人工处理功能
Phase 3(增强):
- 异步大模型分析
- 告警统计图表
- Docker 部署
七、与 ai_edge 对接示例
边缘端(ai_edge)调用:
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
)