Khushi-Agrawal-2019/pagersim-openenv
GitHub: Khushi-Agrawal-2019/pagersim-openenv
一个模拟真实 SRE On-Call 工作流的 OpenEnv 环境,让 AI Agent 学习从告警分析到根因定位再到事后复盘的完整事件响应流程。
Stars: 0 | Forks: 0
# PagerSim-OpenEnv
**面向 AI Agent 训练的 SRE 事件响应模拟**
[](https://huggingface.co/spaces/YOUR_HF_USERNAME/pagersim-openenv)
[](https://python.org)
## 概述
PagerSim-OpenEnv 模拟了生产环境中 SRE(站点可靠性工程师)的 On-Call 工作流程。AI Agent 接收监控告警和日志,调查服务,识别根因,应用修复措施并撰写事后复盘报告——其行为与真实工程师响应 PagerDuty 事件完全一致。
该环境是为 Meta PyTorch OpenEnv Hackathon 构建的,旨在填补一个真实的空白:目前尚无用于训练 Agent 执行运维/DevOps 任务的 OpenEnv 环境。
## 环境描述
Agent 在生产事故中扮演 On-Call SRE 的角色。在每一步中,它会:
- 从监控系统中读取告警和日志
- 采取调查或纠正措施
- 因正确的行为获得奖励塑形(Shaped Rewards)
- 必须识别根因并撰写事后复盘报告以完全解决问题
## 观察空间 (Observation Space)
```
{
"incident_id": "INC-EASY-001",
"task_id": "easy",
"timestamp": "T+45s",
"alerts": [{"service_name": "payment-service", "severity": "critical", "message": "..."}],
"logs": [{"timestamp": "T+0s", "service": "payment-service", "level": "ERROR", "message": "..."}],
"current_status": {"payment-service": "down", "postgres-db": "degraded"},
"time_elapsed": 45,
"time_limit": 300,
"actions_taken": ["investigate_service:payment-service"],
"hint": null
}
```
## 动作空间 (Action Space)
| 动作 | 是否需要目标 | 描述 |
|---|---|---|
| `investigate_service` | 是 | 显示服务的隐藏日志 |
| `check_dependencies` | 是 | 显示服务依赖图 |
| `restart_service` | 是 | 重启特定服务 |
| `rollback_deployment` | 是 | 回滚部署 |
| `escalate` | 否 | 呼叫(Page)其他团队 |
| `silence_alert` | 是 | 静默噪音告警 |
| `write_postmortem` | 否 | 提交根因分析 |
| `declare_resolved` | 否 | 结束该轮 Episode |
```
{
"action_type": "investigate_service",
"target_service": "payment-service",
"reasoning": "Starting with the critically down service",
"postmortem": null
}
```
## 奖励函数 (Reward Function)
| 事件 | 奖励 |
|---|---|
| 调查正确的服务 | +0.15 |
| 正确检查依赖关系 | +0.10 |
| 应用正确的修复 | +0.20 |
| 事后复盘中的根因正确 | +0.20 |
| 事后复盘质量 | +0.15 |
| 声明已解决(包含修复 + 复盘) | +0.25 |
| 错误的重启/回滚 | -0.10 |
| 冗余调查(3次以上) | -0.05 |
| 超时 | -0.15 |
| 过早解决 | -0.10 |
**最高分:1.0**(封顶)
## 任务
### 简单 — 数据库过载
- **服务:** payment-service, postgres-db
- **根因:** 连接池耗尽
- **时间限制:** 300s / 10 步
- **预期难度:** GPT-4o-mini 可稳定解决
### 中等 — 级联认证故障
- **服务:** api-gateway, auth-service, user-service
- **根因:** auth-service v2.3.1 部署中的内存泄漏
- **复杂情况:** api-gateway 显示错误,但它是受害者而非原因
- **时间限制:** 600s / 15 步
### 困难 — 速率限制器配置错误
- **服务:** frontend, api-gateway, payment-service, notification-service, cdn
- **根因:** api-gateway 的 rate_limiter.yaml 意外被设置为 10 req/min
- **干扰项:** payment-service 30分钟前曾进行部署 —— 并非原因
- **时间限制:** 900s / 20 步
## 基线分数
遵循最优动作序列的基于规则的 Agent:
| 任务 | 分数 | 步数 |
|---|---|---|
| easy | 0.85 | 6 |
| medium | 0.75 | 7 |
| hard | 0.65 | 7 |
| **平均** | **0.75** | |
## 设置
```
# 克隆并安装
git clone https://huggingface.co/spaces/YOUR_HF_USERNAME/pagersim-openenv
cd pagersim-openenv
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 运行 server
python3 -m uvicorn api.server:app --host 0.0.0.0 --port 7860
```
## 使用示例
```
import requests
BASE = "http://localhost:7860"
# 启动 episode
obs = requests.post(f"{BASE}/reset", json={"task_id": "easy"}).json()
print(obs["alerts"])
# 执行 action
result = requests.post(f"{BASE}/step", json={
"action_type": "investigate_service",
"target_service": "payment-service",
"reasoning": "Starting with the critically down service"
}).json()
print(result["reward"]["score"])
print(result["reward"]["feedback"])
```
## Docker
```
docker build -t pagersim-openenv .
docker run -p 7860:7860 pagersim-openenv
```
## API 端点
| 方法 | 端点 | 描述 |
|---|---|---|
| GET | `/health` | 健康检查 |
| GET | `/tasks` | 列出所有任务 + 动作 Schema |
| POST | `/reset` | 开始新的 Episode `{"task_id": "easy"}` |
| POST | `/step` | 提交动作 |
| GET | `/state` | 当前 Episode 状态 |
| POST | `/grader` | 对完整 Episode 进行评分 |
| POST | `/baseline` | 运行基于规则的基线 Agent |
| GET | `/docs` | 交互式 API 文档 |
标签:OpenEnv, PagerDuty, Python, RL环境, SRE, 人工智能体, 代码回滚, 偏差过滤, 大模型训练, 强化学习, 故障排查, 故障模拟, 无后门, 根因分析, 生产环境, 站点可靠性工程, 请求拦截, 运维自动化