melbrbry/devops-incident-swarm

GitHub: melbrbry/devops-incident-swarm

基于 LangGraph 构建的 DevOps 故障响应分层多智能体系统,在严格 RBAC 和人工审批约束下自动调查生产事故、提出缓解措施并生成事后总结。

Stars: 0 | Forks: 0

# DevOps 故障响应集群 **一个分层多智能体系统,用于调查生产环境故障、在人工批准后提出缓解措施,并起草免责事后总结——具备严格的智能体 RBAC 和全面的可观测性。** 基于 **LangGraph**、**Groq** 和 **Langfuse** 构建。旨在作为一个具备作品集级别的示例,展示如何在类似生产环境的安全条件下运行 Supervisor–Worker 智能体集群。 ## 为什么开发这个项目 值班工程师不会在没有监督的情况下让 LLM 重启 pod。该系统对这一现实情况进行了建模: - **专业化智能体** 具有严格的工具边界(只读 vs 读写 vs 仅输出) - **基于代码的 Supervisor 路由** 作用于共享状态 —— 可预测、可测试、可追踪 - **人机交互 (HITL)** 在任何破坏性操作之前通过 LangGraph 的 `interrupt()` 进行 - **两阶段 Mitigator** —— 首先提出结构化 JSON,仅在批准后才执行写入工具 - **端到端可观测性** —— Supervisor 路由决策和 LLM span 均在 Langfuse 中记录 它不是一个简单的聊天机器人包装器。它是一个**以智能体为节点的状态机**,其中每一步都会修改 `IncidentState`,并由 Supervisor 决定下一步的操作。 ## 工作原理 ``` flowchart TD Alert[PagerDuty alert] --> Supervisor Supervisor -->|no root_cause| Investigator Supervisor -->|no proposed_fix| Mitigator Supervisor -->|resolved| Comms Supervisor -->|failed or done| EndNode[END] Investigator --> Supervisor Mitigator --> Supervisor Comms --> Supervisor subgraph mitigator [Mitigator subgraph] Propose[propose] --> Approval[await_approval HITL] Approval -->|Y| Execute[execute write tool] Approval -->|N| Propose Execute --> Check[check_resolution] Check -->|unresolved| Propose end ``` ### 故障处理流程 | 步骤 | 智能体 | 执行的操作 | |------|-------|----------------| | 1 | **Supervisor** | 读取 `IncidentState`,路由到下一个 Worker | | 2 | **Investigator** | 调用 `query_metrics` + `fetch_recent_logs`,输出根本原因 | | 3 | **Supervisor** | 看到 `root_cause`,路由至 Mitigator | | 4 | **Mitigator** | 提出操作 → **暂停等待人工批准** → 执行 `restart_pod` 或 `rollback_deployment` | | 5 | **Supervisor** | 看到 `status=resolved`,路由至 Comms | | 6 | **Comms** | 起草结构化的事后总结 Markdown | | 7 | **Supervisor** | 看到 `post_mortem`,结束运行 | ### 智能体 RBAC | 智能体 | 访问权限 | 工具 | |-------|--------|-------| | Investigator | 只读 | `query_metrics`, `fetch_recent_logs` | | Mitigator | 写入 (受控) | `restart_pod`, `rollback_deployment` | | Comms | 仅输出 | — | | Supervisor | 仅路由 | — (纯 Python,无 LLM) | ## 值得强调的设计决策 **拆分提议与执行 (Mitigator)。** Groq 无法在单个请求中同时进行工具调用和严格的 JSON schema。单一的 ReAct 智能体也倾向于在生成提案之前就执行写入工具。解决方案是:使用两个具有相同角色的智能体 —— 提议者(仅输出结构化内容,无工具)以及执行者(仅使用工具)。 **Supervisor 是代码,而不是 LLM。** 路由规则按优先级排序并经过单元测试(`root_cause_missing` → Investigator,`proposed_fix_missing` → Mitigator 等)。Langfuse 会记录每一个决策及其 `matched_rule` 和脱敏后的状态快照。 **通过 LangGraph interrupt 实现 HITL。** `await_approval` 会在任何写入工具运行之前调用 `interrupt()`。CLI 会提示 `[URGENT] Mitigator proposes: Rollback auth-service. Approve? (Y/N)`。如果拒绝,会将上下文反馈给提议者以生成替代方案。 **模拟基础设施,真实编排。** 故障在内存中模拟(`memory_leak`,`bad_deployment`)。智能体图、RBAC、HITL 和追踪机制均按照生产环境标准构建。 ## 技术栈 | 层级 | 选择 | |-------|--------| | 编排 | LangGraph (分层图 + checkpointer) | | LLM | 通过 `langchain-groq` 调用的 Groq (`openai/gpt-oss-120b`) | | 结构化输出 | 严格的 JSON schema (`StrictChatGroq`) | | 模拟基础设施 | FastAPI + 内存版 `Simulator` | | HITL | LangGraph `interrupt()` + `Command(resume=...)` | | 可观测性 | Langfuse (`CallbackHandler` + `@observe` span) | | 配置 | Pydantic Settings | | 测试 | pytest (包含 LLM e2e 的 78 个测试) | ## 快速开始 ### 前置条件 - Python 3.11+ - [Groq API 密钥](https://console.groq.com/) (必填) ### 安装 ``` git clone https://github.com/melbrbry/devops-incident-swarm.git cd devops-incident-swarm python -m venv .venv source .venv/bin/activate pip install -e ".[dev]" cp .env.example .env # 在 .env 中设置 GROQ_API_KEY ``` ### 运行完整的故障处理 ``` # 自动批准 write 操作(适用于演示和 CI) incident-swarm --yes --service auth-service --scenario memory_leak # 交互式 — 在 restart/rollback 前提示 incident-swarm --service auth-service --scenario bad_deployment ``` 成功运行时的预期结果: - `Status: resolved` - 打印出的根本原因和建议的修复方案 - 结尾处提供完整的免责事后总结 Markdown - 可选的 Langfuse 会话 ID,用于追踪查询 无需单独的 mock API 服务器 —— CLI 会直接针对内存模拟器触发警报。 ### 可选:Mock HTTP API ``` mock-infra # FastAPI on :8080 — /trigger_alert, /health, etc. ``` ## 配置 | 变量 | 是否必填 | 描述 | |----------|----------|-------------| | `GROQ_API_KEY` | 是 | Groq LLM API 密钥 | | `GROQ_MODEL` | 否 | 默认值: `openai/gpt-oss-120b` | | `HITL_AUTO_APPROVE` | 否 | 设置为 `true` 时跳过批准提示 | | `LANGFUSE_PUBLIC_KEY` | 否 | 启用追踪 | | `LANGFUSE_SECRET_KEY` | 否 | 启用追踪 | | `LANGFUSE_BASE_URL` | 否 | 例如 `https://cloud.langfuse.com` 或 `https://us.cloud.langfuse.com` | | `LANGFUSE_ENABLED` | 否 | 设置为 `false` 以禁用追踪 | 有关所有选项,请参见 [`.env.example`](.env.example)。 ## 可观测性 配置 Langfuse 密钥后,每次运行都会输出: - **`supervisor_route` span** — `matched_rule`、`next_agent`、脱敏后的状态 (`has_root_cause`、`has_proposed_fix` 等) - **LLM + tool span** — Investigator 指标/日志、Mitigator 提议者/执行者、Comms 事后总结 - **会话分组** — 通过标签 `incident-swarm` 或打印出的会话 ID 进行过滤 ``` incident-swarm --yes # Langfuse traces:https://cloud.langfuse.com(按 tag incident-swarm 或 session_id 筛选) # Session ID: ``` ## 测试 ``` # 快速 — 无 API 调用 pytest tests/ -m "not llm" # 完整套件 — 需要 GROQ_API_KEY pytest tests/ ``` 测试覆盖率包括 Supervisor 路由规则、HITL 批准解析、Mitigator 子图编译、Mock 基础设施模拟器以及端到端图运行。 ## 项目结构 ``` devops-incident-swarm/ ├── agents/ # Worker personas (Investigator, Mitigator, Comms) ├── graph/ # LangGraph hierarchy — state, nodes, supervisor routing ├── hitl/ # Interrupt helpers, terminal approval, resume ├── mock_infra/ # Simulated outages + FastAPI + LangChain tools ├── observability/ # Langfuse tracing bootstrap ├── scripts/ # incident-swarm, mock-infra CLIs └── tests/ ``` 更详细的构建说明:[docs/IMPLEMENTATION_PLAN.md](docs/IMPLEMENTATION_PLAN.md)
标签:LangGraph, LLM代理, PyRIT, 人机协同, 多智能体系统, 安全规则引擎, 自动化运维, 逆向工具