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 事件响应模拟** [![OpenEnv](https://img.shields.io/badge/OpenEnv-compliant-blue)](https://huggingface.co/spaces/YOUR_HF_USERNAME/pagersim-openenv) [![Python](https://img.shields.io/badge/python-3.11-green)](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, 人工智能体, 代码回滚, 偏差过滤, 大模型训练, 强化学习, 故障排查, 故障模拟, 无后门, 根因分析, 生产环境, 站点可靠性工程, 请求拦截, 运维自动化