tg1106/SRE-Incident-Response-Simulator

GitHub: tg1106/SRE-Incident-Response-Simulator

这是一个基于多智能体投票机制的 SRE 事件响应模拟环境,旨在训练 AI 智能体在模拟的生产故障中执行诊断与恢复操作。

Stars: 1 | Forks: 0

title: SRE Incident Response Environment sdk: docker app_port: 7860 tags: - openenv - reinforcement-learning - multi-agent - sre - incident-response short_description: Multi-agent SRE Incident Response OpenEnv Environment # 🚨 SRE 事件响应环境 [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![OpenEnv](https://img.shields.io/badge/OpenEnv-compliant-green)](https://github.com/meta-pytorch/OpenEnv) [![HuggingFace](https://img.shields.io/badge/🤗%20HuggingFace-Space-yellow)](https://huggingface.co/spaces/tg1106/SRE-Multi_Agent_Incident_Reporter_Stimulator) ## 📌 目录 1. [这是什么?](#what-is-this) 2. [实际应用价值](#real-world-utility) 3. [工作原理](#how-it-works) 4. [多智能体投票系统](#multi-agent-voting-system) 5. [任务](#tasks) 6. [动作空间](#action-space) 7. [观察空间](#observation-space) 8. [奖励函数](#reward-function) 9. [评分标准](#grader-scores) 10. [安装指南](#installation-guide) 11. [运行环境](#running-the-environment) 12. [API 端点](#api-endpoints) 13. [基线分数](#baseline-scores) 14. [项目结构](#project-structure) 15. [许可证与引用](#license--citation) ## 这是什么? 每个运行在线服务的科技公司都雇佣 **Site Reliability Engineers (SREs)** —— 他们的工作是在极端压力下诊断并解决生产事故。当凌晨 2 点出现故障时,他们醒来,盯着仪表盘,阅读日志,并做出决定:回滚?重启?升级上报?每一个错误的举动都会浪费时间。每一分钟的停机都会造成损失。 **这个环境训练 AI 智能体完全做到这一点。** AI 智能体面临一个实时的生产事故 —— 包含真实的指标(错误率、延迟、CPU、内存)和诊断信号。它必须在时间耗尽之前选择正确的动作序列来解决事故。 **多智能体创新:** 不是一个模型独自决定,而是三个专家智能体(DevOps 工程师、安全分析师、数据库管理员)在每一步独立投票决定采取什么行动。他们的加权投票被汇总成一条建议 —— 这完全反映了真实事故作战室中人类协作的方式。 ## 实际应用价值 该环境直接适用于: - **训练自主事故响应智能体** —— 像 PagerDuty、Datadog 和 Grafana 这样的公司正在积极构建 AI 驱动的事故响应。这提供了一个训练沙箱。 - **在压力下对 LLM 推理进行基准测试** —— 通过故意设置的误导性信号(DDoS 任务)测试多步诊断推理能力。 - **初级 SRE 入职模拟** —— 在接触生产系统之前培训工程师的安全沙箱。 - **AI 研究** —— 用于在时间压力下进行协作决策的新型多智能体投票架构。 ## 工作原理 ``` Incident fires 🚨 ↓ Agent receives observation (metrics + signals + expert recommendation) ↓ 3 Expert Agents vote internally (hidden) ↓ Weighted vote → expert_recommendation shown to agent ↓ Agent picks action ↓ Environment updates metrics + gives partial reward ↓ Repeat until resolved or max steps reached ``` ## 多智能体投票系统 三个专家智能体在每一步内部进行投票。**个人投票是匿名的** —— 只有汇总的加权建议会显示给主智能体。 | 智能体 | 个性 | 策略 | 权重 | |---|---|---|---| | 🔴 DevOps 工程师 | 快速操作者 | 喜欢快速修复 —— 回滚、重启、扩容 | 0.40 | | 🔵 安全分析师 | 谨慎 | 怀疑攻击,倾向于先调查 | 0.30 | | 🟡 数据库管理员 | 专注数据层 | 怀疑 DB 问题,推荐 scale_up | 0.30 | 每个智能体输出 `(action, confidence_score)`。最终建议 = 所有投票的置信度分数的加权和。 ## 任务 ### 🟢 任务 1 — 部署失败(简单) **服务:** payment-api **场景:** 8 分钟前的一次错误部署导致服务故障。错误率为 85%。 **信号:** `recent_deployment=True`,无流量激增,无 DB 错误。 **最佳路径:** `rollback` → `resolve` **简单的原因:** 信号清晰且直接指向根本原因。 ### 🟡 任务 2 — DB 过载(中等) **服务:** auth-service **场景:** 一个失控的批处理作业使数据库饱和。CPU 占用 92%,内存占用 95%。 **信号:** `db_connection_errors=True`,无近期部署,无流量激增。 **最佳路径:** `investigate` → `scale_up` → `resolve` **中等的原因:** 没有单一明显的修复方法 —— 需要在行动前先理解情况。 ### 🔴 任务 3 — DDoS 攻击(困难) **服务:** api-gateway **场景:** 大量的机器人流量使网关不堪重负。15,000 名用户受影响。 **信号:** `traffic_spike=True`,`recent_deployment=True` ← **故意的干扰项** **最佳路径:** `investigate` → `escalate` → `resolve` **困难的原因:** `recent_deployment=True` 标志是一个陷阱。盲目回滚的智能体会使情况恶化。必须先调查以发现真正的原因。 ## 动作空间 | 动作 | 描述 | 何时使用 | |---|---|---| | `investigate` | 揭示更深的诊断信息 | 当根本原因不清楚时 | | `restart` | 重启受影响的服务 | 针对瞬态故障的快速修复 | | `rollback` | 回退到上一个稳定部署 | 当近期部署是原因时 | | `scale_up` | 增加更多计算/内存资源 | 当资源耗尽是原因时 | | `escalate` | 引入专家团队 | 针对复杂攻击或未知原因 | | `resolve` | 宣布事故已解决 | 仅当 `error_rate < 0.25` 时 | ## 观察空间 | 字段 | 类型 | 范围 | 描述 | |---|---|---|---| | `incident_type` | string | — | deployment_failure / db_overload / ddos_attack | | `affected_service` | string | — | 哪个服务宕机了 | | `severity` | string | — | low / medium / high / critical | | `error_rate` | float | [0.0, 1.0] | 当前错误率 | | `latency_ms` | float | ≥ 0 | 平均响应延迟(毫秒) | | `cpu_usage` | float | [0.0, 1.0] | CPU 负载 | | `memory_usage` | float | [0.0, 1.0] | 内存负载 | | `users_impacted` | int | ≥ 0 | 预计受影响的用户数 | | `time_elapsed` | int | 0–10 | 已采取的步数 | | `max_steps` | int | 10 | 回合步数限制 | | `recent_deployment` | bool | — | 过去 30 分钟内是否有部署? | | `traffic_spike` | bool | — | 是否存在异常的入站流量? | | `db_connection_errors` | bool | — | 数据库连接是否失败? | | `expert_recommendation` | string | — | 来自 3 个匿名智能体的汇总加权投票 | | `last_action` | string / null | — | 上一次采取的动作 | | `last_action_result` | string / null | — | 结果发生了什么 | | `last_action_error` | string / null | — | 如果动作无效时的错误消息 | | `resolved` | bool | — | 事故是否已解决 | ## 奖励函数 在**每一步**都会提供部分奖励(始终限制在 `[0.0, 1.0]`): | 信号 | 公式 | |---|---| | 进度奖励 | 每个有效动作 `0.10 + (error_rate_drop × 0.50)` | | 解决奖励 | `0.50 + (steps_remaining / max_steps × 0.50)` | | 无效动作惩罚 | `-0.05`(动作被视为无操作) | | 错误动作 | 指标恶化 → 自然降低奖励 | **示例:** 2 步解决 → 奖励 ≈ `0.50 + (8/10 × 0.50)` = **0.90** ## 评分标准 基于解决速度的最终回合分数(0.0 – 1.0): | 任务 | ≤ 2 步 | ≤ 3 步 | ≤ 5 步 | ≤ 8 步 | 未解决 | |---|---|---|---|---|---| | deployment_failure | 1.00 | 1.00 | 0.85 | 0.65 | 0.00–0.30 | | db_overload | 1.00 | 1.00 | 0.80 | 0.60 | 0.00–0.25 | | ddos_attack | 1.00 | 1.00 | 0.75 | 0.55 | 0.00–0.20 | 即使没有完全解决,指标改善也会获得部分分数。 ## 安装指南 ### 前置条件 在开始之前,请确保您的系统上已安装以下内容: **1. 检查 Python 版本(必须为 3.10 或更高):** ``` python3 --version ``` **2. 检查 Git 是否已安装:** ``` git --version ``` **3. 安装 Docker Desktop:** 从 https://docs.docker.com/get-docker/ 下载,并确保在使用 Docker 命令之前它是打开并正在运行的。 **4. HuggingFace 账户:** 如果您还没有,请访问 https://huggingface.co 免费注册。 ### 步骤 1 — 克隆仓库 ``` git clone https://github.com/tg1106/SRE-Incident-Response-Simulator.git cd SRE-Incident-Response-Simulator ``` ### 步骤 2 — 安装 Python 依赖 ``` pip3 install -r requirements.txt ``` 这将安装所需的一切:`fastapi`、`uvicorn`、`pydantic`、`openai`、`requests`、`openenv-core`。 ### 步骤 3 — 安装额外的开发工具 ``` pip3 install python-dotenv ``` ### 步骤 4 — 设置环境变量 在项目根目录下创建一个 `.env` 文件: ``` touch .env ``` 用任何文本编辑器打开它并添加以下内容: ``` HF_TOKEN=hf_your_actual_token_here API_BASE_URL=https://router.huggingface.co/v1 MODEL_NAME=Qwen/Qwen2.5-72B-Instruct ``` **如何获取您的 HuggingFace token:** 1. 访问 https://huggingface.co/settings/tokens 2. 点击 **New token** 3. 给它起个名字(例如 `sre-env`) 4. 将 Role 设置为 **Write** 5. 点击 **Generate token** 6. 复制它并粘贴到您的 `.env` 文件中 ## 运行环境 ### 选项 A — 本地运行推理(最快的测试方式) 这将运行完整的环境以及所有 3 个任务(进程内)。不需要 Docker。 ``` python3 inference.py ``` 预期输出: ``` [START] task=deployment_failure env=sre-incident-env model=Qwen/Qwen2.5-72B-Instruct [STEP] step=1 action=rollback reward=0.47 done=true error=null [END] success=true steps=1 score=1.000 rewards=0.47 [START] task=db_overload env=sre-incident-env model=Qwen/Qwen2.5-72B-Instruct [STEP] step=1 action=scale_up reward=0.28 done=false error=null [STEP] step=2 action=resolve reward=0.75 done=true error=null [END] success=true steps=2 score=1.000 rewards=0.28,0.75 [START] task=ddos_attack env=sre-incident-env model=Qwen/Qwen2.5-72B-Instruct [STEP] step=1 action=investigate reward=0.12 done=false error=null [STEP] step=2 action=escalate reward=0.40 done=true error=null [END] success=true steps=2 score=1.000 rewards=0.12,0.40 ``` ### 选项 B — 作为本地 Docker 服务器运行 **步骤 1 — 打开 Docker Desktop** 并等待它显示 "Engine running"。 **步骤 2 — 构建 Docker 镜像:** ``` docker build -t sre-incident-env . ``` **步骤 3 — 运行容器:** ``` docker run -p 7860:7860 sre-incident-env ``` **步骤 4 — 测试它是否正在运行:** ``` curl -X POST http://localhost:7860/reset \ -H "Content-Type: application/json" \ -d '{"task": "deployment_failure"}' ``` 您应该会收到完整的 JSON 观察结果。 **步骤 5 — 完成后停止容器:** ``` docker ps # find the container ID docker stop ``` ### 选项 C — 使用在线 HuggingFace Space 无需安装。直接调用托管的 API: ``` curl -X POST https://tg1106-sre-multi-agent-incident-reporter-stimulator.hf.space/reset \ -H "Content-Type: application/json" \ -d '{"task": "deployment_failure"}' ``` ### 手动测试所有 3 个任务 ``` # 任务 1 — 部署失败 curl -X POST https://tg1106-sre-multi-agent-incident-reporter-stimulator.hf.space/reset \ -H "Content-Type: application/json" \ -d '{"task": "deployment_failure"}' # 任务 2 — DB 过载 curl -X POST https://tg1106-sre-multi-agent-incident-reporter-stimulator.hf.space/reset \ -H "Content-Type: application/json" \ -d '{"task": "db_overload"}' # 任务 3 — DDoS 攻击 curl -X POST https://tg1106-sre-multi-agent-incident-reporter-stimulator.hf.space/reset \ -H "Content-Type: application/json" \ -d '{"task": "ddos_attack"}' ``` ### 运行提交前验证器 ``` chmod +x validate-submission.sh ./validate-submission.sh https://tg1106-sre-multi-agent-incident-reporter-stimulator.hf.space ``` 预期输出: ``` ✅ PASSED -- HF Space is live and responds to /reset ✅ PASSED -- Docker build succeeded ✅ PASSED -- openenv validate passed All 3/3 checks passed! Your submission is ready to submit. ``` ## API 端点 | 方法 | 端点 | 请求体 | 描述 | |---|---|---|---| | POST | `/reset` | `{"task": "deployment_failure"}` | 开始一个新的回合 | | POST | `/step` | `{"action": "rollback"}` | 执行一个动作步骤 | | GET | `/state` | — | 获取当前回合元数据 | | GET | `/health` | — | 健康检查 | **有效任务:** `deployment_failure` · `db_overload` · `ddos_attack` **有效动作:** `investigate` · `restart` · `rollback` · `scale_up` · `escalate` · `resolve` ## 基线分数 基线智能体:`Qwen/Qwen2.5-72B-Instruct` | 任务 | 分数 | 步数 | 已解决 | |---|---|---|---| | deployment_failure | 1.000 | 1 | ✅ | | db_overload | 1.000 | 2 | ✅ | | ddos_attack | 1.000 | 2 | ✅ | ##结构 ``` SRE-Incident-Response-Simulator/ │ ├── inference.py ← Baseline inference script (mandatory for submission) ├── openenv.yaml ← OpenEnv manifest ├── Dockerfile ← Container definition (port 7860) ├── requirements.txt ← Python dependencies ├── pyproject.toml ← Package config + server entry point ├── uv.lock ← Locked dependencies ├── validate-submission.sh ← Pre-submission validator ├── README.md ← You are here ├── LICENSE ← AGPL-3.0 ├── .gitignore ← Protects .env and secrets │ ├── models.py ← Pydantic models: Action, Observation, Reward ├── client.py ← HTTP client wrapper ├── __init__.py ← Package exports │ └── server/ ├── app.py ← FastAPI server (/reset /step /state /health) ├── environment.py ← Core episode logic + reward computation ├── incidents.py ← 3 incident definitions + graders (0.0–1.0) ├── agents.py ← 3 voting personalities + vote aggregator └── __init__.py ``` ## 许可证与引用 Copyright (C) 2026 Tharun Gopinath 本项目根据 **GNU Affero General Public License v3.0 (AGPL-3.0)** 获得许可。 **如果您以任何形式使用本作品 —— 研究、产品、服务或项目 —— 您必须按以下方式引用:** ``` Tharun Gopinath. "SRE Incident Response Environment." Multi-Agent OpenEnv Environment. 2026. https://github.com/tg1106/SRE-Incident-Response-Simulator Licensed under AGPL-3.0. ``` 完整条款请参阅 [LICENSE](./LICENSE) 文件。
标签:AGPL, AIOps, Apex, Black Hat, CPU, DNS解析, Docker, HuggingFace, Latency, Multi-Agent, NIDS, OpenEnv, Python, Space, SRE, 偏差过滤, 内存, 决策支持, 多智能体, 安全防御评估, 容器化, 开源项目, 强化学习, 指标监控, 故障响应, 故障诊断, 无后门, 智能运维, 机器学习, 模拟环境, 深度学习, 生产事故, 站点可靠性工程, 自动恢复, 训练环境, 请求拦截, 逆向工具, 错误率