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 事件响应环境 ![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg) ![OpenEnv](https://img.shields.io/badge/OpenEnv-compatible-green.svg) ![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg) 一个面向 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, 事故处理, 偏差过滤, 分布式系统, 压力测试, 可观测性, 告警分诊, 响应大小分析, 安全防御评估, 容器化, 库, 应急响应, 强化学习, 拓扑结构, 故障响应, 故障排查, 无后门, 机器学习, 根因分析, 模拟环境, 监控指标, 站点可靠性工程, 系统运维, 级联故障, 自动化运维, 请求拦截, 逆向工具, 链路追踪