Zayedkz/ai-incident-response-assistant
GitHub: Zayedkz/ai-incident-response-assistant
一款基于 FastAPI 构建的 AI 辅助故障响应服务,通过强类型事件接收和确定性时间线构建,帮助运维团队高效完成故障摘要、风险分级和响应动作推荐。
Stars: 0 | Forks: 0
# AI 故障响应助手
这是一个生产级别的故障工作流服务,用于接收运维事件、构建有序的时间线,并通过确定性的方式返回包含建议响应动作的故障摘要。
本项目作为 AI 运维、可靠性工具和企业故障工作流的工程项目作品而构建。它展示了 AI 故障助手的后端基础,后续计划加入持久化存储、日志关联 worker、实时更新、LLM 摘要和复盘文档起草功能。
## 为什么会有这个项目
故障响应通常从零散的告警、部署记录、指标、日志和聊天动态开始。团队往往会在还原事件经过、识别当前风险以及决定优先尝试哪种缓解方案上浪费大量时间。一个为 AI 准备的故障助手,在能够生成更丰富的故障指导之前,需要具备可靠的事件接收、严格的事件模型、可复现的时间线以及基于证据的摘要。
本仓库专注于上述基础能力:
- 围绕具体的运维问题创建故障
- 针对告警、日志、指标、部署和人工更新的强类型事件接收
- 按事件时间戳排序的确定性时间线构建
- 基于事件严重程度的风险分类
- 受影响服务的提取
- 基于严重程度和事件来源信号推导的推荐操作
- 为持久化、关联 worker 和 LLM 摘要预留的清晰扩展点
## 架构
```
flowchart LR
Operator[Operator or Alert Source] --> API[FastAPI API]
API --> Incidents[Incident Creation]
API --> Events[Typed Event Intake]
Events --> Store[(In-Memory Store)]
Store --> Timeline[Timeline Builder]
Timeline --> Summary[Deterministic Summarizer]
Summary --> Risk[Risk Classification]
Summary --> Actions[Recommended Actions]
FutureQueue[Future Redis Workers] --> Logs[Log Search Provider]
FutureQueue --> Metrics[Metric Correlation]
FutureQueue --> LLM[Evidence-Constrained LLM Summary]
API --> Obs[Structured Logs + Metrics]
```
当前的实现将存储保留在内存中,且摘要生成过程是确定性的,这使得本地开发和 CI 保持无依赖状态。PostgreSQL 和 Redis 已纳入项目规划,用于实现持久化存储、数据补充任务以及生产级别的工作流。
## 评审人员需关注的亮点
- FastAPI 服务,具备明确的故障和事件请求模型。
- 针对告警、日志、指标、部署和人工更新的强类型事件源。
- 针对 info、warning 和 critical 信号的强类型严重程度。
- 按事件时间戳进行时间线排序,并通过稳定的事件 ID 处理同频并发情况。
- 基于观察到的最高严重程度进行风险分类。
- 根据严重程度和事件源组合动态变化的推荐操作。
- 确定性行为,无需付费 API 即可轻松测试。
- 详尽的测试,涵盖 API 流程、缺失的故障、时间线排序、风险分类以及空故障情况。
- 系统设计文档涵盖了可扩展性、可用性、故障处理、可观测性和安全性。
## 功能
- `GET /health` 返回服务状态和环境信息。
- `POST /incidents` 创建一个故障。
- `POST /incidents/{incident_id}/events` 追加一个运维事件并返回更新后的风险级别。
- `GET /incidents/{incident_id}/summary` 返回时间线、风险、受影响的服务、摘要文本和推荐操作。
- Docker Compose 包含 PostgreSQL 和 Redis,用于规划中的持久化和队列架构。
- GitHub Actions 运行 Ruff 和 pytest。
## 技术栈
- Python 3.12
- FastAPI
- Pydantic Settings
- pytest
- Ruff
- PostgreSQL(已规划)
- Redis(已规划)
- 可选的日志搜索和 LLM 提供商(已规划)
- GitHub Actions
## 仓库导览
```
app/api/ FastAPI routers for health and incident workflows
app/core/ Environment-driven configuration
app/incidents/ Domain models, in-memory store, and deterministic summarizer
docs/ System design and production tradeoffs
tests/ Unit and API tests
docker-compose.yml Local PostgreSQL and Redis services for future persistence work
```
## 本地设置
创建环境文件:
```
cp .env.example .env
```
安装依赖项:
```
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
```
启动 API:
```
uvicorn app.main:app --reload
```
API 默认运行在 `http://localhost:8000`。
健康检查:
```
curl http://localhost:8000/health
```
启动本地基础设施,为未来的持久化和 worker 工作做准备:
```
docker compose up -d
```
## 演示流程
创建一个故障:
```
curl -X POST http://localhost:8000/incidents \
-H "Content-Type: application/json" \
-d '{"title":"Payments latency"}'
```
添加一个部署事件:
```
curl -X POST http://localhost:8000/incidents/{incident_id}/events \
-H "Content-Type: application/json" \
-d '{
"source": "deploy",
"severity": "info",
"message": "Payments deploy finished.",
"service": "payments",
"occurred_at": "2026-07-01T12:00:00Z",
"metadata": {"sha": "abc123"}
}'
```
添加一个 critical 级别的指标事件:
```
curl -X POST http://localhost:8000/incidents/{incident_id}/events \
-H "Content-Type: application/json" \
-d '{
"source": "metric",
"severity": "critical",
"message": "p95 latency exceeded 3 seconds.",
"service": "payments",
"occurred_at": "2026-07-01T12:03:00Z",
"metadata": {"region": "us-east-1"}
}'
```
生成摘要:
```
curl http://localhost:8000/incidents/{incident_id}/summary
```
摘要响应包含排序后的时间线条目、受影响的服务、风险级别、critical 事件计数、确定性摘要文本以及推荐操作。
## 环境变量
| 变量 | 用途 | 示例 |
| --- | --- | --- |
| `APP_ENV` | 运行时环境标签 | `local` |
| `LOG_LEVEL` | 日志详细程度 | `INFO` |
| `INCIDENT_STORE` | 预留的故障存储选择器 | `memory` |
| `LLM_PROVIDER` | 预留的摘要提供商选择器 | `mock` |
| `DATABASE_URL` | 预留的 PostgreSQL 连接字符串 | `postgresql+psycopg://...` |
| `REDIS_URL` | 预留的 Redis 连接字符串 | `redis://localhost:6381/0` |
## 测试
```
pytest
ruff check .
```
测试套件无需 Docker、外部告警提供商、日志系统或付费模型 API 即可验证故障工作流。
## 设计说明
更多详细信息请参阅 [docs/system-design.md](docs/system-design.md)。
关键权衡:
- 确定性摘要不如 LLM 生成的摘要表现力强,但它们是可复现且易于测试的。
- 内存存储使第一阶段的切片保持轻量且易于检查;而真实的故障历史记录则需要使用 PostgreSQL。
- 内联摘要使得 API 行为对于本地演示而言非常简单;生产环境的数据补充任务应移至基于 Redis 的 worker 中处理。
- 当前服务对故障证据进行了建模,但尚未对外部告警投递的 ID 强制执行幂等性。
- 未来的 LLM 输出应限制在仅使用时间线证据,并在调用提供商前对敏感日志或客户数据进行脱敏处理。
## 未来改进
- 添加 PostgreSQL 持久化支持和 Alembic 数据库迁移。
- 添加事件幂等键和特定于数据源的去重机制。
- 添加基于 Redis 的数据补充和关联 worker。
- 添加日志搜索和指标提供商的抽象层。
- 添加受证据约束的 LLM 摘要和复盘文档提供商。
- 添加基于 SSE 或 WebSocket 的实时故障时间线更新。
- 添加带审计历史的故障状态流转机制。
标签:AI运维, AV绕过, FastAPI, 可靠性工程, 安全规则引擎, 搜索引擎查询, 时间线构建, 测试用例, 版权保护, 运维监控, 逆向工具