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 事件响应环境
[](https://www.gnu.org/licenses/agpl-3.0)
[](https://github.com/meta-pytorch/OpenEnv)
[](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, 偏差过滤, 内存, 决策支持, 多智能体, 安全防御评估, 容器化, 开源项目, 强化学习, 指标监控, 故障响应, 故障诊断, 无后门, 智能运维, 机器学习, 模拟环境, 深度学习, 生产事故, 站点可靠性工程, 自动恢复, 训练环境, 请求拦截, 逆向工具, 错误率