tianhg468/AI-Incident-Response-Engineer
GitHub: tianhg468/AI-Incident-Response-Engineer
一个基于 LangGraph 和 MCP 的 AI 代理系统,自动化 Kubernetes 服务的故障分类、根因诊断和修复执行,支持回溯验证和人工审批门禁。
Stars: 0 | Forks: 0
# AI 事故响应工程师
一个自主代理,用于对基于 Kubernetes 的服务进行事故分类、诊断和修复协助。
## 概述
本项目实现了一个 AI 驱动的事故响应系统,具有以下功能:
- 通过 webhook 或 CLI 接收告警
- 通过 MCP 从可观测性和基础设施工具收集证据
- 通过回溯形成并验证根本原因假设
- 提出修复方案并由人工审批
- 执行已批准的修复
- 生成全面的复盘报告
## 核心特性
1. **假设-验证循环**,支持回溯(非线性管道)
2. **严格的人工介入关卡**,在任何写入操作前进行审批
3. **持久化状态**,通过 LangGraph 检查点保存(调查可在重启后继续)
4. **自定义 MCP 服务器**,用于运行手册关联和部署分析
5. **真实评估框架**,包含脚本化的事故场景
## 架构
```
graph TD
A[Intake] --> B[Evidence Gathering]
B --> C[Diagnosis]
C --> D[Verification]
D -->|Refuted| C
D -->|Confirmed| E[Recovery Proposal]
D -->|Inconclusive| F[Escalate]
E -->|Approved| G[Execution]
E -->|Rejected| H[Post-Mortem]
G --> H
F --> H
```
## 项目结构
```
.
├── agent/
│ ├── graph.py # LangGraph wiring
│ ├── state.py # State types
│ ├── nodes/ # One file per node
│ └── prompts/ # Versioned prompt templates
├── mcp_servers/
│ ├── mock/ # Fixture-based mock MCP servers
│ │ ├── kubernetes.py
│ │ ├── github.py
│ │ ├── slack.py
│ │ ├── observability.py
│ │ └── README.md
│ ├── registry.py # Mode-switching registry (eval/live)
│ └── runbook_correlator/ # Custom MCP server + README
├── fixtures/
│ ├── scenarios/ # Per-scenario fixture data
│ │ └── oom_after_deploy/
│ └── shared/ # Shared fixtures
├── webhook/ # FastAPI app
├── dashboard/ # Streamlit UI
├── evals/
│ ├── scenarios/ # Eval scenario definitions
│ ├── runner.py
│ └── rubric.py
├── docker-compose.yml
├── pyproject.toml
└── README.md
```
## 模拟 MCP 服务器
一个关键的架构决策:**代理 agnostic 于它是在与真实还是模拟 MCP 服务器通信。**
```
# Agent code works in both modes
from mcp_servers.registry import get_mcp_server
registry = get_mcp_server() # MODE env var controls real vs mock
result = registry.call_tool("kubernetes", "k8s_get_pod_status", {...})
```
**在评估模式下**(`MODE=eval`):
- 模拟服务器从 `fixtures/scenarios/{scenario}/` 提供固定数据
- 确定性、可复现的评估结果
- 无外部依赖(Kubernetes、GitHub 等)
- 快速执行,适用于 CI/CD
**在生产模式下**(`MODE=live`):
- 通过 stdio 或 HTTP 连接真实 MCP 服务器
- 连接到实际的 Kubernetes 集群、GitHub API 等
- 用于生产环境事故响应
这种双模式架构支持:
- 无需生产基础设施即可进行开发和测试
- 具有已知真实值的可复现评估场景
- 从评估到生产使用的轻松过渡
详情请参阅 [`mcp_servers/mock/README.md`](mcp_servers/mock/README.md)。
## 生产模式下的真实 MCP 服务器
**当 `MODE=live` 时,代理可以连接到真实基础设施。** 这使得可以使用实际的 Kubernetes 集群、GitHub 仓库、Slack 工作区和可观测性平台进行生产事故响应。
### 快速开始
```
# 1. Set MODE to live
export MODE=live
# 2. Configure MCP server paths
export MCP_K8S_SERVER=/path/to/kubernetes-mcp-server
export MCP_GITHUB_SERVER=/path/to/github-mcp-server
export MCP_SLACK_SERVER=/path/to/slack-mcp-server
export MCP_OBSERVABILITY_SERVER=/path/to/observability-mcp-server
# 3. Configure credentials
export GITHUB_TOKEN=ghp_your_token
export SLACK_BOT_TOKEN=xoxb_your_token
export KUBECONFIG=~/.kube/config
export GRAFANA_API_KEY=your_key
# 4. Run investigation
python -m agent.graph
```
### 支持的 MCP 服务器
- **Kubernetes**:Pod 状态、日志、事件、部署
- **GitHub**:提交、PR、差异、文件内容
- **Slack**:消息、审批、通知
- **可观测性**:指标、告警、服务健康状态(Grafana/Datadog/Prometheus)
- **运行手册关联器**:自定义服务器(已包含)
### 工作原理
`MCPServerRegistry` 根据 MODE 自动路由工具调用:
```
# Agent code is completely agnostic
from mcp_servers.registry import get_mcp_server
registry = get_mcp_server() # Reads MODE env var
result = registry.call_tool("kubernetes", "k8s_get_pod_status", {...})
# MODE=eval → Uses fixture-based mocks
# MODE=live → Connects to real Kubernetes API
```
### 设置指南
请参阅 [`mcp_servers/real/README.md`](mcp_servers/real/README.md) 了解:
- 安装/构建 MCP 服务器
- 各服务的配置示例
- 身份验证设置
- 故障排除指南
- 安全注意事项
## 检查点与可恢复性
**调查可在进程重启后继续。** LangGraph 的检查点将完整的代理状态持久化到数据库,支持:
- 跨重启暂停和恢复调查
- 查看具有完整记录的历次调查
- 调试和重放特定调查步骤
- 跟踪多个并发调查
### 工作原理
```
from agent.graph import create_incident_response_graph
from agent.utils.checkpointing import get_checkpointer, get_thread_id
# Create a checkpointer (SQLite by default)
checkpointer = get_checkpointer()
# Create graph with checkpointing enabled
graph = create_incident_response_graph(checkpointer=checkpointer)
# Start an investigation with a unique thread_id
thread_id = get_thread_id("alert_12345")
config = {"configurable": {"thread_id": thread_id}}
# Run the investigation
result = graph.invoke(initial_state, config=config)
# === AFTER PROCESS RESTART ===
# Create new graph and checkpointer instances
checkpointer = get_checkpointer()
graph = create_incident_response_graph(checkpointer=checkpointer)
# Resume from checkpoint using the same thread_id
state = graph.get_state(config)
# Continue investigation from where it left off
```
### 配置
通过环境变量设置检查点模式:
```
# SQLite (default for dev/testing)
CHECKPOINT_MODE=sqlite
CHECKPOINT_DB_PATH=./data/checkpoints.db
# Postgres (for production)
CHECKPOINT_MODE=postgres
DATABASE_URL=postgresql://user:password@localhost:5432/incident_response
# In-memory (no persistence)
CHECKPOINT_MODE=memory
```
### 测试可恢复性
```
python tests/test_checkpointing.py
```
这演示了:
1. 启用检查点启动调查
2. 模拟进程重启
3. 从精确检查点恢复
4. 验证状态连续性
## 仪表板
**通过 Streamlit 仪表板实时监控调查。** 查看活跃和历史调查,跟踪指标,分析代理性能。
### 快速开始
```
# Run some investigations first
export MODE=eval SCENARIO=oom_after_deploy
python -m agent.graph
# Launch dashboard
streamlit run dashboard/app.py
# Open browser at http://localhost:8501
```
### 功能
**概览页面:**
- 汇总指标(总数、已解决、升级、平均轮次)
- 分布图表(按严重程度、按服务)
- 实时自动刷新选项
**调查列表:**
- 按状态、严重程度、服务筛选
- 快速查看关键指标
- 一键访问详情
**调查详情:**
- 完整事故信息
- 所有假设及验证状态
- 恢复方案和审批信息
- 完整调查时间线
### 仪表板视图示例
**跟踪的指标:**
- 总调查数:15
- 完成率:80%
- 升级率:20%
- 平均验证轮次:1.8
**筛选器:**
- 状态:已完成、升级中、进行中
- 严重程度:严重、高、中、低
- 服务:payment-service、user-service 等
详细文档请参阅 [`dashboard/README.md`](dashboard/README.md)。
## 设置
### 前置条件
- Python 3.11+
- Docker 和 Docker Compose
- pip 或 uv
### 安装
```
# Clone the repository
git clone
cd ai-incident-response
# Install dependencies
pip install -e ".[dev]"
# Set up environment variables
cp .env.example .env
# Edit .env with your API keys
```
### 本地运行
```
# 1. Set environment variables
export MODE=eval
export SCENARIO=oom_after_deploy
export CHECKPOINT_MODE=sqlite
# 2. Run an investigation
python -m agent.graph
# 3. Launch the dashboard
streamlit run dashboard/app.py
# 4. (Optional) Start infrastructure for production
docker-compose up -d
# 5. (Future) Run the webhook server
# uvicorn webhook.main:app --reload
```
## 开发状态
**当前阶段:** 步骤 10 - 仪表板 ✅
- [x] 定义状态类型
- [x] 带有空操作节点的骨架图
- [x] 创建节点占位符
- [x] 初始化提示模板
- [x] 模拟 MCP 服务器(Kubernetes、GitHub、Slack、可观测性)
- [x] 带模式切换的 MCP 服务器注册表(eval/live)
- [x] 带固定数据的示例场景(oom_after_deploy)
- [x] 自定义运行手册关联器 MCP 服务器
- [x] find_runbook 工具(带 YAML frontmatter 的 markdown 语料库)
- [x] correlate_deploys 工具(多因素可疑评分)
- [x] similar_past_incidents 工具(使用 sentence-transformers + FAISS 的向量搜索)
- [x] 全面的协议级文档
- [x] 端到端成功路径
- [x] Intake 节点从场景加载事故
- [x] 证据收集调用模拟 MCP 服务器
- [x] 诊断使用 LLM 生成假设
- [x] 验证确认第一个假设
- [x] 恢复方案在评估模式下自动审批
- [x] 执行和复盘完成工作流
- [x] 完整测试场景运行器
- [x] **带回溯的验证循环** ⭐ 关键差异化特性
- [x] 使用 LLM 和针对性检查的真实验证
- [x] 严格应用证伪标准
- [x] 被反驳的假设触发回溯到诊断
- [x] 被确认的假设继续到恢复
- [x] 达到最大轮次后升级(共 5 轮,3 轮无结论)
- [x] 展示非线性图执行
- [x] 验证回溯行为的测试套件
- [x] **人工介入审批流程** 🔒 安全门
- [x] 带风险等级的操作类型白名单
- [x] 带 Slack/CLI 回退的 ApprovalHandler
- [x] 评估模式下自动审批以支持测试
- [x] 完整审计跟踪(状态、推理、决定者、方法)
- [x] 与 recovery_proposal 节点集成
- [x] 全面的测试覆盖
- [x] **检查点 + 可恢复性** 💾 持久性
- [x] 使用 SQLite/Postgres 的 LangGraph 检查点
- [x] 基于线程的调查跟踪
- [x] 跨进程重启的状态持久化
- [x] 展示暂停/恢复的可恢复性测试
- [x] 支持多个并发调查
- [x] 所有调查的完整审计跟踪
- [x] **带评分的评估框架** 📊 指标
- [x] 使用脚本化场景的自动化评估
- [x] 根本原因真实值标签
- [x] 评分标准(根本原因、修复、效率、成本)
- [x] 5 个难度各异的完整场景
- [x] Markdown 报告生成
- [x] 用于 CI/CD 集成的命令行运行器
- [x] **真实 MCP 服务器集成** 🔌 生产模式
- [x] 真实 MCP 服务器的 stdio 传输
- [x] 所有服务器类型的配置系统
- [x] 支持 Kubernetes、GitHub、Slack、可观测性
- [x] 基于环境的配置
- [x] 透明模式切换(eval/live)
- [x] 全面的集成文档
- [x] **Streamlit 仪表板** 📊 可观测性
- [x] 带汇总指标的概览页面
- [x] 带筛选的调查列表- [x] 带完整记录的详细调查视图
- [x] 假设和验证跟踪
- [x] 恢复方案和审批状态
- [x] 实时检查点数据库读取
## 当前评估分数
**评估框架已构建完成,可以运行!** 执行命令:
```
python -m evals.runner
```
**目标指标(目标值):**
| 指标 | 目标分数 |
| ------------------------------ | ------------ |
| 根本原因准确率(精确) | ≥ 60% |
| 根本原因准确率(部分+) | ≥ 80% |
| 修复方案可接受性 | ≥ 75% |
| 平均验证轮次 | ≤ 2.5 |
| 平均每起事故成本 | ≤ $0.015 |
| 升级率 | ≤ 25% |
**当前场景:**
- oom_after_deploy(简单)
- 5xx_spike_feature_flag(中等)
- dns_resolution_failure(困难)
- slow_query_missing_index(中等)
- cascading_failure_timeout(困难)
有关评估框架的详细信息,请参阅 [`evals/README.md`](evals/README.md)。
## 架构
全面的架构文档请参阅 [`ARCHITECTURE.md`](ARCHITECTURE.md),包括:
- 系统概览图
- 数据流序列
- 组件架构
- 关键设计决策和权衡
- 可扩展性考虑
- 安全模型
## 工作示例
OOM 事故调查的完整演练请参阅 [`EXAMPLE.md`](EXAMPLE.md):
- 从告警到解决的逐步记录
- 证据收集和假设生成
- 验证过程和 LLM 评估
- 审批流程和修复执行
- 复盘生成
- 性能指标及与人类 SRE 的比较
## 局限性
当前局限性的诚实评估请参阅 [`LIMITATIONS.md`](LIMITATIONS.md):
**当前局限性:**
- 假设生成质量依赖于证据
- 验证检查解释使用简单关键词匹配
- 仅限于 5 种操作类型(rollback、scale、restart、config_change、patch)
- 调查之间无学习能力
- 单一服务关注(级联故障处理困难)
- 评估覆盖仅 5 个场景
**观察到的失败模式:**
- 由于误导性证据导致的错误确认(评估中约 5%)
- 无限验证循环(通过最大轮次限制缓解)
- 证据收集超时(尚无超时处理)
**生产环境建议:**
- 扩展评估场景到 15-25 个
- 为所有 MCP 调用添加超时处理
- 在日志中实施机密信息脱敏
- 添加高升级率告警
- 审批流程安全审查
**渐进式推出策略:**
1. 影子模式(仅观察)
2. 提出修复方案(需要审批)
3. 自动执行低风险操作
4. 对已知模式完全自主
## 项目统计
| 指标 | 数值 |
| ----------------------- | ------- |
| **代码总行数** | ~11,100 |
| **代理节点** | 7 |
| **MCP 工具(模拟)** | 22 |
| **MCP 服务器(生产)** | 5 |
| **评估场景** | 5 |
| **测试文件** | 6 |
| **文档页面** | 7 |
## 许可证
标签:AIops, API集成, Kubernetes, LangGraph, MCP, Model Context Protocol, SRE, Webhook, 事后分析, 人工智能运维, 人机协作, 偏差过滤, 力导向图, 可观测性, 子域名突变, 安全运营, 容器编排, 开源框架, 扫描框架, 持续集成, 故障恢复, 根因分析, 检查点, 测试用例, 特征库, 状态管理, 生产环境监控, 站点可靠性工程, 自主代理, 自动化运维, 自定义请求头, 请求拦截, 逆向工具