Vivek0925/incident-response-env
GitHub: Vivek0925/incident-response-env
一个用于训练和评估 AI 智能体解决 DevOps 生产故障的强化学习模拟环境,覆盖流量激增、数据库过载、部署失败等典型场景。
Stars: 0 | Forks: 0
## 标题: 事件响应环境
emoji: ⚡
colorFrom: purple
colorTo: blue
sdk: docker
pinned: false
# AI DevOps 事件响应环境
此环境模拟真实世界的 DevOps 事件,例如流量激增、
内存泄漏、数据库过载和部署失败。
## 为什么选择此环境
现代生产系统会以连锁方式发生故障:
```
traffic spike → database overload → service instability → rising error rates
```
该环境允许 AI 智能体在现实条件下——伴随着时间压力、级联故障和运营成本权衡——练习多步基础设施恢复。它反映了真实的站点可靠性工程师(Site Reliability Engineer)的决策循环。
## 观察空间
每一步都会返回完整的基础设施状态快照:
```
{
"incident": "traffic_spike",
"cpu_usage": 95,
"memory_usage": 80,
"database_latency": 100,
"network_errors": 5,
"error_rate": 8,
"servers": 3,
"time_elapsed_s": 12,
"resolved": false
}
```
| 字段 | 类型 | 描述 |
|---|---|---|
| `incident` | `string` | 活跃的事件类型 |
| `cpu_usage` | `int` | CPU 负载百分比 (0–100) |
| `memory_usage` | `int` | 内存使用百分比 (0–100) |
| `database_latency` | `int` | 数据库响应时间(毫秒) |
| `network_errors` | `int` | 每秒网络错误计数 |
| `error_rate` | `int` | 每秒 HTTP 5xx 错误数 |
| `servers` | `int` | 活跃的服务器实例数 |
| `time_elapsed_s` | `int` | 事件发生以来的秒数 |
| `resolved` | `bool` | 事件是否已解决 |
## 动作空间
6 种离散的基础设施动作:
| 动作 | 效果 | 最适用场景 |
|---|---|---|
| `scale_servers` | 增加服务器数量,降低 CPU 负载 | `traffic_spike` |
| `restart_service` | 重启应用进程,消除不稳定状态 | `failed_deployment` |
| `restart_database` | 重置数据库连接,降低延迟 | `database_overload` |
| `clear_cache` | 清空缓存,降低内存压力 | `traffic_spike`, `database_overload` |
| `rollback_deployment` | 回滚到上一个稳定版本 | `failed_deployment` |
| `ignore_alert` | 无操作 | — |
## 奖励函数
```
reward = -1 per step (time cost)
+ 10 for effective action
- 5 for wrong action
- 20 if system enters critical state
+ 100 on successful resolution
- 50 on episode timeout
```
最优策略能够及早识别事件类型,并以最少的步骤应用正确的动作链。
## 事件类型
### 简单 — 流量激增
突发的 HTTP 负载激增导致 CPU 饱和。可通过单个 `scale_servers` 动作解决。
### 中等 — 数据库过载
连接池耗尽导致延迟和错误率上升。需要执行 `restart_database` 或 `clear_cache`。
### 困难 — 部署失败
糟糕的发布引发跨层级联故障。需要在执行 `rollback_deployment` 之后执行 `restart_service`。
## 环境动态
### 级联故障
如果不及时处理,事件会持续恶化:
```
database overload → network errors rise → error rate spikes → service instability
```
### 基于时间的退化
在没有干预的情况下,每一步都会使系统健康状况恶化——CPU、内存和数据库延迟均会持续攀升。
### 事件传播
高难度事件会跨组件发生连锁反应,要求智能体按顺序解决多种故障模式。
## API 接口
### 重置环境
```
POST /reset?difficulty=easy # easy | medium | hard
```
### 执行动作
```
POST /step
Content-Type: application/json
{ "action": "restart_service" }
```
### 获取当前状态
```
GET /state
```
服务器运行后,可在 `/docs` 查看完整的交互式文档。
## 快速开始
```
# 安装依赖
pip install -r requirements.txt
# 启动环境服务器
python -m uvicorn server.app:app --reload
# 打开 API 文档
open http://127.0.0.1:8000/docs
```
### Docker
```
docker build -t incident-env .
docker run -p 8000:8000 incident-env
```
## 示例: 基线智能体
```
python baseline_agent.py
```
```
import requests, random
BASE = "http://localhost:8000"
ACTIONS = ["scale_servers", "restart_service", "restart_database",
"clear_cache", "rollback_deployment", "ignore_alert"]
obs = requests.post(f"{BASE}/reset", params={"difficulty": "easy"}).json()
total_reward = 0
for step in range(60):
action = random.choice(ACTIONS)
result = requests.post(f"{BASE}/step", json={"action": action}).json()
total_reward += result["reward"]
print(f"Step {step+1:02d} | {action:<22} | reward: {result['reward']:+.0f} | done: {result['done']}")
if result["done"]:
break
print(f"\nTotal reward: {total_reward:.0f}")
```
### 示例: LLM 智能体
```
import anthropic, requests
client = anthropic.Anthropic()
BASE = "http://localhost:8000"
ACTIONS = ["scale_servers", "restart_service", "restart_database",
"clear_cache", "rollback_deployment", "ignore_alert"]
obs = requests.post(f"{BASE}/reset", params={"difficulty": "hard"}).json()
for step in range(60):
result = client.messages.create(
model="claude-opus-4-5",
max_tokens=20,
messages=[{
"role": "user",
"content": f"""You are an SRE agent resolving a production incident.
State: {obs}
Actions: {', '.join(ACTIONS)}
Reply with only the single best action name."""
}]
)
action = result.content[0].text.strip()
step_result = requests.post(f"{BASE}/step", json={"action": action}).json()
obs = step_result["observation"]
print(f"Step {step+1:02d} | {action:<22} | reward: {step_result['reward']:+.0f}")
if step_result["done"]:
print(f"Resolved in {step+1} steps.")
break
```
## 项目结构
```
incident-response-env/
├── env/
│ └── incident_env.py # Core RL environment logic
├── tasks/
│ ├── scenarios.py # Incident definitions and difficulty tiers
│ └── graders.py # Reward and evaluation logic
├── server/
│ └── app.py # FastAPI server
├── baseline_agent.py # Random baseline agent
├── openenv.yaml # OpenEnv spec
├── requirements.txt
├── Dockerfile
└── README.md
```
## 评估指标
| 指标 | 描述 |
|---|---|
| 解决率 | 成功解决的事件百分比 |
| 平均解决步骤 | 已解决事件中的平均步骤数 |
| 平均事件奖励 | 每个事件的平均累积奖励 |
| 错误动作率 | 执行无效动作的步骤百分比 |
## 使用场景
- 训练自主 SRE 智能体
- 基准测试 LLM 的工具使用与规划能力
- 针对序列决策的强化学习研究
- DevOps 自动化原型设计
## 路线图
- [ ] Gymnasium (`gym.Env`) 包装器,用于兼容标准 RL 库
- [ ] 多事件级联场景
- [ ] 带有噪声/误导性警报的测试,以验证智能体的鲁棒性
- [ ] 智能体排行榜
## 许可证
MIT
标签:AIOps, AI训练环境, Docker, IT运维, Python, RL环境, Site Reliability Engineering, Socks5代理, SRE, 人工智能, 偏差过滤, 内存泄漏, 基础设施仿真, 多步决策, 大模型智能体, 安全防御评估, 强化学习, 故障恢复, 数据库过载, 无后门, 流量突增, 用户模式Hook绕过, 级联故障, 自动化运维, 请求拦截, 逆向工具, 部署失败