Bruhadev45/openenv-incident-response
GitHub: Bruhadev45/openenv-incident-response
这是一个面向AI智能体的SRE仿真环境,用于通过逼真的生产事故场景训练和评估其故障排查与响应能力。
Stars: 0 | Forks: 0
title: SRE Incident Response Environment
emoji: 🚨
colorFrom: red
colorTo: yellow
sdk: docker
app_port: 8000
tags:
- openenv
- sre
- incident-response
# 适用于 OpenEnv 的 SRE 事件响应环境



一个面向 AI 智能体的逼真事件响应训练环境。通过三个递进的挑战掌握处理生产事故的技巧:警报分诊、根因分析和级联故障解决。
## 为什么选择此环境?
现代生产系统以复杂、相互关联的方式发生故障。训练 AI 智能体处理这些事件需要:
- **逼真的场景**:基于实际生产中断进行建模
- **丰富的可观测性**:包含日志、指标、链路追踪和依赖图
- **渐进式难度**:从简单分诊到多服务级联故障解决
- **量化评分**:涵盖分类、调查、诊断、补救和沟通
此环境提供了所有这些要素,建立在一个由 12 个服务组成的电商拓扑结构之上,该结构反映了真实的分布式系统。
## 架构
```
+-------------------+
| Frontend |
+--------+----------+
|
+--------v----------+
| API Gateway |
+---+-----+-----+---+
| | |
+-------------------------+ | +-------------------------+
| | |
+--------v--------+ +----------v---------+ +---------v-------+
| Auth Service | | User Service | | Order Service |
+---+--------+----+ +----------+---------+ +---+--------+----+
| | | | |
+----v--+ +---v---+ +----v----+ +---v---+ +--v---+
|Auth DB| | Redis | | User DB | |Order DB| |Kafka|
+-------+ +-------+ +---------+ +--------+ +--+--+
|
+-------v------+
| Order Worker |
+-------+------+
|
+-------v-------+
| Warehouse API |
+---------------+
```
## 任务
### 任务 1:警报分诊(简单)
**目标:** 响应传入的呼叫并建立初步的事件响应。
| 属性 | 值 |
|-----------|-------|
| 难度 | 简单 |
| 最大步数 | 15 |
| 主要技能 | 警报确认、严重等级分类、初步沟通 |
**目标:**
1. 确认传入的警报
2. 调查日志和指标以了解影响范围
3. 对事件严重等级进行分类(P1-P4)
4. 向利益相关者发布初步状态更新
### 任务 2:根因分析(中等)
**目标:** 追踪生产事件至其根本原因并应用正确的修复。
| 属性 | 值 |
|-----------|-------|
| 难度 | 中等 |
| 最大步数 | 20 |
| 主要技能 | 系统性调查、依赖分析、针对性补救 |
**目标:**
1. 调查多个服务以追踪故障路径
2. 识别根本原因服务和故障模式
3. 诊断具体问题(内存泄漏、错误部署等)
4. 应用正确的补救操作
5. 验证修复并通报解决方案
### 任务 3:级联故障解决(困难)
**目标:** 阻止蔓延的故障,恢复服务,并管理危机沟通。
| 属性 | 值 |
|-----------|-------|
| 难度 | 困难 |
| 最大步数 | 30 |
| 主要技能 | 快速分诊、级联分析、协调恢复 |
**目标:**
1. 快速对多个同时发生的警报进行分诊
2. 追踪级联故障至其源头
3. 在时间压力下诊断根本原因
4. 应用针对性的补救措施以阻止扩散
5. 协调依赖服务的恢复
6. 全程保持与利益相关者的沟通
## 动作空间
| 动作 | 必填字段 | 可选字段 | 描述 |
|--------|-----------------|-----------------|-------------|
| `acknowledge` | - | - | 确认事件,成为主要响应者 |
| `investigate` | `tool`, `target` | `parameters` | 查询可观测性工具 |
| `diagnose` | `root_cause` | `target`, `confidence` | 记录根因假设 |
| `classify` | `severity` | - | 设置事件严重等级(P1-P4) |
| `remediate` | `remediation`, `target` | - | 对服务应用修复 |
| `communicate` | `message` | - | 发布状态更新 |
| `escalate` | - | `target` | 呼叫额外的响应者 |
### 调查工具
| 工具 | 描述 | 示例输出 |
|------|-------------|----------------|
| `logs` | 服务的应用程序日志 | 带有 ERROR/WARN/INFO 级别的时间戳日志条目 |
| `metrics` | 服务指标快照 | 错误率、延迟 p99、CPU、内存、请求速率 |
| `traces` | 分布式链路追踪 | 依赖调用、延迟、错误传播 |
| `deploys` | 最近的部署 | 带有状态和更改的部署历史 |
| `config` | 配置状态 | 配置漂移检测 |
| `dependencies` | 服务依赖图 | 上游和下游服务关系 |
| `alerts` | 服务的活跃警报 | 警报标题、描述和严重等级 |
### 补救操作
| 补救 | 描述 |
|-------------|-------------|
| `rollback` | 回滚到先前的部署 |
| `restart` | 重启服务实例 |
| `scale_up` | 增加更多实例 |
| `drain_traffic` | 将服务从负载均衡器中移除 |
| `failover` | 切换到备用/副本 |
| `toggle_flag` | 启用/禁用功能开关 |
| `clear_cache` | 使缓存条目失效 |
## 观测空间
每一步都会返回一个 `IncidentObservation`,包含:
| 字段 | 类型 | 描述 |
|-------|------|-------------|
| `alerts` | `list[Alert]` | 活跃警报,包含严重等级、标题、描述 |
| `investigation_result` | `str` | 上一次调查操作的输出 |
| `system_status` | `list[ServiceHealth]` | 所有服务的健康状态 |
| `timeline` | `list[TimelineEvent]` | 按时间顺序排列的事件时间线 |
| `available_actions` | `list[str]` | 当前状态下有效的动作类型 |
| `feedback` | `str` | 对上一动作的反馈 |
| `task_id` | `str` | 当前任务标识符 |
| `task_description` | `str` | 智能体应完成的目标 |
| `done` | `bool` | Episode 是否结束 |
| `reward` | `float` | 此步骤的奖励 |
| `step_number` | `int` | 当前步数 |
| `max_steps` | `int` | 允许的最大步数 |
## 奖励函数
分数在五个维度上计算,加权后求和:
| 组成部分 | 权重 | 评分 |
|-----------|--------|---------|
| Classification(分类) | 20% | 完全匹配:0.2,偏差一级:0.1 |
| Investigation(调查) | 20% | 最优(2-3 步,无浪费):0.2,多余部分受罚 |
| Diagnosis(诊断) | 30% | 精确根因:0.3,服务匹配:0.2,类别:0.15 |
| Remediation(补救) | 20% | 正确动作 + 目标:0.2,仅动作:0.1,错误:-0.1 |
| Communication(沟通) | 10% | 基于提及的服务、紧急程度和清晰度 |
**惩罚:**
- 时间惩罚:每步 -0.01
- 浪费动作:每次无关的调查/补救 -0.05
最终分数被限制在 [0.0, 1.0] 范围内。
## 安装
### 选项 1:pip 安装
```
# 克隆 repository
git clone https://github.com/your-org/openenv-incident-response
cd openenv-incident-response
# 安装依赖项
pip install -e .
# 安装 baseline 依赖项(可选)
pip install -e ".[baseline]"
```
### 选项 2:Docker
```
# 构建 image
docker build -f incident_response/server/Dockerfile -t incident-response .
# 运行 container
docker run -p 8000:8000 incident-response
```
### 选项 3:HuggingFace Spaces
使用提供的 Dockerfile 直接部署到 HuggingFace Spaces。该环境配置为单会话使用,非常适合评估。
## 使用方法
### 启动服务器
```
# 使用 entry point
server
# 或直接使用 Python
python -m incident_response.server.app
# 或使用 uvicorn
uvicorn incident_response.server.app:app --host 0.0.0.0 --port 8000
```
### Python 客户端示例
```
from incident_response.client import IncidentEnvClient
from incident_response.models import IncidentAction, ActionType, Severity
# 连接到 environment
with IncidentEnvClient("http://localhost:8000") as client:
# Start a new episode
obs = client.reset(task_id="rca", seed=42)
print(f"Task: {obs.task_id}")
print(f"Alerts: {len(obs.alerts)}")
# Acknowledge the incident
action = IncidentAction(action_type=ActionType.ACKNOWLEDGE)
obs = client.step(action)
print(f"Feedback: {obs.feedback}")
# Investigate the primary alert
alert_service = obs.alerts[0].service
action = IncidentAction(
action_type=ActionType.INVESTIGATE,
tool="logs",
target=alert_service
)
obs = client.step(action)
print(obs.investigation_result)
# Check metrics
action = IncidentAction(
action_type=ActionType.INVESTIGATE,
tool="metrics",
target=alert_service
)
obs = client.step(action)
# Classify severity
action = IncidentAction(
action_type=ActionType.CLASSIFY,
severity=Severity.P2
)
obs = client.step(action)
# ... continue investigation and remediation ...
# Get final scores
scores = client.grader()
print(f"Total score: {scores['total']:.3f}")
```
### 运行推理(OpenEnv 提交)
`inference.py` 脚本遵循强制的 OpenEnv 提交格式,包含 `[START]`、`[STEP]` 和 `[END]` 日志。
```
# 设置必需的 environment variables
export HF_TOKEN="hf_..." # Your HuggingFace token
export API_BASE_URL="https://router.huggingface.co/v1" # LLM API endpoint
export MODEL_NAME="Qwen/Qwen2.5-72B-Instruct" # Model to use
# 可选:如果未在本地运行,设置 environment server URL
export ENV_BASE_URL="http://localhost:8000"
# 运行 inference
python inference.py
```
**输出格式:**
```
[START] task=triage env=incident_response model=Qwen/Qwen2.5-72B-Instruct
[STEP] step=1 action={"action_type":"acknowledge"} reward=0.10 done=false error=null
[STEP] step=2 action={"action_type":"investigate","tool":"logs","target":"api-gateway"} reward=0.05 done=false error=null
...
[END] success=true steps=5 score=0.65 rewards=0.10,0.05,0.05,0.30,0.00
```
### 运行传统基线
```
# 设置你的 OpenAI API key
export OPENAI_API_KEY="sk-..."
# 运行 baseline inference
python scripts/baseline.py
```
### 提交前验证
```
# 运行 validator
python scripts/validate.py
# 或使用自定义 URL
python scripts/validate.py --url http://your-server:8000
```
## 基线分数
使用 GPT-4o 并在每个任务上使用 3 个随机种子的基线性能:
| 任务 | 平均分数 | 最小值 | 最大值 |
|------|---------------|-----|-----|
| 分诊 | 0.65 | 0.58 | 0.72 |
| RCA | 0.45 | 0.38 | 0.52 |
| 级联 | 0.28 | 0.20 | 0.35 |
| **总计** | **0.46** | - | - |
*注意:分数因模型、提示策略和随机种子而异。*
## API 参考
### 端点
| 方法 | 路径 | 描述 |
|--------|------|-------------|
| GET | `/health` | 健康检查 |
| GET | `/tasks` | 列出可用任务 |
| POST | `/reset` | 开始新 Episode |
| POST | `/step` | 执行动作 |
| GET | `/state` | 获取内部状态 |
| GET | `/grader` | 获取分数明细 |
| POST | `/baseline` | 运行基线推理 |
### POST /reset
```
{
"task_id": "triage",
"seed": 42,
"episode_id": "optional-id"
}
```
### POST /step
```
{
"action_type": "investigate",
"tool": "logs",
"target": "api-gateway",
"parameters": {}
}
```
## 项目结构
```
openenv-incident-response/
├── incident_response/
│ ├── __init__.py
│ ├── client.py # HTTP client for the environment
│ ├── models.py # Pydantic models (Action, Observation, State)
│ ├── graders/
│ │ ├── __init__.py
│ │ └── base.py # Scoring logic
│ ├── scenarios/
│ │ ├── __init__.py
│ │ └── service_graph.py # 12-service e-commerce topology
│ ├── server/
│ │ ├── __init__.py
│ │ ├── app.py # FastAPI application
│ │ └── Dockerfile # Container build
│ └── simulation/
│ ├── __init__.py
│ └── logs_engine.py # Realistic log generation
├── scripts/
│ ├── baseline.py # GPT-4 baseline agent
│ └── validate.py # Pre-submission validator
├── tests/
│ └── __init__.py
├── openenv.yaml # OpenEnv specification
├── pyproject.toml # Package configuration
└── README.md # This file
```
## 开发
```
# 安装 dev dependencies
pip install -e ".[dev]"
# 运行 tests
pytest
# 运行带 coverage 的 tests
pytest --cov=incident_response --cov-report=html
# 检查代码
ruff check incident_response/ scripts/
```
## 许可证
Apache 2.0 - 详见 [LICENSE](LICENSE)。
## 致谢
为 [OpenEnv](https://openenv.org) 基准竞赛构建。灵感来源于大型科技公司的真实事件响应实践。
**准备好训练您的智能体了吗?** 启动服务器,连接客户端,看看您的 AI 处理生产事故的能力如何!
# Rebuild trigger Tue Apr 7 23:51:51 IST 2026
标签:Agent, AI训练, Apex, API网关, API集成, ASM汇编, Docker, NIDS, OpenEnv, Python, SRE, 事故处理, 偏差过滤, 分布式系统, 压力测试, 可观测性, 告警分诊, 响应大小分析, 安全防御评估, 容器化, 库, 应急响应, 强化学习, 拓扑结构, 故障响应, 故障排查, 无后门, 机器学习, 根因分析, 模拟环境, 监控指标, 站点可靠性工程, 系统运维, 级联故障, 自动化运维, 请求拦截, 逆向工具, 链路追踪