Vivek0925/incident-response-env

GitHub: Vivek0925/incident-response-env

一个用于训练和评估 AI 智能体解决 DevOps 生产故障的强化学习模拟环境,覆盖流量激增、数据库过载、部署失败等典型场景。

Stars: 0 | Forks: 0

## 标题: 事件响应环境 emoji: ⚡ colorFrom: purple colorTo: blue sdk: docker pinned: false # AI DevOps 事件响应环境 此环境模拟真实世界的 DevOps 事件,例如流量激增、 内存泄漏、数据库过载和部署失败。 ## 为什么选择此环境 现代生产系统会以连锁方式发生故障: ``` traffic spike → database overload → service instability → rising error rates ``` 该环境允许 AI 智能体在现实条件下——伴随着时间压力、级联故障和运营成本权衡——练习多步基础设施恢复。它反映了真实的站点可靠性工程师(Site Reliability Engineer)的决策循环。 ## 观察空间 每一步都会返回完整的基础设施状态快照: ``` { "incident": "traffic_spike", "cpu_usage": 95, "memory_usage": 80, "database_latency": 100, "network_errors": 5, "error_rate": 8, "servers": 3, "time_elapsed_s": 12, "resolved": false } ``` | 字段 | 类型 | 描述 | |---|---|---| | `incident` | `string` | 活跃的事件类型 | | `cpu_usage` | `int` | CPU 负载百分比 (0–100) | | `memory_usage` | `int` | 内存使用百分比 (0–100) | | `database_latency` | `int` | 数据库响应时间(毫秒) | | `network_errors` | `int` | 每秒网络错误计数 | | `error_rate` | `int` | 每秒 HTTP 5xx 错误数 | | `servers` | `int` | 活跃的服务器实例数 | | `time_elapsed_s` | `int` | 事件发生以来的秒数 | | `resolved` | `bool` | 事件是否已解决 | ## 动作空间 6 种离散的基础设施动作: | 动作 | 效果 | 最适用场景 | |---|---|---| | `scale_servers` | 增加服务器数量,降低 CPU 负载 | `traffic_spike` | | `restart_service` | 重启应用进程,消除不稳定状态 | `failed_deployment` | | `restart_database` | 重置数据库连接,降低延迟 | `database_overload` | | `clear_cache` | 清空缓存,降低内存压力 | `traffic_spike`, `database_overload` | | `rollback_deployment` | 回滚到上一个稳定版本 | `failed_deployment` | | `ignore_alert` | 无操作 | — | ## 奖励函数 ``` reward = -1 per step (time cost) + 10 for effective action - 5 for wrong action - 20 if system enters critical state + 100 on successful resolution - 50 on episode timeout ``` 最优策略能够及早识别事件类型,并以最少的步骤应用正确的动作链。 ## 事件类型 ### 简单 — 流量激增 突发的 HTTP 负载激增导致 CPU 饱和。可通过单个 `scale_servers` 动作解决。 ### 中等 — 数据库过载 连接池耗尽导致延迟和错误率上升。需要执行 `restart_database` 或 `clear_cache`。 ### 困难 — 部署失败 糟糕的发布引发跨层级联故障。需要在执行 `rollback_deployment` 之后执行 `restart_service`。 ## 环境动态 ### 级联故障 如果不及时处理,事件会持续恶化: ``` database overload → network errors rise → error rate spikes → service instability ``` ### 基于时间的退化 在没有干预的情况下,每一步都会使系统健康状况恶化——CPU、内存和数据库延迟均会持续攀升。 ### 事件传播 高难度事件会跨组件发生连锁反应,要求智能体按顺序解决多种故障模式。 ## API 接口 ### 重置环境 ``` POST /reset?difficulty=easy # easy | medium | hard ``` ### 执行动作 ``` POST /step Content-Type: application/json { "action": "restart_service" } ``` ### 获取当前状态 ``` GET /state ``` 服务器运行后,可在 `/docs` 查看完整的交互式文档。 ## 快速开始 ``` # 安装依赖 pip install -r requirements.txt # 启动环境服务器 python -m uvicorn server.app:app --reload # 打开 API 文档 open http://127.0.0.1:8000/docs ``` ### Docker ``` docker build -t incident-env . docker run -p 8000:8000 incident-env ``` ## 示例: 基线智能体 ``` python baseline_agent.py ``` ``` import requests, random BASE = "http://localhost:8000" ACTIONS = ["scale_servers", "restart_service", "restart_database", "clear_cache", "rollback_deployment", "ignore_alert"] obs = requests.post(f"{BASE}/reset", params={"difficulty": "easy"}).json() total_reward = 0 for step in range(60): action = random.choice(ACTIONS) result = requests.post(f"{BASE}/step", json={"action": action}).json() total_reward += result["reward"] print(f"Step {step+1:02d} | {action:<22} | reward: {result['reward']:+.0f} | done: {result['done']}") if result["done"]: break print(f"\nTotal reward: {total_reward:.0f}") ``` ### 示例: LLM 智能体 ``` import anthropic, requests client = anthropic.Anthropic() BASE = "http://localhost:8000" ACTIONS = ["scale_servers", "restart_service", "restart_database", "clear_cache", "rollback_deployment", "ignore_alert"] obs = requests.post(f"{BASE}/reset", params={"difficulty": "hard"}).json() for step in range(60): result = client.messages.create( model="claude-opus-4-5", max_tokens=20, messages=[{ "role": "user", "content": f"""You are an SRE agent resolving a production incident. State: {obs} Actions: {', '.join(ACTIONS)} Reply with only the single best action name.""" }] ) action = result.content[0].text.strip() step_result = requests.post(f"{BASE}/step", json={"action": action}).json() obs = step_result["observation"] print(f"Step {step+1:02d} | {action:<22} | reward: {step_result['reward']:+.0f}") if step_result["done"]: print(f"Resolved in {step+1} steps.") break ``` ## 项目结构 ``` incident-response-env/ ├── env/ │ └── incident_env.py # Core RL environment logic ├── tasks/ │ ├── scenarios.py # Incident definitions and difficulty tiers │ └── graders.py # Reward and evaluation logic ├── server/ │ └── app.py # FastAPI server ├── baseline_agent.py # Random baseline agent ├── openenv.yaml # OpenEnv spec ├── requirements.txt ├── Dockerfile └── README.md ``` ## 评估指标 | 指标 | 描述 | |---|---| | 解决率 | 成功解决的事件百分比 | | 平均解决步骤 | 已解决事件中的平均步骤数 | | 平均事件奖励 | 每个事件的平均累积奖励 | | 错误动作率 | 执行无效动作的步骤百分比 | ## 使用场景 - 训练自主 SRE 智能体 - 基准测试 LLM 的工具使用与规划能力 - 针对序列决策的强化学习研究 - DevOps 自动化原型设计 ## 路线图 - [ ] Gymnasium (`gym.Env`) 包装器,用于兼容标准 RL 库 - [ ] 多事件级联场景 - [ ] 带有噪声/误导性警报的测试,以验证智能体的鲁棒性 - [ ] 智能体排行榜 ## 许可证 MIT
标签:AIOps, AI训练环境, Docker, IT运维, Python, RL环境, Site Reliability Engineering, Socks5代理, SRE, 人工智能, 偏差过滤, 内存泄漏, 基础设施仿真, 多步决策, 大模型智能体, 安全防御评估, 强化学习, 故障恢复, 数据库过载, 无后门, 流量突增, 用户模式Hook绕过, 级联故障, 自动化运维, 请求拦截, 逆向工具, 部署失败