RMx-03/oncall-env

GitHub: RMx-03/oncall-env

一个模拟生产环境值班事件响应的沙箱环境,用于训练和评估AI智能体在SRE/DevOps场景下的事件分诊、根因分析和故障修复能力。

Stars: 0 | Forks: 0

# OnCall 事件分诊环境 ## 动机 每个工程团队都会处理生产环境事件。当服务在凌晨 3 点宕机时, 值班工程师必须快速分诊告警、调查日志和指标, 定位根因,并执行正确的修复——这一切都在时间压力下进行。 本环境模拟了这种真实世界的工作流: **分诊 → 调查 → 诊断 → 修复**。 它填补了 OpenEnv 生态系统中的一个空白——目前还没有事件响应环境。 这对于训练和评估可以在值班事件响应中协助人类(或最终取代人类)的 AI 智能体非常有用。 ### 模拟基础设施 该环境模拟了一个包含 8 个服务的微服务架构: ``` ┌─────────┐ ┌───────────┐ ┌──────────┐ │ api-gw │────▶│ order-svc │────▶│ order-db │ └─────────┘ └───────────┘ └──────────┘ │ │ │ ┌────────────┐ ┌───────────────────┐ ├─────────▶│payment-svc │ │ notification-svc │ │ └────────────┘ └───────────────────┘ │ ├─────────▶┌──────────┐ │ │ auth-svc │ │ └──────────┘ │ ├─────────▶┌──────────┐ ┌────────────┐ │ │ cache │ │ search-svc │ └─────────▶└──────────┘ └────────────┘ ``` 每个服务会根据当前活跃的事件场景生成真实的日志、指标和告警。 ## 动作空间 智能体通过 8 种动作类型与环境进行交互: | 动作类型 | 参数 | 描述 | |------------|------------|-------------| | `query_logs` | `service_name`, `time_range` | 获取服务的日志条目 | | `query_metrics` | `service_name`, `metric_name` | 获取 CPU/内存/延迟/错误指标 | | `check_alerts` | `service_name` (可选) | 查看活跃的监控告警 | | `check_service_status` | `service_name` (可选) | 检查服务健康状况 (healthy/degraded/down) | | `set_severity` | `severity` (P1–P4) | 对事件严重程度进行分类 | | `identify_root_cause` | `root_cause`, `root_cause_category` | 声明根因 | | `execute_remediation` | `remediation_action`, `remediation_target` | 执行修复 (**终止性**) | | `escalate` | `escalation_team` | 将问题升级给其他团队 (**终止性**) | **终止性动作**:`execute_remediation` 和 `escalate` 会结束回合。 如果智能体超过 30 步动作,回合也会结束。 ### 根因类别 `database` · `network` · `config` · `resource` · `dependency` · `security` ### 修复动作 `restart_service` · `scale_up` · `rollback_deploy` · `flush_cache` · `fix_config` · `failover_db` ## 观察空间 每次观察(在每次动作后返回)包含: | 字段 | 类型 | 描述 | |-------|------|-------------| | `incident_summary` | `str` | 正在发生的事件的简要描述 | | `goal` | `str` | 智能体需要完成的任务 | | `action_result` | `str` | 上一次动作的人类可读结果 | | `action_success` | `bool` | 上一次动作是否成功 | | `log_entries` | `List[LogEntry]` | 日志数据(查询日志时) | | `metric_data` | `Dict[str, List[MetricDataPoint]]` | 时间序列指标(查询指标时) | | `alerts` | `List[Alert]` | 活跃告警(检查告警时) | | `service_statuses` | `List[ServiceStatus]` | 服务健康状况(检查状态时) | | `severity_set` | `bool` | 进度:智能体是否已分类严重程度? | | `root_cause_identified` | `bool` | 进度:智能体是否已识别根因? | | `remediation_executed` | `bool` | 进度:智能体是否已执行修复? | | `available_services` | `List[str]` | 智能体可以查询的服务 | | `investigation_actions_taken` | `int` | 目前为止已采取的动作 | | `max_actions` | `int` | 允许的最大动作数 (30) | ## 任务 三个难度级别,每个包含 3 个场景(共 9 个): | 任务 | 难度 | 场景 | 核心挑战 | |------|-----------|-----------|---------------| | **简单** | ⭐ | OOM crash, Disk full, Auth OOM | 单服务故障,明显的错误日志 | | **中等** | ⭐⭐ | DB pool exhaustion, Bad deploy, Cache storm | 级联的多服务故障,需要进行关联分析 | | **困难** | ⭐⭐⭐ | DNS failures, TLS expiry, Config drift | 基础设施层面的原因伪装成应用问题,存在干扰项 | ### 评分系统 回合按确定性的 0.0–1.0 等级进行评分: | 组成部分 | 权重 | 描述 | |-----------|--------|-------------| | 严重程度分类 | 0.20 | 完全匹配 = 满分,偏差一档 = 一半分数 | | 根因类别 | 0.25 | 仅限完全匹配 | | 根因描述 | 0.10 | 与真实值的关键词重叠度 | | 修复动作 | 0.25 | 仅限完全匹配 | | 修复目标 | 0.15 | 仅限完全匹配 | | 效率加分 | 0.05 | ≤10 步 = 满分,≤20 步 = 部分分数 | ## 设置与使用 ### 前置条件 - Python 3.10+ - pip ### 本地开发 ``` # 克隆仓库 git clone https://github.com/YOUR_USERNAME/oncall-env.git cd oncall-env # 创建虚拟环境 python -m venv oncall_env/.venv oncall_env/.venv/Scripts/activate # Windows # source oncall_env/.venv/bin/activate # Linux/Mac # 安装依赖 pip install -r requirements.txt pip install -e oncall_env/ # 启动环境服务器 python -m uvicorn oncall_env.server.app:app --host 0.0.0.0 --port 8000 ``` ### 使用类型化客户端 ``` from oncall_env import IncidentTriageEnv, IncidentAction # 同步使用 with IncidentTriageEnv(base_url="http://localhost:8000").sync() as env: result = env.reset(task_id="easy", seed=42) print(result.observation.incident_summary) result = env.step(IncidentAction(action_type="check_alerts")) for alert in result.observation.alerts: print(f"[{alert.severity}] {alert.title}") ``` ### Docker ``` # 构建 docker build -t oncall-env . # 运行 docker run -p 7860:7860 oncall-env # 测试 curl http://localhost:7860/health # → {"status": "healthy"} ``` ### 运行推理 基线智能体使用 LLM(通过 OpenAI 兼容的 API)来自主 调查并解决事件: ``` # 设置你的 API key set OPENAI_API_KEY=sk-... # Windows # export OPENAI_API_KEY=sk-... # Linux/Mac # 针对本地服务器运行 python inference.py # 使用不同的 provider 运行 set LLM_PROVIDER=groq set GROQ_API_KEY=gsk_... python inference.py # 针对已部署的 HF Space 运行 set ENV_URL=https://your-space.hf.space python inference.py ``` **支持的提供商**:`openai`, `openrouter`, `groq`, `gemini`, `custom` ## 运行测试 ``` # 运行所有测试 python -m pytest oncall_env/tests/ -v # 运行特定测试套件 python -m pytest oncall_env/tests/test_environment.py -v # Environment tests python -m pytest oncall_env/tests/test_graders.py -v # Grader tests python -m pytest oncall_env/tests/test_integration.py -v # Integration tests ``` ## 基线分数 *来自基线推理智能体的分数(运行 `python inference.py` 后填写):* | 任务 | 得分 | 步数 | 时间 | |------|-------|-------|------| | 简单 | — | — | — | | 中等 | — | — | — | | 困难 | — | — | — | | **平均** | **—** | | | ## 项目结构 ``` oncall-env/ ├── inference.py # Baseline LLM agent ├── Dockerfile # HF Spaces deployment ├── requirements.txt # Python dependencies ├── openenv.yaml # OpenEnv spec config │ └── oncall_env/ # Main package ├── __init__.py # Public API re-exports ├── models.py # Pydantic models (Action, Observation, State) ├── client.py # Typed EnvClient subclass ├── openenv.yaml # Package-level OpenEnv config │ ├── server/ # Environment server │ ├── app.py # FastAPI app (create_app) │ ├── environment.py # Core environment logic │ ├── scenario_engine.py # Scenario loading & selection │ ├── log_generator.py # Synthetic log generation │ ├── metrics_generator.py # Synthetic metric generation │ └── alert_generator.py # Alert generation │ ├── tasks/ # Task definitions & grading │ ├── task_definitions.py # Task configs (easy/medium/hard) │ └── graders.py # Deterministic grading (0.0–1.0) │ ├── scenarios/ # Incident scenario data (JSON) │ ├── easy_scenarios.json # 3 easy scenarios │ ├── medium_scenarios.json # 3 medium scenarios │ └── hard_scenarios.json # 3 hard scenarios │ └── tests/ # Test suite ├── test_environment.py # Environment unit tests ├── test_graders.py # Grader unit tests └── test_integration.py # Full episode integration tests ``` ## 技术亮点 - **兼容 OpenEnv**:类型化的 Pydantic 模型、`openenv.yaml`、`create_app`、Docker、HF Spaces - **确定性评分**:无随机性,不使用 LLM 作为评判者——每次评分均可复现 - **9 个真实的场景**:从明显的 OOM crash 到隐蔽的 TLS cert 过期 - **密集的奖励信号**:在每个决策点(严重程度、根因、修复)给予奖励 - **多提供商推理**:支持 OpenAI、Groq、OpenRouter、Gemini 或任何兼容 OpenAI 的 API - **模块化架构**:清晰分离模型、服务器、任务和场景
标签:AIOps, AI智能体, API集成, IT运维, LLM Agent, OnCall, OpenEnv, Petitpotam, RL环境, Socks5代理, SRE, 人工智能, 偏差过滤, 可观测性, 告警分析, 大模型评估, 微服务架构, 性能监控, 故障诊断, 智能运维, 根因分析, 模块化设计, 模型训练, 模拟环境, 生产环境模拟, 用户模式Hook绕过, 系统稳定性, 自动化修复, 自动化运维, 请求拦截, 逆向工具