DevaanshPathak/SRE-Zero

GitHub: DevaanshPathak/SRE-Zero

SRE-Zero 是一个模拟 SRE 事件响应的研究基准,用于在确定性故障环境中评估工具使用型 LLM 智能体的诊断推理与修复能力。

Stars: 0 | Forks: 0

# SRE-Zero SRE-Zero 是一个早期研究基准,旨在研究模拟事件响应工作流中可靠的工具使用型 LLM 智能体。 v0.1 代码库包含 **SRE-Zero Mini**,这是一个确定性环境,智能体可在其中诊断涉及模拟 `web_server`、`database`、`cache`、`message_queue` 和 `load_balancer` 服务的故障事件。智能体会检查日志、指标、状态和配置,然后在步骤预算内应用最小化的内存修复。 这是早期的研究代码。它被有意设计为小型、安全且仅限模拟的程序。它不会控制真实的基础设施,也不会执行任意 shell 命令。外部 LLM API 是可选的,仅当明确选择 LLM 基线时才会被调用。 ## 研究动机 许多智能体基准只衡量最终答案的质量,而没有将智能体置于有状态的实际运维环境中。SRE-Zero 专注于一个更具体的问题:一个使用工具的智能体能否收集相关证据,区分症状与根本原因,应用最小化的修复,并可靠地解决事件? 初始基准强调: - 确定性事件任务。 - 形式化的简单/中等/困难任务划分。 - 结构化的工具动作。 - 文本和结构化的观察结果。 - 部分学分奖励。 - 简单可复现的基线。 - 成功率之外的指标。 ## 安装 需要 Python 3.11 或更高版本。 ``` python -m pip install -e ".[dev]" ``` ## 快速开始 运行脚本化专家回合: ``` python examples/run_single_episode.py --task cache_crash --agent scripted ``` 运行随机基线评估: ``` python eval/run_eval.py --agent random --episodes 5 ``` 运行脚本化基线评估: ``` python eval/run_eval.py --agent scripted --episodes 5 ``` 运行 Next.js 前端: ``` ./start-frontend.sh ``` 然后打开 `http://localhost:3000`。 运行可选的 Python HTTP 后端: ``` ./start-backend.sh ``` 后端默认监听 `http://127.0.0.1:8000`,并暴露 `/health`、`/tasks`、`/episode/reset` 和 `/episode/step`。 运行特定难度的划分: ``` python eval/run_eval.py --agent scripted --difficulty hard --episodes 1 ``` 配置可选的 OpenAI 兼容 LLM 基线: ``` cp .env.example .env ``` 然后编辑 `.env`: ``` OPENAI_API_KEY=... OPENAI_BASE_URL=https://api.openai.com/v1 OPENAI_MODEL=... ``` 运行 LLM 基线: ``` python eval/run_eval.py --agent prompting --episodes 1 python eval/run_eval.py --agent react --episodes 1 python eval/run_eval.py --agent open_source --episodes 1 python eval/run_eval.py --agent frontier --episodes 1 ``` 生成包含原始记录和各模型得分的 JSON 报告: ``` python eval/run_baseline_marks.py --baselines all --episodes 1 --output notes/runs/baseline_marks.json python eval/run_baseline_marks.py --baselines prompting react --models openai/gpt-5-mini openai/gpt-5.4-mini ``` 仅运行非 API 基线: ``` python eval/run_baseline_marks.py --baselines all --no-api --episodes 3 ``` 运行一个基线回合并保存其轨迹: ``` python eval/run_agent.py --agent scripted --task misleading_web_500_db_rootcause ``` 运行完整的默认全面测试: ``` python eval/run_all_eval.py --preset paper --timeout-seconds 60 ``` 有关预算控制的日常收集,请参阅 `evals.md`。它将论文预设拆分为 按天执行的命令,这些命令会将 JSON 文件写入 `notes/runs/` 目录下。 完整的全面测试会打印运行计划、每个基线/模型运行的带时间戳的 开始/结束日志,以及任务/回合进度的实时进度条。它还会默认将 日志文件写入 `notes/runs/run_all_eval.log`。 `paper` 预设会在每个 LLM 基线类别中比较 4-5 个模型: - `prompting`:`openai/gpt-5-mini`、`openai/gpt-5.4-mini`、`google/gemini-3.1-flash-lite`、`qwen/qwen3.6-flash`、`mistralai/mistral-medium-3-5` - `react`:`openai/gpt-5-mini`、`openai/gpt-5.4`、`anthropic/claude-sonnet-4.6`、`google/gemini-3.1-pro-preview`、`x-ai/grok-4.3` - `open_source`:`ibm-granite/granite-4.1-8b`、`inclusionai/ring-2.6-1t:free`、`qwen/qwen3.6-35b-a3b`、`nvidia/nemotron-3-super-120b-a12b:free`、`google/gemma-4-26b-a4b-it:free` - `frontier`:`openai/gpt-5.5`、`anthropic/claude-opus-4.7-fast`、`google/gemini-3.1-pro-preview`、`x-ai/grok-4.3`、`mistralai/mistral-medium-3-5` 使用更小的冒烟测试预设: ``` python eval/run_all_eval.py --preset quick --timeout-seconds 60 ``` 从合并的结果 JSON 创建基本的 SVG 图表: ``` python eval/plot_results.py --input notes/runs/all_eval_summary.json --output-dir notes/plots/latest ``` 禁用日志文件或选择自定义路径: ``` python eval/run_all_eval.py --preset quick --no-log-file python eval/run_all_eval.py --preset paper --log-file notes/runs/paper_sweep.log ``` 覆盖任何模型类别: ``` python eval/run_all_eval.py \ --prompting-models openai/gpt-5-mini \ --react-models openai/gpt-5-mini \ --open-source-models ibm-granite/granite-4.1-8b inclusionai/ring-2.6-1t:free \ --frontier-models openai/gpt-5.5 anthropic/claude-opus-4.7-fast \ --summary-output notes/runs/all_eval_summary.json ``` 运行测试和代码检查: ``` pytest ruff check . ``` ## 任务套件摘要 SRE-Zero Mini v0.1 包含 25 个确定性事件任务,这些任务由 `srezero/task_configs/` 中的 JSON 配置提供支持。 | 任务 | 难度 | 根本原因 | | --- | --- | --- | | `cache_crash` | 简单 | Cache 服务崩溃 | | `web_worker_crash` | 简单 | Web worker 进程崩溃 | | `database_disk_full` | 简单 | 数据库磁盘已满 | | `cache_memory_pressure` | 简单 | Cache 内存限制过低 | | `db_pool_exhaustion` | 中等 | 数据库连接池耗尽 | | `cache_latency_degradation` | 中等 | Cache TTL 配置过低 | | `db_slow_queries_missing_index` | 中等 | 缺少数据库索引导致慢查询 | | `web_worker_saturation` | 中等 | Web worker 池太小 | | `cache_eviction_storm` | 中等 | 内存不足导致的 Cache 驱逐风暴 | | `db_query_timeout_low` | 中等 | 数据库查询超时设置过低 | | `web_timeout_misconfig` | 困难 | Web 超时配置过低 | | `misleading_web_500_db_rootcause` | 困难 | 数据库饱和导致 Web 故障 | | `web_cache_host_misconfig` | 困难 | Web cache 主机配置错误 | | `cascading_db_latency` | 困难 | 数据库读取延迟导致级联延迟 | | `cache_disabled_config_regression` | 困难 | 配置回退导致 Web cache 使用被禁用 | | `message_queue_crash` | 简单 | Message queue 服务崩溃 | | `load_balancer_health_check_misconfig` | 简单 | Load balancer 健康检查路径配置错误 | | `message_queue_backlog_consumers_low` | 简单 | Message queue 消费者并发数过低 | | `load_balancer_connection_limit_low` | 中等 | Load balancer 最大连接数过低 | | `message_queue_retry_limit_low` | 中等 | Message queue 重试限制过低 | | `load_balancer_sticky_session_hotspot` | 中等 | Sticky session 导致后端热点 | | `message_queue_visibility_timeout_low` | 中等 | Message queue 可见性超时过低 | | `misleading_queue_backlog_db_rootcause` | 困难 | 数据库延迟导致 queue 积压 | | `misleading_lb_502_cache_rootcause` | 困难 | Cache 崩溃导致 load-balancer 出现 502 错误 | | `load_balancer_bad_backend_weight` | 困难 | Load balancer 后端权重配置错误 | 形式化划分文件: - `easy`(简单):7 个任务 - `medium`(中等):10 个任务 - `hard`(困难):8 个任务 划分清单文件为 `srezero/task_splits.json`。 ## API 主要的 API 是 `SREEnv`: ``` from srezero import SREEnv env = SREEnv() obs = env.reset(task_id="cache_crash", seed=0) result = env.step("check_status(cache)") ``` Gym 风格的 API 是 `SREOpenEnv`: ``` from srezero import SREOpenEnv env = SREOpenEnv(task_id="cache_crash") obs, info = env.reset(seed=0) obs, reward, terminated, truncated, info = env.step("check_status(cache)") ``` ## 前端 `frontend/` 目录包含一个用于交互式使用 SRE-Zero 的 Next.js 控制台。它提供: - 按简单/中等/困难划分浏览任务。 - 回合重置和会话状态。 - 结构化动作构建器和原始动作输入。 - 观察细节、已知发现、奖励组件、指标和轨迹历史。 - 从 `OPENAI_MODEL` 以及本地 `notes/available_models.md` 中选择模型。 - 对两个选定的 OpenAI 兼容模型进行并排提示基线比较。 前端使用本地 Next API 路由和确定性的 JSON 任务配置。它不会控制真实的基础设施。 模型比较需要包含 `OPENAI_BASE_URL`、`OPENAI_API_KEY` 和 `OPENAI_MODEL` 的 `.env` 文件。API 密钥仅在服务器端读取,不会返回到浏览器。 根目录的 `start-frontend.sh` 脚本用于启动 Next 开发服务器。根目录的 `start-backend.sh` 脚本用于启动一个轻量级的 Python 标准库后端,以进行 API 实验。 ## 基线智能体 - `RandomAgent`:以确定性随机性采样动作模板。它有时会故意发出无效的服务名,以测试环境的鲁棒性。 - `ScriptedExpertAgent`:使用一个小型的、特定任务的策略表作为近似上限。在 v0.1 中,该策略允许知道任务解决方案,此局限性已记录在基准测试说明中。 - `PromptingBaselineAgent`:调用与 OpenAI 兼容的 chat completions 端点,传入当前观察结果并请求一个动作。 - `ReActBaselineAgent`:在整个回合中维护紧凑的 Thought/Action 历史,并调用与 OpenAI 兼容的 chat completions 端点。 - `OpenSourceLLMBaselineAgent`:旨在用于本地或托管的开源 OpenAI 兼容服务器的提示配置。 - `FrontierLLMBaselineAgent`:旨在用于托管前沿模型的 ReAct 配置。 提示模板、智能体运行器说明、基线结果表指南以及失败示例记录在 `docs/baseline_agents.md` 中。 ## 基线检查清单 - [ ] 运行随机基线:`python eval/run_eval.py --agent random --episodes 5` - [ ] 运行脚本化专家基线:`python eval/run_eval.py --agent scripted --episodes 5` - [ ] 运行提示基线:`python eval/run_eval.py --agent prompting --episodes 1` - [ ] 运行 ReAct 风格基线:`python eval/run_eval.py --agent react --episodes 1` - [ ] 运行开源 LLM 基线:`python eval/run_eval.py --agent open_source --episodes 1` - [ ] 运行前沿模型基线:`python eval/run_eval.py --agent frontier --episodes 1` ## 路线图 - 增加更多任务系列和变体。 - 在保持可重复性的同时增加隐藏的随机扰动。 - 增加更丰富的动作成本和修复副作用。 - 增加轨迹导出和比较工具。 - 在模拟器契约稳定后,增加可选的 Docker 支持场景。 - 增加外部 LLM 智能体适配器,但不作强制要求。 ## 阶段 1 状态 - [x] 构建 SRE-Zero 环境 - [x] 创建 15-30 个事件响应任务 - [x] 增加简单/中等/困难划分 - [x] 实现 OpenEnv/Gym 风格 API - [x] 增加确定性任务配置 - [x] 增加奖励函数 - [x] 增加评估指标 - [x] 增加基本结果图表 ## 引用 当基准测试论文草稿可用时,将添加引用元数据。
标签:AIOps, AI安全, Chat Copilot, IT运维, LLM, Petitpotam, Python, Root Cause Analysis, Socks5代理, SRE, Unmanaged PE, Web服务器, 偏差过滤, 分布式系统, 响应大小分析, 大模型, 工具调用, 强化学习, 故障诊断, 数据库, 无后门, 根因分析, 模拟环境, 测试评估, 消息队列, 研究项目, 站点可靠性工程, 缓存, 自动化运维, 负载均衡, 逆向工具