anannya-b/sre-incident-response

GitHub: anannya-b/sre-incident-response

一个基于 OpenEnv 的 SRE 事故响应模拟器,使用强化学习环境训练 AI 代理进行生产事故的诊断与修复。

Stars: 0 | Forks: 0

```markdown title: SRE Incident Response Environment emoji: "\U0001F6E1\uFE0F" colorFrom: green colorTo: gray sdk: docker pinned: false app_port: 7860 tags: - openenv # SRE Incident Response Simulator 一个 **OpenEnv-compliant** 的强化学习环境,用于训练 AI 代理诊断和解决生产事故——就像真实的 SRE 值班工程师一样。 ## 概述与动机 站点可靠性工程(SRE)是一项关键的实际工作,工程师必须在时间压力下快速诊断并解决生产事故。该环境模拟了微服务架构中的真实生产事故,为 AI 代理提供具有挑战性的测试平台。 **为什么选择这个环境?** - **真实世界基础**:每个场景都基于 SRE 日常面临的实际生产事故 - **多步推理**:代理必须关联跨服务证据、形成假设并加以验证 - **工具使用**:11 个诊断与修复工具镜像真实的 SRE 工作流 - **增量奖励**:对调查进展给予部分奖励,而不仅仅是最终解决 - **多条路径**:不同的诊断路径会导致不同的得分 ## 动作空间 每个动作调用 11 个工具之一并带有参数: | 工具 | 参数 | 描述 | |------|-----------|-------------| | `query_logs` | service, filter (ERROR/WARN/INFO) | 查询服务日志 | | `check_metrics` | service, metric (cpu/memory/latency/error_rate/connections/all) | 检查服务指标 | | `describe_service` | service | 获取服务配置与依赖关系 | | `check_deployments` | service (optional) | 检查最近部署 | | `analyze_memory` | service | 深度内存分析 | | `run_diagnostic` | service, check (health/connectivity/resources) | 运行诊断检查 | | `restart_service` | service | 重启服务 | | `rollback_deploy` | service | 回滚最近部署 | | `scale_service` | service, replicas | 扩展服务副本 | | `write_postmortem` | summary, root_cause | 提交事故事后分析 | | `escalate` | reason | 升级给值班团队 | ## 观察空间 每次观察包含: - **alerts**:具有严重性、服务和消息的活跃 PagerDuty 风格告警 - **services**:全部 6 个服务的健康状态映射(状态、CPU、内存、错误率、延迟) - **tool_output**:最近一次工具调用的文本输出 - **insights_discovered**:代理已发现的关键发现 - **reward**:当前步骤的增量奖励 - **cumulative_reward**:累计得分(0.0 到 1.0) - **available_tools**:所有可用工具列表 - **step_count** / **max_steps**:进度跟踪 ## 任务 ### 任务 1:API 服务器宕机(简单) - **场景**:带有无效数据库连接字符串的错误配置被部署到 api-gateway - **服务**:3 个(api-gateway、auth-service、user-db) - **预期步骤**:5-10 | **最大步骤**:20 - **解决方案**:检查日志 -> 找到错误部署 -> 回滚 - **关键挑战**:直接的调查与修复 ### 任务 2:级联数据库故障(中等) - **场景**:工作队列的长查询耗尽 user-db 连接池,级联影响 auth-service 和 api-gateway - **服务**:5 个(api-gateway、auth-service、user-db、cache-service、worker-queue) - **预期步骤**:10-20 | **最大步骤**:30 - **解决方案**:跨服务关联 -> 识别数据库连接池耗尽 -> 修复根本原因 - **关键挑战**:多个服务受影响;必须识别 ROOT 原因而非症状 ### 任务 3:高流量下的内存泄漏(困难) - **场景**:ml-service 存在从两天前部署开始的渐进式内存泄漏。流量激增(营销活动)是 RED HERRING,加速了 OOM。 - **服务**:全部 6 个服务 - **预期步骤**:15-30 | **最大步骤**:40 - **解决方案**:区分流量激增与泄漏 -> 分析内存 -> 回滚 ml-service -> 撰写事后分析 - **关键挑战**:必须识别流量激增不是根本原因;需要内存分析 ## 奖励函数 奖励在**整个回合中**是**增量式**的: | 类别 | 奖励范围 | 示例 | |----------|-------------|---------| | 关键发现 | +0.05 到 +0.15 | 在日志中找到根原因,识别级联链 | | 正确修复 | +0.10 到 +0.40 | 回滚错误部署、扩展瓶颈服务 | | 错误操作惩罚 | -0.02 到 -0.05 | 重启未受影响的服务、使用未知工具 | | 重复操作惩罚 | -0.05 | 在最近 3 次动作内重复相同工具+参数(循环检测) | | 破坏健康服务 | -0.03 | 重启/回滚健康服务 | | 事后分析奖励 | +0.10 | 提交全面的事后分析(任务 3) | ## 安装与使用 ### 安装依赖 ``` pip install -r requirements.txt ``` ### 本地运行 ``` uvicorn server.app:app --host 0.0.0.0 --port 7860 ``` ### Docker ``` docker build -t sre-incident-response . docker run -p 7860:7860 sre-incident-response ``` ### 部署到 HuggingFace Spaces ``` openenv push --repo-id YOUR_USERNAME/sre-incident-response ``` ### Python 用法 ``` import requests # 使用任务重置 resp = requests.post("http://localhost:7860/reset", json={"task_id": "task_1"}) obs = resp.json()["observation"] # 采取行动 resp = requests.post("http://localhost:7860/step", json={ "tool": "query_logs", "params": {"service": "api-gateway", "filter": "ERROR"} }) result = resp.json() print(result["observation"]["tool_output"]) print(f"Reward: {result['reward']}") ``` ## 基准推理 ``` export ENV_URL="http://localhost:7860" export HF_TOKEN="your-token" # or OPENAI_API_KEY python inference.py ``` ### 基准分数(GPT-4o) | 任务 | 难度 | 分数 | 步数 | |------|-----------|-------|-------| | 任务 1 | 简单 | 0.800 | 5 | | 任务 2 | 中等 | 0.650 | 6 | | 任务 3 | 困难 | 0.850 | 7 | | **平均** | - | **0.767** | - | ## 架构 ``` sre_incident_response/ ├── models.py # Pydantic: Action, Observation, State (OpenEnv base classes) ├── client.py # HTTPEnvClient for remote connection ├── openenv.yaml # OpenEnv manifest ├── pyproject.toml # Dependencies ├── inference.py # Baseline inference script (uses OpenAI client) ├── Dockerfile # HF Spaces compatible (port 7860) ├── requirements.txt # Python deps ├── README.md # This file └── server/ ├── app.py # Uses create_fastapi_app() for OpenEnv compliance ├── environment.py # Environment(openenv.core) with reset/step/state └── tasks/ └── __init__.py # Task definitions (3 scenarios) ``` ## 许可证 BSD-3-Clause ```
标签:API集成, Docker, JARM, NIDS, OpenEnv, SEO, SRE, 事件诊断, 人工智能代理, 仿真环境, 偏差过滤, 内存分析, 可观测性, 告警响应, 在线调试, 多步骤推理, 安全防御评估, 容器化, 库, 应急响应, 强化学习, 指标监控, 搜索优化, 故障演练, 日志查询, 服务伸缩, 根因分析, 生产环境, 站点可靠性工程, 诊断工具, 请求拦截, 逆向工具, 部分奖励, 部署回滚