akashrajeev/incident-response-env

GitHub: akashrajeev/incident-response-env

基于 OpenEnv 框架的事故响应模拟环境,提供三级难度的站点可靠性任务,用于训练和评估 AI 智能体的警报分类与根因分析能力。

Stars: 0 | Forks: 0

title: Incident Response OpenEnv emoji: 🚨 colorFrom: blue colorTo: indigo sdk: docker app_port: 8000 pinned: false tags: - openenv # Incident Response OpenEnv 为 [OpenEnv](https://github.com/meta-pytorch/OpenEnv) 提供的逼真**站点可靠性 / 事故分类**环境:智能体读取触发警报,选择补救**`action_type`**,定位正确的**`alert_id`**,并获得带有部分积分的分级奖励。三个基准任务(**简单 -> 中等 -> 困难**)模拟了单事故分类、从症状中确定根因以及有序级联解决。 ## 为什么这个提交脱颖而出 - **真实世界领域** - 不是玩具网格或猜谜游戏;模型必须推理依赖关系和严重程度。 - **完整的 OpenEnv 接口** - 类型化的 `Action` / `Observation` / `State`,`reset` / `step` / `state`,`openenv.yaml`,HTTP API,Docker。 - **有意义的奖励** - 错误目标上的稀疏成功,针对“正确方向”的部分信号,困难任务上的链式顺序。 - **可复现的基线** - 根目录 `inference.py` 使用官方 OpenAI client,环境变量 `API_BASE_URL`,`MODEL_NAME`,`HF_TOKEN`,默认仅在 stdout 输出结构化的 `[START]` / `[STEP]` / `[END]` 日志(无多余行)。 ## 任务 | 任务 | 重点 | |---------------|---------------------------------------------| | `task_easy` | 单个磁盘压力警报 -> 扩展存储。 | | `task_medium` | 多个警报 -> 修复 DB 根因。 | | `task_hard` | 有序 `inc-342`... 级联 -> 完整链条。 | 奖励始终在每个步骤中处于 **\[0, 1]**;基线将**回合得分**(episode score)上限设为 **1.0**(步骤奖励之和)。 ## 动作与观察 **动作** (`IncidentResponseAction`):`alert_id`,`action_type`,`notes`。 **观察**:`alerts[]` (id, title, severity, description, source),`resolved_alerts`,`system_health`,`step_number`,`message` (评分器反馈),以及来自 HTTP wrapper 的顶层 `reward` / `done`。 **状态** (`GET /state`):`episode_id`,`step_count`,`task_id`,`max_steps`,`total_reward`,`scenario_name`。 ## 快速开始(本地) ``` cd incident_response_env uv sync uv run uvicorn server.app:app --host 0.0.0.0 --port 8000 ``` 健康检查: ``` curl -s http://127.0.0.1:8000/health ``` 重置与步进(示例): ``` curl -s -X POST http://127.0.0.1:8000/reset -H "Content-Type: application/json" -d "{\"task_id\":\"task_easy\"}" curl -s -X POST http://127.0.0.1:8000/step -H "Content-Type: application/json" -d "{\"action\":{\"alert_id\":\"disk-alert-07\",\"action_type\":\"scale_up\",\"notes\":\"Relieve disk pressure\"}}" ``` ## 基线推理 (`inference.py`) 黑客松线束所需(兼容 OpenAI 的 client): ``` $env:ENV_URL = "http://127.0.0.1:8000" $env:API_BASE_URL = "https://router.huggingface.co/v1" $env:MODEL_NAME = "" $env:HF_TOKEN = "" uv run python inference.py ``` 可选: - `INFERENCE_STUB=1` - 在没有 LLM 的情况下运行(确定性策略),用于 CI 或冒烟测试。 - `INFERENCE_SUMMARY=1` - 打印额外的 `[SUMMARY]` 行(如果需要严格的 stdout 解析器,请省略)。 **Windows / `openenv push`:** 如果您看到 `charmap` 编解码器错误,请在推送前设置 UTF-8 模式:`set PYTHONUTF8=1` (cmd) 或 `$env:PYTHONUTF8="1"` (PowerShell)。 运行时间:保持总挂钟时间**在 20 分钟以内**;如有需要,请使用小型 instruct model。 ## Docker ``` docker build -t incident-response-env -f server/Dockerfile . docker run --rm -p 8000:8000 incident-response-env ``` ## 第 8 阶段 - 部署到 Hugging Face Spaces 在 Hugging Face 上创建一个名为(例如)`incident-response-env` 的 **Docker** Space(如果您使用 CLI 默认设置,则必须与您的 repo id 匹配)。 ### 方法 A - OpenEnv CLI(推荐) 当前的 OpenEnv 包公开的是 **`openenv push`**,而不是 `openenv deploy`(如果您的课程 PDF 说的是 `deploy`,请使用带有相同 repo id 的 **`push`**)。 ``` # 一次性 huggingface-cli login # paste HF token when prompted cd incident_response_env openenv validate openenv push --repo-id YOUR_HF_USERNAME/incident-response-env # Windows: 如果推送因编码失败,尝试 PYTHONUTF8=1 # 如有需要添加 --private;若遇到 Gradio/UI 问题,使用 --no-interface ``` `openenv push` 读取 **`openenv.yaml`** 并上传环境;repo 根目录的 **`Dockerfile`** 由 HF 的 Docker SDK builder 使用。 ### 方法 B - 手动 Git push ``` cd incident_response_env git init git remote add origin https://huggingface.co/spaces/YOUR_HF_USERNAME/incident-response-env git add . git commit -m "OpenEnv incident-response submission" git push -u origin main ``` 确保 Space 在 Hugging Face UI 上的 **SDK** 是 **Docker**(README 头部信息已设置 `sdk: docker`,`app_port: 8000`)。 ### 部署后 公开应用 URL 通常为: `https://YOUR_HF_USERNAME-incident-response-env.hf.space` 冒烟测试(无尾部斜杠问题 - 使用 Hugging Face 显示的确切主机): ``` curl -sS https://YOUR_HF_USERNAME-incident-response-env.hf.space/health curl -sS -X POST https://YOUR_HF_USERNAME-incident-response-env.hf.space/reset \ -H "Content-Type: application/json" -d "{}" ``` 将 `openenv.yaml` 中的 **`docker_image`** 更新为 `YOUR_HF_USERNAME/incident-response-env` 以保持文档一致性。 然后运行 **`openenv validate --url https://...hf.space`** 以及您的组织者提供的预提交脚本。 ## 提交前验证 ``` openenv validate # 可选:针对已部署 URL 的运行时检查 openenv validate --url https://.hf.space ``` ## 预提交检查清单(第 1 轮) 与官方仪表板交叉核对(例如 Scaler / Meta OpenEnv Round 1): - [ ] **`inference.py`** 位于 repo 根目录;使用 **`OpenAI`** client + **`API_BASE_URL`**,**`MODEL_NAME`**,**`HF_TOKEN`** - [ ] Stdout:仅 **`[START]`**,**`[STEP]`**,**`[END]`**(避免 `INFERENCE_SUMMARY` 以便自动解析) - [ ] **`openenv validate`** 通过;如果需要,存在 **`uv.lock`** - [ ] **Dockerfile** 在 CI 中构建成功 - [ ] **HF Space** 正常运行;health + reset 有响应 - [ ] **>= 3 个任务** 带有评分器;奖励在 **[0, 1]** 范围内 - [ ] **README** 描述了领域、空间、设置(本文件) - [ ] git 中无密钥;轮换任何泄露的 token ## 项目布局 ``` incident_response_env/ |-- Dockerfile # HF Spaces default path (same image as server/Dockerfile) |-- .dockerignore |-- inference.py # Hackathon baseline (LLM + env HTTP) |-- openenv.yaml |-- models.py |-- client.py # WebSocket EnvClient wrapper |-- pyproject.toml |-- uv.lock `-- server/ |-- app.py # FastAPI app |-- environment.py # reset / step / state |-- scenarios.py |-- graders.py |-- Dockerfile `-- requirements.txt ``` ## 客户端 (WebSocket) ``` from incident_response_env import IncidentResponseEnv, IncidentResponseAction with IncidentResponseEnv(base_url="http://localhost:8000") as env: r = env.reset(task_id="task_easy") # pass kwargs your server accepts r = env.step( IncidentResponseAction( alert_id="disk-alert-07", action_type="scale_up", notes="Expand storage.", ) ) ``` (有关 `_step_payload` / 解析详情,请参阅 `client.py`。) ## 许可证 请参阅仓库中的 `LICENSE`。
标签:AIOps, Docker, HTTP API, LLM Agent, OpenAI API, OpenEnv, Petitpotam, Python, SRE, 仿真环境, 偏差过滤, 告警分诊, 安全防御评估, 强化学习环境, 故障修复, 无后门, 根因分析, 模型评测, 站点可靠性工程, 级联故障, 请求拦截, 运维自动化, 逆向工具