Jayant2304/incident-response-env

GitHub: Jayant2304/incident-response-env

一个基于OpenEnv的强化学习环境,用于训练AI代理诊断生产事故场景,包含12个不同难度的事故案例和确定性评分系统。

Stars: 0 | Forks: 0

# 生产事故响应 — OpenEnv 环境 一个**OpenEnv兼容的**强化学习环境,用于训练AI代理诊断生产事故。为Meta x PyTorch OpenEnv黑客松(Scaler技术学院)构建。 ## 概述 AI代理会收到一个真实的生产事故场景——告警摘要、多个服务的按时间顺序排列的日志、关键指标和服务依赖关系图——需要诊断根本原因、识别受影响的服务、提出修复方案并评估爆炸半径。环境会使用[0.0, 1.0]范围内的连续奖励信号对响应进行评分。 ## 主要特性 - **12个事故场景**,分为3个难度等级(简单/中等/困难) - **真实故障模式**:HikariPool耗尽、OOMKill、Redis驱逐风暴、数据库死锁、Kafka schema不匹配、副本延迟级联、TLS证书过期、特性标志配置错误、数据管道静默失败 - **4项标准加权奖励**,支持梯度友好的强化学习训练,部分得分 - **确定性评分**——无需LLM评判,完全可重现 - **34个自动化测试**,覆盖评分器、环境生命周期和HTTP端点 - **一键Docker部署**到HuggingFace Spaces ## 快速开始 ### 本地开发 ``` # 安装依赖项 pip install -r requirements.txt # 启动服务器 uvicorn server.app:app --host 0.0.0.0 --port 8000 # 测试端点 curl http://localhost:8000/health curl -X POST http://localhost:8000/reset -H "Content-Type: application/json" -d '{}' curl -X POST http://localhost:8000/reset -H "Content-Type: application/json" -d '{"task_id":"easy_001"}' # 运行测试 pip install pytest httpx pytest tests/ -v ``` ### Docker ``` docker build -t incident-env . docker run -p 7860:7860 incident-env curl http://localhost:7860/health ``` ### 运行推理 ``` export API_BASE_URL=https://api.openai.com/v1 export MODEL_NAME=gpt-4o-mini export HF_TOKEN=sk-your-key export ENV_BASE_URL=http://localhost:8000 python inference.py ``` ## API端点 | 端点 | 方法 | 描述 | |---|---|---| | `/health` | GET | 健康检查 | | `/metadata` | GET | 环境名称、描述、版本、作者 | | `/schema` | GET | Action、Observation、State的JSON schema | | `/reset` | POST | 开始新episode(JSON body: `{"task_id":"easy_001"}` 或 `{"difficulty":"easy"}`) | | `/step` | POST | 提交诊断结果(JSON body: `{"action": {…IncidentAction…}}`) | | `/state` | GET | 当前episode元数据 | | `/tasks` | GET | 按难度分组的所有任务ID | | `/mcp` | POST | MCP JSON-RPC 2.0端点 | ## 奖励系统 | 标准 | 权重 | 评分方式 | |---|---|---| | 受影响服务 | 0.25 | 精确字符串匹配 | | 根本原因 | 0.35 | 关键词匹配(0/0.5/1.0) | | 修复方案 | 0.30 | 关键词匹配(0/0.5/1.0) | | 爆炸半径 | 0.10 | 精确匹配 | ## 任务描述 | 任务ID | 难度 | 场景 | |---|---|---| | `easy_001` | 简单 | 支付服务HikariPool连接池耗尽(503峰值) | | `easy_002` | 简单 | 认证服务OOMKilled——会话缓存增长导致内存限制超出 | | `easy_003` | 简单 | Redis maxmemory驱逐风暴——缓存命中率降至2% | | `medium_001` | 中等 | 级联故障——inventory-db死锁传播到order、inventory、notification服务 | | `medium_002` | 中等 | Elasticsearch JVM GC压力导致搜索超时(p99 > 15s) | | `medium_003` | 中等 | 推荐模型工件从registry下载失败(404/权限拒绝) | | `medium_004` | 中等 | Kafka schema版本不匹配导致消费者反序列化失败(2.1M延迟) | | `hard_001` | 困难 | Session-db副本延迟级联——6个服务出现误导性症状 | | `hard_002` | 困难 | 特性标志实验错误配置价格乘数——40%结账下降,无应用错误 | | `hard_003` | 困难 | cert-manager续期重试风暴耗尽config-db连接——延迟激增8倍 | | `hard_004` | 困难 | 单个pod(payment-svc-pod-c)TLS证书过期——间歇性5xx,近期无部署 | | `hard_005` | 困难 | 静默数据管道分区跳过——Airflow DAG显示SUCCESS但写入0行 | **简单**任务有单一受影响服务,日志信号明显。**中等**任务涉及级联故障或依赖图推理。**困难**任务包含干扰项、误导性症状和深藏的根本原因。 ## 基线分数 使用**Qwen/Qwen2.5-72B-Instruct**通过HuggingFace Inference Router针对实时HF Space的基线运行: | 任务 | 难度 | 分数 | |---|---|---| | `easy_001` | 简单 | 0.75 | | `easy_002` | 简单 | 1.00 | | `easy_003` | 简单 | 1.00 | | `medium_001` | 中等 | 1.00 | | `medium_002` | 中等 | 1.00 | | `medium_003` | 中等 | 0.75 | | `medium_004` | 中等 | 0.65 | | `hard_001` | 困难 | 1.00 | | `hard_002` | 困难 | 1.00 | | `hard_003` | 困难 | 0.65 | | `hard_004` | 困难 | 0.75 | | `hard_005` | 困难 | 1.00 | | 难度 | 任务数 | 平均分数 | |---|---|---| | 简单 | 3 | **0.9167** | | 中等 | 4 | **0.8500** | | 困难 | 5 | **0.8700** | | **总体** | **12** | **0.8792** | 困难任务故意设计了误导性症状。例如,`hard_002`呈现结账转化率下降但无应用错误——根本原因是特性标志实验,而非日志指向的定价服务。`hard_003`显示所有服务延迟激增8倍——实际根本原因是cert-manager的续期重试风暴,而非其压垮的config-db。 ## 项目结构 ``` incident_response_env/ ├── Dockerfile ├── openenv.yaml ├── pyproject.toml ├── requirements.txt ├── constants.py ├── models.py ├── inference.py ├── conftest.py ├── server/ │ ├── app.py │ ├── domain.py │ ├── incident_environment.py │ ├── tasks.py │ ├── graders.py │ └── mcp.py └── tests/ └── test_environment.py ``` ## 许可证 MIT
标签:AI人工智能, API服务, API集成, AV绕过, Docker, FastAPI, HuggingFace Spaces, Meta, OpenEnv, Python, PyTorch, SRE, 事件管理, 偏差过滤, 凭据扫描, 可观测性, 奖励函数, 安全规则引擎, 安全防御评估, 容器化部署, 开源框架, 强化学习, 持续集成, 指标监控, 故障诊断, 无后门, 服务网格, 机器学习环境, 根因分析, 环境模拟, 生产事件响应, 监控告警, 请求拦截, 逆向工具