Ankitpatil944/-incident-response-commander

GitHub: Ankitpatil944/-incident-response-commander

这是一个用于评估 AI 代理在生产中断期间指挥能力的基准环境,模拟真实告警与拓扑证据以测试事故分类、团队分配及决策沟通能力。

Stars: 0 | Forks: 0

title: Incident Response Commander sdk: docker app_port: 7860 base_path: /web tags: - openenv - incident-response - sre - production - real-world # 事件响应 Commander `incident_env` 是一个用于**生产中断期间事故指挥**的真实 OpenEnv 基准测试。与解决玩具问题不同,Agent 必须表现得像一个值班的 Incident Commander:对严重性进行分类,分配正确的响应团队,决定是否升级,并在不确定的情况下发布结构化状态更新。 该环境旨在实现**确定性评估**和**轨迹形状奖励**,同时感觉就像一个实际的操作工作流。每个回合都会展示来自隐藏事故场景的告警、日志、服务拓扑和时间线证据。Agent 通过标准的 OpenEnv 循环进行交互:`reset()` → `step()` → `state()`。 ## 为什么这个基准测试很重要 现代 Agent 越来越被要求在高风险的生产环境中运行。事故指挥需要: - 将根本原因与下游症状区分开来 - 选择正确的组织所有者,而不仅仅是命名一个损坏的服务 - 决定是否有必要进行广泛的升级 - 清晰地沟通,避免幻觉或夸大客户影响 该基准测试评估 Agent 是否可以按顺序完成这四项工作,并进行确定性评分,并对低质量决策给予明确惩罚。 ``` flowchart LR A[Reset Task] --> B[Alerts + Logs + Timeline] B --> C[Agent Decision] C --> D[Classify Severity] C --> E[Assign Team] C --> F[Set Escalation] C --> G[Publish Status] D --> H[Reward + Penalties] E --> H F --> H G --> H H --> I[Next State or Episode End] ``` ## Agent 必须做什么 每个回合都需要四个具体的输出: 1. `SEV-1` 到 `SEV-4` 严重性分类 2. 负责团队分配: `backend`, `infra`, `database`, `network`, `security`, `sre` 3. 升级决策: `true` 或 `false` 4. 结构化沟通: `summary`, `customer_impact`, `next_action`, `owner` 该环境目前包含 **28 个确定性场景**: - `8` 个简单 - `8` 个中等 - `12` 个困难 困难场景包含冲突信号、嘈杂的基础设施症状、误导性告警和模糊的所有权,以减少简单的模式匹配。 ## 任务设计 公开了三个基准测试任务并由基线使用: | Task ID | Difficulty | What It Tests | |---|---|---| | `easy_triage` | Easy | 具有明显所有权和严重性的明显故障 | | `medium_coordination` | Medium | 需要更好的团队/升级推理的混合信号 | | `hard_conflict` | Hard | 最响亮的告警并非根本原因的冲突证据 | 任务选择在 [incident_env/tasks/catalog.py](./incident_env/tasks/catalog.py) 中实现,场景数据在 [incident_env/tasks/scenarios.py](./incident_env/tasks/scenarios.py) 中。 ``` xychart-beta title "Benchmark Shape" x-axis ["easy_triage", "medium_coordination", "hard_conflict"] y-axis "Relative reasoning burden" 0 --> 10 bar [3, 6, 9] ``` ## 动作、观察和状态空间 ### 动作:`IncidentAction` Agent 使用类型化的 Pydantic 模型执行操作: - `action_type` - 用于 `classify_severity` 的 `severity` - 用于 `assign_team` 的 `team` - 用于 `set_escalation` 的 `escalate` - 用于 `publish_status` 的 `status_update` - 可选的 `rationale` ### 观察:`IncidentObservation` Agent 接收: - 事故元数据:`incident_id`、`title`、`task_name`、`difficulty` - 证据:`alerts`、`logs`、`service_map`、`timeline` - 四个所需决策维度的进度标志 - 目前提交的选择 - `allowed_actions` - `last_action_error` - `reward_breakdown` - `steps_remaining` ### 状态:`IncidentState` 环境跟踪: - 回合身份和计数器 - 提交的严重性/团队/升级/状态 - 每个维度的奖励组件 - 累积惩罚 - 最终有界分数 ## 奖励设计 环境在整个轨迹中返回形状奖励,而最终回合分数则严格保持在评估器要求的范围内。 正向组件: - `+0.30` 正确的严重性 - `+0.30` 正确的团队 - `+0.20` 正确的升级 - `+0.20` 准确的沟通 沟通学分分为: - 服务/事故摘要质量 - 客户影响正确性 - 缓解方向 - 所有者正确性 惩罚行为: - 错误的严重性/团队/升级决策会降低分数 - 重复的决策会降低分数 - 低质量或矛盾的状态更新会降低分数 - 当上游分流错误时,沟通会被削弱 所有公开的任务分数都严格限制在 `(0, 1)` 范围内,以满足评估要求。 ## 基线推理 所需的根级 [inference.py](./inference.py) 使用 OpenAI 客户端并发出严格的评估器日志: - `[START]` - `[STEP]` - `[END]` 它按顺序运行所有三个任务,目前产生: | Task | Local Baseline Score | |---|---| | `easy_triage` | `0.99` | | `medium_coordination` | `0.99` | | `hard_conflict` | `0.99` | 该基线是确定性的,并由证据驱动。它不再直接基于精确的场景标题。 ## 本地设置 ``` python -m venv .venv .\.venv\Scripts\Activate.ps1 pip install --upgrade pip pip install -e .[dev] Copy-Item .env.example .env ``` 至少设置: ``` HF_TOKEN=your_token_here API_BASE_URL=https://router.huggingface.co/v1 MODEL_NAME=Qwen/Qwen2.5-72B-Instruct ``` ## 本地运行 直接 Python 使用: ``` from incident_env import IncidentAction, IncidentEnv, SeverityLevel env = IncidentEnv() obs = env.reset("easy_triage") obs, reward, done, info = env.step( IncidentAction(action_type="classify_severity", severity=SeverityLevel.SEV1) ) ``` 启动环境服务: ``` python -m server.app ``` 或者: ``` server ``` 然后打开: ``` http://127.0.0.1:7860/web ``` ## 验证 ``` python -m pytest -q .\.venv\Scripts\openenv validate python inference.py docker build -t incident-env . docker run --rm -p 7860:7860 incident-env ``` ## Docker 和 Hugging Face Spaces 根目录下的 [Dockerfile](./Dockerfile) 兼容 HF Space,并设置: - Python 3.11 slim - `ENABLE_WEB_INTERFACE=true` - `uvicorn server.app:app --host 0.0.0.0 --port 7860` 使用以下命令部署: ``` .\.venv\Scripts\openenv push --repo-id /incident-response-commander ``` 部署后,设置 Space 配置: - Secret: `HF_TOKEN` - Variable: `API_BASE_URL=https://router.huggingface.co/v1` - Variable: `MODEL_NAME=Qwen/Qwen2.5-72B-Instruct` 然后验证: - `/reset` - `/schema` - `/web` ## 仓库布局 ``` incident_env/ |-- client.py |-- env.py |-- graders.py |-- models.py |-- task_graders.py |-- server/ | |-- app.py | |-- incident_environment.py | |-- requirements.txt | `-- web_ui.py `-- tasks/ |-- catalog.py `-- scenarios.py ``` ## 是什么让此提交强有力 - 真实的操作工作流,而不是玩具基准测试 - 确定性和程序化评分 - 带有惩罚的轨迹形状奖励 - 明确的简单/中等/困难进阶 - Docker + Hugging Face Space 部署 - 用于事故演练的自定义 `/web` 界面 - 在 `openenv.yaml` 中公开任务/评分器 ## 范围 这故意设计为 **incident command benchmark**,而不是一个完整的工单系统、chatops 或实时工具使用模拟器。该环境针对黑客松约束下的可靠评估进行了优化:确定性评分、有界运行时间和简单部署,同时仍然模拟组织关心的真实决策循环。
标签:AI基准测试, Docker, NIDS, OpenEnv, SRE, 事件指挥, 偏差过滤, 决策支持, 升级决策, 告警管理, 团队调度, 大模型评测, 安全防御评估, 容器化, 故障响应, 故障定级, 服务拓扑, 根本原因分析, 状态更新, 生产环境, 确定性评估, 自动化运维, 请求拦截, 轨迹奖励, 逆向工具