sahilshingate01/incident-response-env

GitHub: sahilshingate01/incident-response-env

这是一个用于评估和训练 AI 智能体在模拟微服务架构中自主诊断并修复生产事故的基准测试环境。

Stars: 0 | Forks: 0

title: Incident Response Environment emoji: 🚨 colorFrom: red colorTo: red sdk: docker pinned: false tags: - openenv - reinforcement-learning - llm-evaluation - incident-response - sre - reasoning-models license: mit # 🚨 AI SRE Agent — Live Incident Response **一个 RL/LLM 基准测试环境,AI Agent 在其中自主诊断并修复包含 5 个服务的微服务架构中的生产事故。** [![Live Demo](https://img.shields.io/badge/🔴_Live_Demo-Watch_It_Happen-red?style=for-the-badge)](https://huggingface.co/spaces/Sahilshingate/incident-response-env) [![OpenEnv Compatible](https://img.shields.io/badge/OpenEnv-Compatible-blue?style=flat-square)](https://github.com/OpenEnv-AI/openenv) [![Python 3.11+](https://img.shields.io/badge/Python-3.11+-green?style=flat-square&logo=python)](https://python.org) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow?style=flat-square)](LICENSE) ## ⚡ 数据概览 | 指标 | 数值 | |---|---| | **事故类型** | 3 种(简单 → 中等 → 困难) | | **模拟服务** | 5 个微服务 | | **可用 Agent 动作** | 9 种类型 | | **任务 1 最优奖励** | +1.70(5 步) | | **任务 3 最优奖励** | +2.60(9 步) | | **解决时间(级联故障)** | 9 步,约 14 秒 | ## 🎬 观看演示 **[▶ 启动 Live Demo](https://huggingface.co/spaces/Sahilshingate/incident-response-env)** — 无需登录,无需 API key,一键启动。 点击 **TRIGGER INCIDENT**,观看 AI SRE agent: 1. 🚨 接收到跨 4 个服务的级联故障告警 2. 🔍 系统性地调查指标、日志和数据库查询 3. 🧠 通过推理识别虚假信号,找到真正的根本原因 4. 🔧 按正确顺序应用修复(DB → payment-service) 5. ✅ 解决事故 — 所有服务从红色变为绿色 该演示运行的是一个硬编码的最优 agent,因此您每次都能看到**完美轨迹**。接入您自己的 LLM,看看它的表现如何。 ## 🧠 为什么这很难 这不是“找到红色服务并重启它”。这些事故需要**多跳演绎推理**: ### 虚假信号 `api-gateway` 错误率达到 67% —— 但这只是**症状**,而非原因。重启网关的 agent 会浪费一步并受到惩罚。真正的根本原因是两层之下的 `db-primary` 连接池死锁。 ### 修复顺序很重要 在级联故障中,您**必须**在 `payment-service` 之前重启 `db-primary`。颠倒顺序会再次耗尽连接池,使情况更糟。环境会对错误顺序的修复进行惩罚。 ### 惩罚陷阱 - 在诊断之前重启 `payment-service`?**-0.15** 惩罚 - 过早声明已解决?**-0.20** 惩罚 - 重复动作?每次重复 **-0.05** - 最优路径需要读取 5 个服务的信号,将慢查询与连接池关联起来,并严格按照依赖顺序应用修复 ## 🏗️ 架构 ``` ┌─────────────────┐ POST /step ┌──────────────────────────────────┐ │ AI Agent │ ────────────────► │ Incident Response Environment │ │ (LLM / RL) │ ◄──────────────── │ │ └─────────────────┘ IncidentObs │ ┌────────────┐ ┌─────────────┐ │ │ │ FakeMetrics │ │ FakeLogs │ │ ┌─────────────────┐ │ └────────────┘ └─────────────┘ │ │ Live Dashboard │ SSE Stream │ ┌────────────┐ ┌─────────────┐ │ │ (index.html) │ ◄──────────── │ │FakeDeploys │ │ Scenarios │ │ └─────────────────┘ /demo/run │ └────────────┘ └─────────────┘ │ └──────────────────────────────────┘ ``` **模拟服务:** `api-gateway` · `payment-service` · `user-service` · `db-primary` · `cache-redis` 每个服务报告:`status`(健康/降级/严重)、`error_rate`、`latency_p99_ms` ## 📋 任务 ### 任务 1 — 单服务故障(简单) `user-service` 的错误部署导致 500 错误。 - **关键洞察:** 部署时间戳与错误激增之间的直接关联 - **最优路径:** `check_recent_deploys` → `read_logs` → `rollback` → `declare_resolved` - **最优奖励:** +1.70 ### 任务 2 — 数据库延迟级联(中等) DB 过载导致 API 延迟在服务间级联传播。 - **关键洞察:** 从 Gateway → Downstream → Database 的多跳延迟追踪 - **最优路径:** `check_metrics(api-gateway)` → `check_metrics(db-primary)` → `check_db_queries` → `scale_up(db-primary)` → `declare_resolved` - **最优奖励:** +1.90 ### 任务 3 — 全局级联故障(困难) DB 连接池耗尽触发跨 4 个服务的级联故障。 - **关键洞察:** 非线性根本原因 —— 根本原因在初始层不可见 - **最优路径:** 5 个诊断步骤 → `restart_service(db-primary)` → `restart_service(payment-service)` → `declare_resolved` - **最优奖励:** +2.60 ## 🎯 奖励函数 | 类别 | 奖励 | 描述 | |---|---|---| | ✅ 正确的诊断步骤 | **+0.20** | 每次正确的调查动作 | | 🔧 正确的修复(诊断后) | **+0.30** | 在适当调查后的正确补救 | | 🔧 正确的修复(无诊断) | **+0.20** | 猜中,奖励减少 | | 🎉 成功解决 | **+1.00** | 应用所有修复,事故解决 | | ⚠️ 重复动作 | **-0.05** | 重复之前的动作 | | ❌ 错误的首个动作 | **-0.15** | 初始补救不正确的惩罚 | | ❌ 过早声明解决 | **-0.20** | 问题持续时声明已解决 | ## 🔌 API 参考 | 方法 | 路径 | 描述 | |---|---|---| | `GET` | `/` | **Live demo dashboard** | | `GET` | `/health` | 健康检查 | | `GET` | `/tasks` | 列出可用任务 | | `POST` | `/reset` | 重置当前任务 | | `POST` | `/reset/{task_name}` | 切换任务并重置 | | `POST` | `/step` | 执行一个动作 | | `GET` | `/state` | 获取内部状态 | | `POST` | `/grade` | 对当前 episode 进行评分 | | `POST` | `/demo/run?task={name}` | **SSE stream — live demo** | | `GET` | `/demo/tasks` | UI 的任务元数据 | | `GET` | `/docs` | Swagger API 文档 | ## 🚀 快速开始 ### 本地运行 ``` # Clone git clone https://github.com/sahilshingate01/incident-response-env.git cd incident-response-env # Install dependencies pip install -r requirements.txt # Start the server python -m uvicorn server.app:app --host 0.0.0.0 --port 7860 # Open http://localhost:7860 for the live demo ``` ### 使用 Docker ``` docker build -t incident-env . docker run -p 7860:7860 incident-env ``` ### 运行推理(使用您自己的 LLM) ``` export API_KEY="your-api-key" export API_BASE_URL="https://api-inference.huggingface.co/v1/" python inference.py ``` ## 📁 项目结构 ``` incident-response-env/ ├── server/ │ ├── app.py # FastAPI server & endpoints │ ├── demo_routes.py # SSE streaming demo endpoint │ └── graders.py # Trajectory grading logic ├── src/static/ │ └── index.html # Live demo dashboard (single file, no build) ├── data/ │ ├── fake_metrics.py # Deterministic metrics engine │ ├── fake_logs.py # Deterministic log engine │ ├── fake_deploys.py # Deterministic deploy history │ └── incident_scenarios.py # Task definitions ├── environment.py # Core RL environment (step/reset) ├── models.py # Pydantic schemas ├── demo_agent.py # Hardcoded optimal agent for demos ├── inference.py # LLM inference runner ├── Dockerfile # python:3.11-slim, port 7860 └── openenv.yaml # OpenEnv registration ``` ## 📊 基线分数 | 任务 | 模型 | 评分器分数 | 步数 | 总奖励 | |---|---|---|---|---| | `single_service_failure` | DeepSeek-V3.1 | **0.900** | 9 | +1.60 | | `database_latency` | DeepSeek-V3.1 | **0.617** | 15 | +0.25 | | `cascade_failure` | Llama 3.1 70B | **0.450** | 12 | +0.80 | **Demo agent(硬编码最优):** 任务 1: +1.70 | 任务 2: +1.90 | 任务 3: +2.60 ## License MIT — 为 OpenEnv Hackathon 构建,作者 [Sahil Shingate](https://github.com/sahilshingate01)。
标签:Apex, DLL 劫持, Docker, LLM评估, Ollama, OpenEnv, SRE, 事故响应, 人工智能, 偏差过滤, 大语言模型, 安全防御评估, 强化学习, 推理模型, 故障诊断, 机器学习, 根因分析, 模拟环境, 用户模式Hook绕过, 自动化运维, 请求拦截, 运维, 逆向工具