Mohit-Dhawan98/sre-incident-env

GitHub: Mohit-Dhawan98/sre-incident-env

一个用于训练和评估 AI Agent 在多服务架构中进行生产事故根因分析的强化学习仿真环境

Stars: 0 | Forks: 0

## SRE Incident Response 环境 emoji: 🔧 colorFrom: red colorTo: gray sdk: docker app_port: 8000 # SRE Incident Response 环境 一个模拟值班 Site Reliability Engineering (SRE) 的 OpenEnv RL 环境。AI Agent 接收生产事故警报,通过查询多服务架构中的服务日志和指标进行调查,在误导信息和级联故障中追踪因果链,并提交根因诊断。该环境自动评分 —— 运行时零 LLM 调用,完全确定性。 ## 快速入门 ``` pip install git+https://huggingface.co/spaces/Maverick98/sre-incident-env ``` ``` from client import SREIncidentEnv async with SREIncidentEnv(base_url="https://Maverick98-sre-incident-env.hf.space") as env: await env.reset(difficulty="medium") tools = await env.list_tools() result = await env.call_tool("list_services") result = await env.call_tool("read_logs", service="api-gateway", window_minutes=10) result = await env.call_tool("submit_diagnosis", affected_service="product-cache", failure_type="cache_node_failure", root_cause="product-cache node failed causing checkout fallback", causal_chain="product-cache,checkout-service,api-gateway", confidence=0.85) ``` ## Agent 如何交互 该环境暴露 4 个 MCP 工具: | Tool | Description | |------|-------------| | `list_services` | 返回事故拓扑中的服务名称 | | `read_logs(service, window_minutes, level_filter)` | 返回某个服务的日志条目 | | `check_metric(service, metric, window_minutes)` | 返回指标时间序列(30秒分辨率) | | `submit_diagnosis(affected_service, failure_type, root_cause, causal_chain, confidence)` | 提交诊断,返回奖励,结束 episode | Agent 拥有充足的查询预算(100)—— 难度源于场景内容,而非资源限制。 ## 难度分级 | Tier | Count | Avg Score (frontier models) | What Makes It Hard | |------|-------|---------------------------|-------------------| | **Easy** | 5 | ~0.64 | 熟悉的故障模式,清晰的信号,需要一定调查 | | **Medium** | 5 | ~0.52 | 多个嫌疑对象,误导性的 Red Herrings(干扰项),模糊的指标 | | **Hard** | 5 | ~0.35 | 深层链条,晦涩的机制,多个 Red Herrings | | **Expert** | 2 | ~0.19 | 不可见的根源,无指标线索,晦涩的内核/基础设施故障 | 17 个场景基于 o4-mini 和 gemini-2.5-flash 的联合共识进行了校准。Hard/Expert 包含真实的生产故障:NUMA 跨插槽延迟、CPU TSC 漂移、JVM metaspace 耗尽、Kafka 分区重平衡风暴。 ## Reward Function (V5) 7 个组件,全确定性。无嵌入模型。 **Tier 1 —— 是否解决?(0.65):** | Component | Weight | Method | |-----------|--------|--------| | Service identification | 0.25 | 根服务完全匹配(+ 0.08 邻接部分分) | | Failure type | 0.15 | 20 类分类法完全匹配 | | Causal chain | 0.15 | 与黄金传播链的 F1 分数 | | Explanation keywords | 0.10 | 黄金关键词清单(每场景 5 个术语) | **Tier 2 —— 如何解决?(0.35):** | Component | Weight | Method | |-----------|--------|--------| | Query efficiency | 0.20 | 实际查询 vs 每场景最优查询 | | Investigation waste | 0.08 | 惩罚重复查询、隧道视野 | | Investigation breadth | 0.07 | 调查过的因果链服务占比 | **防博弈:** 组件 2-4 以正确的服务识别为前提。错误的服务 = Tier 1 得 0 分。无免费分数。 ## 基线分数 来自 `inference.py` 的可复现分数(每个难度 1 个 episode): | Model | Easy | Medium | Hard | Expert | Overall | |-------|------|--------|------|--------|---------| | gpt-5.4 | 0.71 | 0.62 | 0.35 | 0.19 | 0.48 | | o4-mini | 0.65 | 0.48 | 0.38 | 0.27 | 0.46 | | gemini-2.5-flash | 0.57 | 0.45 | ~0.30 | ~0.15 | 0.40 | Hard/Expert 场景真正挑战了前沿模型。Easy 场景可通过基本的日志跟踪解决。 ## Action & Observation Spaces **Action** (`CallToolAction`):Agent 每步调用 4 个 MCP 工具之一。每个工具都有类型化参数。 **Observation** (`SREObservation`): - `done: bool` — episode 是否结束? - `reward: float` — 0.0-1.0(仅在 submit_diagnosis 时非零) - `logs: List[LogEntry]` — `{timestamp, service, level, message}` - `metric_series: List[MetricPoint]` — `{timestamp, value}` - `services: List[str]` — 服务名称(来自 list_services) - `message: str` — 重置时的警报文本,状态消息 **State** (`SREState`):`episode_id`、`step_count`、`scenario_id`、`difficulty`、`services`、`queries_used`、`query_budget`、`diagnosis_submitted`、`current_reward` ## Episode 流程 ``` Agent Environment │ │ │──── reset(difficulty="hard") ──────>│ Pick scenario, generate logs/metrics │<─── alert message ─────────────────│ │ │ │──── list_services() ───────────────>│ (free) │<─── ["api-gw","cache","db",...] ────│ │ │ │──── read_logs("api-gw", ERROR) ────>│ │<─── [{ts, svc, level, msg},...] ────│ │ │ │──── check_metric("db","latency") ──>│ │<─── [{ts: .., value: 22}, ...] ─────│ │ │ │ ... investigate until confident ... │ │ │ │──── submit_diagnosis(cause,svc) ───>│ Compute reward, end episode │<─── reward=0.72, done=True ─────────│ ``` ## 本地运行 ``` git clone https://huggingface.co/spaces/Maverick98/sre-incident-env cd sre-incident-env uv sync uvicorn server.app:app --host 0.0.0.0 --port 8000 ``` ## 运行 Inference ``` # 设置所需的 env vars export API_BASE_URL="https://api.openai.com/v1" export MODEL_NAME="gpt-4o-mini" export HF_TOKEN="your-api-key" # 运行 baseline (所有 4 种难度,每种 2 个 episodes) python inference.py # 对抗 HF Space python inference.py --space https://Maverick98-sre-incident-env.hf.space # 单一难度 python inference.py --difficulty hard --episodes 3 ``` ## 使用真实 Incident 数据进行 Training 该环境是一个**可插拔框架**,而不仅仅是 17 个固定场景。任何组织都可以将其过去的故障转化为训练数据: ``` export OPENENV_CUSTOM_REGISTRY=/path/to/your_incidents.jsonl ``` JSONL 中的每个事故定义了:服务拓扑、日志模板、指标模式、黄金根因、因果链和解释关键词。奖励函数无需更改即可工作 —— 它根据每个事故中的黄金数据进行评分。 **这对 RL 训练的意义:** - 拥有 500 个过往 P0/P1 事故的公司 = 500 个训练 episodes - Agent 从**你**特定的基础设施中学习模式 - 难度自然扩展 —— 真实事故的范围从显而易见到晦涩难懂 - 确定性奖励确保稳定的 RL 梯度 - 部分分数(Tier 2:调查质量)即使在错误诊断时也提供信号 参见 [`scenarios/schema.md`](scenarios/schema.md) 了解 JSONL 格式,以及 [`scenarios/difficulty_calibration.md`](scenarios/difficulty_calibration.md) 了解 4 维难度框架。 ## 架构 - **Environment server**:MCPEnvironment (FastMCP),含 4 个工具 - **Reward**:完全确定性,7 个组件,无模型依赖 - **Scenarios**:17 个内置(5 easy + 5 medium + 5 hard + 2 expert)+ 自定义 JSONL 注册表 - **Client**:MCPToolClient(async/sync),可通过 pip 安装 - **Inference**:原生 OpenAI function calling,智能上下文摘要
标签:AIOps, AI智能体, API集成, CISA项目, Docker, Hackathon项目, HuggingFace Spaces, MCP工具, OpenAI Gym, Python, PyTorch, RL环境, SRE, 偏差过滤, 凭据扫描, 分布式系统, 可观测性, 响应大小分析, 因果链追踪, 大模型Agent, 安全防御评估, 异常检测, 强化学习, 微服务架构, 指标监控, 故障排查, 无后门, 根因分析, 生产事故, 确定性环境, 站点可靠性工程, 自动化运维, 请求拦截, 逆向工具