Abhigyan-Shekhar/incident-response-env
GitHub: Abhigyan-Shekhar/incident-response-env
一个用于SRE事件响应分诊的OpenEnv仿真环境,通过模拟真实生产故障场景来评估AI Agent的推理和决策能力。
Stars: 0 | Forks: 0
title: IncidentResponseEnv
emoji: 🚨
colorFrom: red
colorTo: pink
sdk: docker
pinned: false
app_port: 8000
base_path: /
tags:
- openenv
# IncidentResponseEnv
IncidentResponseEnv 是一个用于 SRE 值班事件分诊的 OpenEnv 环境。它为 agent 提供了一个损坏的生产系统、真实的警报和日志,以及一个受限的修复接口。agent 必须调查事件、识别真正的根本原因、执行正确的修复措施,并提交合理的诊断报告。
此环境专为 OpenEnv 黑客松要求而构建:真实世界的任务、标准的 `reset()` / `step()` / `state()` 交互、三个难度级别、`[0.0, 1.0]` 范围内的确定性评分,以及可复现的基线执行。
在线部署:[abhi1203-incident-response-env.hf.space](https://abhi1203-incident-response-env.hf.space)
## 为什么这个任务很重要
SRE 事件响应是每家软件公司实际的生产工作流程。当服务在凌晨 2 点降级时,值班工程师必须在时间压力下跟踪跨依赖关系的症状、将根本原因与爆炸半径区分开来、应用正确的修复措施并恢复服务。这使其成为一个强有力的 OpenEnv 任务:
- 它是真实的人类工作,而不是玩具游戏
- 成功取决于对变化状态的顺序推理
- 错误的操作会带来运营成本
- 环境可以评估完整的轨迹,而不仅仅是最终答案
## 环境约定
环境暴露了标准的 OpenEnv 循环:
- `reset(difficulty)` 启动一个新的事件并返回初始观察
- `step(action)` 应用一个操作并返回更新后的观察和增量奖励
- `state()` 返回当前的环境状态、服务健康状况和分数明细
HTTP 服务器暴露:
- `GET /health`
- `POST /reset`
- `POST /step`
- `GET /state`
部署的 Space 在请求之间保持每个 episode 的状态,并在响应元数据中返回一个 `episode_id`,以便多步骤评估保持确定性。
## 观察和动作模型
一个观察包含:
- 事件图中的服务健康状况
- 活动警报
- 每个服务的最近日志
- 已调查的服务
- 已诊断的服务
- 已解决的服务
- 分数明细
Agent 使用类型化的 `IncidentAction` 进行操作:
- `investigate`
- `rollback`
- `scale_up`
- `restart`
- `enable_circuit_breaker`
- `submit_diagnosis`
`submit_diagnosis` 只有在根本原因服务被调查后才会获得奖励。中等和困难场景还需要来自受影响服务的佐证,因此 agent 无法通过从单个警报猜测来获得积分。
## 难度级别
| 级别 | 场景 | 必需行为 |
| --- | --- | --- |
| `easy` | `api-gateway` 因内存压力而崩溃 | 调查,识别 OOM,扩容,提交诊断 |
| `medium` | 错误的 `auth-service` 部署级联导致下游超时 | 调查受影响的服务,追踪到 `auth-service`,回滚,提交诊断 |
| `hard` | `db-primary`、`cache-cluster` 和 `ranking-ml` 因不同原因失败 | 消除症状歧义,遵守修复顺序,解决并诊断所有三个 |
难度递进是有意设计的。困难任务要求 agent 区分重叠的症状、调查依赖关系,并按正确顺序进行修复。
## 确定性评分
分数是确定性的,并限制在 `[0.0, 1.0]` 范围内。
- `+0.40` 恢复进度
- `+0.25` 正确诊断得分
- `+0.15` 在修复前提交诊断的奖励
- `+0.10` 在 15 步预算内的效率奖励
- `-0.20` 每次错误的破坏性操作
对于多根本原因事件,恢复和诊断按活动问题分配。这使得奖励对轨迹敏感,而非纯粹的输赢。
## 验证的基线结果
实时基线是针对部署的 Hugging Face Space 使用 Groq OpenAI 兼容端点进行端到端运行的:
| 任务 | 分数 | 步数 | 成功 |
| --- | --- | --- | --- |
| `easy` | `0.75` | `3` | `true` |
| `medium` | `0.7063` | `6` | `true` |
| `hard` | `0.6611` | `11` | `true` |
三个任务的平均奖励:`0.7058`
这展示了一条清晰的向下难度曲线,同时仍在所有任务上展示了成功完成。
## 快速开始
创建一个本地环境并运行确定性基线:
```
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
python3 -m pytest
python3 inference.py --planner heuristic
```
在本地启动 HTTP 服务器:
```
uvicorn server.app:app --host 0.0.0.0 --port 8000
```
针对 OpenEnv 进行验证:
```
source .venv/bin/activate
python3 -m openenv.cli validate
```
## LLM 基线
`inference.py` 支持:
- `--planner heuristic` 用于确定性基线
- `--planner llm` 用于 OpenAI 兼容端点
- `--planner auto` 在配置时使用 LLM,否则回退到启发式
预期的环境变量:
- `API_BASE_URL`
- `MODEL_NAME`
- `HF_TOKEN`
使用 Groq 的示例:
```
API_BASE_URL="https://api.groq.com/openai/v1" \
MODEL_NAME="llama-3.3-70b-versatile" \
HF_TOKEN="$YOUR_GROQ_API_KEY" \
python3 inference.py --planner llm
```
端到端验证实时部署的环境:
```
source .venv/bin/activate
PYTHONPATH=. python3 scripts/live_space_eval.py
```
## 部署
此仓库包含:
- `openenv.yaml`
- `Dockerfile`
- `server/app.py`
Hugging Face Space 配置为 Docker Space,并需要:
- `API_BASE_URL` 作为变量
- `MODEL_NAME` 作为变量
- `HF_TOKEN` 作为密钥
## 仓库布局
- `incident_response_env/environment.py`: 确定性事件引擎
- `incident_response_env/scenarios.py`: 简单、中等和困难的事件定义
- `incident_response_env/agent.py`: 启发式和 OpenAI 兼容的规划器
- `inference.py`: 带有结构化 `[START]`、`[STEP]` 和 `[END]` 日志的基线运行器
- `scripts/live_space_eval.py`: 实时部署验证器
- `tests/test_environment.py`: 回归覆盖
标签:API集成, BurpSuite集成, Docker, HF Spaces, HTTP工具, OpenEnv, Petitpotam, Python, SRE, 事故响应, 偏差过滤, 可观测性, 告警处理, 子域名变形, 安全防御评估, 库, 应急响应, 强化学习, 故障修复, 故障诊断, 无后门, 无线安全, 根因分析, 模拟环境, 生产环境仿真, 站点可靠性工程, 请求拦截, 运维演练, 运维自动化, 逆向工具, 配置错误