Pranavpro23/incident-response-env
GitHub: Pranavpro23/incident-response-env
一个基于OpenEnv框架的仿真环境,用于训练和评估AI智能体执行生产事故响应任务,涵盖告警分流、根因分析和故障修复三大场景。
Stars: 0 | Forks: 0
title: Incident Response Env
emoji: 🚨
colorFrom: red
colorTo: red
sdk: docker
app_port: 8000
pinned: false
tags:
- openenv
- sre
- incident-response
# Incident Response 环境
一个 **OpenEnv** 环境,用于训练 AI agent 扮演随叫随到的 Site Reliability Engineers (SRE),响应生产事故。该 agent 会调查系统告警、诊断根本原因、执行修复步骤并解决事故——这与人类工程师在真实生产系统中遵循的工作流程相同。
## 动机
随叫随到的事故响应是软件工程中风险最高、时间最紧迫的任务之一。工程师必须:
- 对嘈杂的、多服务的告警风暴进行分流
- 从日志、指标和部署历史中识别根本原因
- 执行正确的修复操作而不造成进一步损害
- 在关闭事故前验证恢复情况
此环境填补了当前 agent 基准测试的一个空白:它需要在模糊性下进行**因果推理**、**多步规划**以及**工具使用规范**——所有这些都在一个具有直接现实世界价值的领域中。
## 动作空间
```
class IncidentAction(Action):
command: str # one of the commands below
parameters: Dict[str, str] # command-specific key-value pairs
reasoning: str # agent's chain-of-thought (encourages deliberate action)
```
| Command | Parameters | Description |
|---|---|---|
| `check_alerts` | — | 列出所有活跃告警 |
| `check_service_health` | `service=` | 健康状态、错误率、延迟、CPU/内存 |
| `view_logs` | `service=` | 服务的近期日志条目 |
| `view_metrics` | `service=` | 详细指标(错误率、延迟、吞吐量) |
| `check_dependencies` | `service=` | 上游/下游依赖图 |
| `view_deployment_history` | `service=` | 近期部署及其版本和备注 |
| `classify_incident` | `severity=P1\|P2\|P3`, `affected_service=` | **任务 1 终止** — 对事故进行分类 |
| `identify_root_cause` | `cause=`, `component=` | **任务 2 终止** — 提交根本原因 |
| `restart_service` | `service=` | 重启服务(任务 3) |
| `scale_service` | `service=`, `replicas=` | 扩缩容服务(任务 3) |
| `rollback_deployment` | `service=` | 回滚到先前版本(任务 3) |
| `resolve_incident` | `resolution=` | **任务 3 终止** — 关闭事故 |
## 观察空间
```
class IncidentObservation(Observation):
message: str # situation summary
incident_id: str # e.g. "INC-20240315-001"
task_name: str # current task
step_number: int # current step
max_steps: int # episode limit
active_alerts: List[str] # live alert list
command_output: str # output of last command
available_commands: List[str] # commands for this task
task_objective: str # what the agent must accomplish
services_summary: Dict[str, str] # service → HEALTHY/DEGRADED/CRITICAL/CRASHING
done: bool # episode ended
reward: float # step reward
```
## 任务
### Task 1: `alert_triage` — 简单
**场景:** 支付服务在凌晨 2:47 宕机。多个下游告警正在触发。
**目标:** 识别事故严重程度(P1/P2/P3)和主要受影响服务。
**最大步数:** 8
**终止动作:** `classify_incident`
**评分:**
| Component | Score |
|---|---|
| 正确的严重程度 (P1) | +0.45 |
| 正确的服务 (payment-service) | +0.45 |
| 效率奖励(≤ 3 次调查步骤) | +0.10 |
| 调查动作(最多 4 次) | 每次 +0.05 |
### Task 2: `root_cause_analysis` — 中等
**场景:** Orders API 返回 503。数据库过载。25 分钟前运行了一次迁移。
**目标:** 识别根本原因类别和负责的具体组件。
**最大步数:** 12
**终止动作:** `identify_root_cause`
**评分:**
| Component | Score |
|---|---|
| 准确原因 (`missing_database_index`) | +0.50 |
| 部分原因(如 `slow_database_query`) | +0.20 |
| 准确组件 (`orders-db`) | +0.40 |
| 部分组件(如 `orders-api`) | +0.10 |
| 调查动作(最多 4 次) | 每次 +0.05 |
### Task 3: `incident_remediation` — 困难
**场景:** Auth 服务(v2.4.0,2小时前部署)存在内存泄漏,导致 OOM 崩溃。API 网关熔断器已开启。
**目标:** 诊断、回滚故障部署、验证恢复、解决事故。
**最大步数:** 20
**终止动作:** `resolve_incident`
**评分:**
| Step | Score |
|---|---|
| 调查动作(最多 4 × 0.05) | 最高 0.20 |
| `rollback_deployment auth-service`(正确修复) | +0.35 |
| 回滚后 `check_service_health auth-service`(健康) | +0.10 |
| auth 恢复后 `check_service_health api-gateway`(健康) | +0.10 |
| `resolve_incident`(基础) | +0.10 |
| 解决奖励:auth 已验证 | +0.10 |
| 解决奖励:gateway 已验证 | +0.10 |
**错误动作:** `restart_service`(临时性,+0.05),`scale_service`(无效,0),回滚错误服务(−0.05)。
## 奖励设计
奖励函数在整个轨迹中提供**密集的部分进展信号**:
- **调查动作**每次获得 `+0.05`(上限为 4 个不同命令,最高 `0.20`),以鼓励在采取行动前进行系统诊断
- **正确的终止动作**提供主要分数(0.40–0.90,取决于正确性)
- **错误的修复**会导致小幅扣分(`-0.05`),以阻止随机操作
- 任务 3 中的**验证步骤**单独奖励(每个 `+0.10`),以鼓励确认恢复情况
- 任务 1 中的**效率奖励**奖励自信正确的分类
这种设计避免了稀疏奖励问题,同时仍要求 agent 正确诊断。
## 基准分数
通过 HuggingFace 路由使用 `Qwen/Qwen2.5-72B-Instruct` 测量:
| Task | Score | Notes |
|---|---|---|
| `alert_triage` | **1.000** | 在 2 步内正确分类为 P1 + payment-service |
| `root_cause_analysis` | **0.550** | 正确组件 (orders-db),部分原因匹配 |
| `incident_remediation` | **0.850** | 在 7 步内回滚 + 验证 + 解决 |
任务 3 旨在挑战前沿模型——它要求 agent 停止重新调查并执行 `rollback_deployment` 动作,然后在解决前验证恢复。如果模型在调查中循环而不采取行动,得分会很低。
## 设置
### 前置条件
- Python 3.10+
- Docker
- `pip install openenv-core>=0.2.3`
### 本地运行(不使用 Docker)
```
cd incident_response_env
pip install -r requirements.txt
uvicorn server.app:app --host 0.0.0.0 --port 8000
```
### 使用 Docker 运行
```
docker build -t incident-response-env .
docker run -p 8000:8000 incident-response-env
```
### 运行推理脚本
```
# 针对运行中的本地服务器:
export API_BASE_URL="https://router.huggingface.co/v1"
export MODEL_NAME="Qwen/Qwen2.5-72B-Instruct"
export HF_TOKEN="your-token"
export ENV_BASE_URL="http://localhost:8000"
python inference.py
# 针对 Docker 镜像:
export LOCAL_IMAGE_NAME="incident-response-env:latest"
python inference.py
```
### 验证
```
openenv validate
```
## 项目结构
```
incident_response_env/
├── models.py # IncidentAction, IncidentObservation, IncidentState
├── scenarios.py # Scenario data for all 3 tasks
├── client.py # IncidentResponseEnv (typed WebSocket client)
├── server/
│ ├── app.py # FastAPI app (openenv create_app)
│ └── incident_environment.py # Environment logic, reward & grader
├── inference.py # Baseline inference script
├── openenv.yaml # OpenEnv spec metadata
├── pyproject.toml # Project dependencies & entry points
├── requirements.txt
├── Dockerfile
└── README.md
```
标签:AIOps, AI智能体, API集成, Docker, SRE, 人工智能, 偏差过滤, 可观测性, 因果推理, 多步规划, 安全防御评估, 故障恢复, 故障排查, 根因分析, 生产环境, 用户模式Hook绕过, 站点可靠性工程, 自动化运维, 警报管理, 训练环境, 请求拦截, 运维, 逆向工具