tianhg468/AI-Incident-Response-Engineer-
GitHub: tianhg468/AI-Incident-Response-Engineer-
一个基于 LangGraph 的自主 AI Agent,为 Kubernetes 生产服务提供从告警接收到根因分析、修复建议与执行的全流程事件响应能力。
Stars: 0 | Forks: 0
# AI 事件响应工程师
一个自主 Agent,负责为基于 Kubernetes 的服务进行生产事件的分析、诊断和修复。
## 概述
本项目实现了一个 AI 驱动的事件响应系统,具备以下功能:
- 通过 webhook 或 CLI 接收告警
- 通过 MCP 从可观测性和基础设施工具收集证据
- 通过回溯机制形成并验证关于根因的假设
- 在人工介入审批的前提下提出修复建议
- 执行已批准的修复操作
- 生成详尽的复盘报告
## 核心特性
1. 带有回溯机制的**假设-验证循环**(而非线性流水线)
2. 在任何写操作前设置严格的**人工介入关卡**
3. 通过 LangGraph 检查点实现的**持久化状态**(调查过程可从重启中恢复)
4. 用于 runbook 关联和部署分析的**自定义 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 服务器
一个关键的架构决策:**Agent 并不关心它所交互的是真实的还是模拟的 MCP 服务器。**
```
# Agent 代码在两种模式下均可工作
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` 时,Agent 可以连接到真实的基础设施。** 这使得使用真实的 Kubernetes 集群、GitHub 仓库、Slack 工作区和可观测性平台进行生产事件响应成为可能。
### 快速开始
```
# 1. 将 MODE 设置为 live
export MODE=live
# 2. 配置 MCP server 路径
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. 配置 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. 运行调查
python -m agent.graph
```
### 支持的 MCP 服务器
- **Kubernetes**:Pod 状态、日志、事件、Deployments
- **GitHub**:Commits、PRs、diffs、文件内容
- **Slack**:消息、审批、通知
- **Observability**:指标、告警、服务健康状态 (Grafana/Datadog/Prometheus)
- **Runbook Correlator**:自定义服务器(已内置)
### 工作原理
`MCPServerRegistry` 会根据 MODE 自动路由工具调用:
```
# Agent 代码完全无关特定实现
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 → 使用基于 fixture 的 mocks
# MODE=live → 连接到真实的 Kubernetes API
```
### 安装指南
参见 [`mcp_servers/real/README.md`](mcp_servers/real/README.md) 了解以下内容:
- 安装/构建 MCP 服务器
- 各服务的配置示例
- 身份验证设置
- 故障排除指南
- 安全注意事项
## 检查点与可恢复性
**调查过程可以挺过进程重启。** LangGraph 的检查点机制会将完整的 Agent 状态持久化到数据库中,从而支持:
- 在重启之间暂停和恢复调查
- 查看带有完整记录的历史调查
- 调试并重放特定的调查步骤
- 跟踪多个并发调查
### 工作原理
```
from agent.graph import create_incident_response_graph
from agent.utils.checkpointing import get_checkpointer, get_thread_id
# 创建 checkpointer (默认为 SQLite)
checkpointer = get_checkpointer()
# 创建启用 checkpointing 的 graph
graph = create_incident_response_graph(checkpointer=checkpointer)
# 使用唯一的 thread_id 开始调查
thread_id = get_thread_id("alert_12345")
config = {"configurable": {"thread_id": thread_id}}
# 运行调查
result = graph.invoke(initial_state, config=config)
# === 在进程重启之后 ===
# 创建新的 graph 和 checkpointer 实例
checkpointer = get_checkpointer()
graph = create_incident_response_graph(checkpointer=checkpointer)
# 使用相同的 thread_id 从 checkpoint 恢复
state = graph.get_state(config)
# 从上次中断的地方继续调查
```
### 配置
通过环境变量设置检查点模式:
```
# SQLite (开发和测试的默认选项)
CHECKPOINT_MODE=sqlite
CHECKPOINT_DB_PATH=./data/checkpoints.db
# Postgres (用于生产环境)
CHECKPOINT_MODE=postgres
DATABASE_URL=postgresql://user:password@localhost:5432/incident_response
# In-memory (无持久化)
CHECKPOINT_MODE=memory
```
### 测试可恢复性
```
python tests/test_checkpointing.py
```
这演示了:
1. 在启用检查点的情况下启动调查
2. 模拟进程重启
3. 从准确的检查点恢复
4. 验证状态的连续性
## Dashboard(仪表盘)
**使用 Streamlit 仪表盘实时监控调查过程。** 查看活动和历史调查、跟踪指标并分析 Agent 性能。
### 快速开始
```
# 首先运行一些调查
export MODE=eval SCENARIO=oom_after_deploy
python -m agent.graph
# 启动 dashboard
streamlit run dashboard/app.py
# 在浏览器中打开 http://localhost:8501
```
### 功能特性
**概览页面:**
- 汇总指标(总数、已完成、已升级、平均轮次)
- 分布图(按严重程度、按服务)
- 可选的实时自动刷新
**调查列表:**
- 按状态、严重程度、服务进行筛选
- 关键指标快速查看
- 一键访问详情
**调查详情:**
- 完整的事件信息
- 包含验证状态的所有假设
- 恢复建议和审批信息
- 完整的调查时间线
### Dashboard 视图示例
**跟踪的指标:**
- 总调查数:15
- 完成率:80%
- 升级率:20%
- 平均验证轮次:1.8
**过滤器:**
- 状态:completed, escalated, in_progress
- 严重程度:critical, high, medium, low
- 服务:payment-service, user-service 等
详细文档请参见 [`dashboard/README.md`](dashboard/README.md)。
## 设置
### 前置条件
- Python 3.11+
- Docker 和 Docker Compose
- pip 或 uv
### 安装
```
# 克隆 repository
git clone
cd ai-incident-response
# 安装依赖
pip install -e ".[dev]"
# 设置环境变量
cp .env.example .env
# 使用你的 API keys 编辑 .env
```
### 本地运行
```
# 1. 设置环境变量
export MODE=eval
export SCENARIO=oom_after_deploy
export CHECKPOINT_MODE=sqlite
# 2. 运行调查
python -m agent.graph
# 3. 启动 dashboard
streamlit run dashboard/app.py
# 4. (可选) 启动用于生产环境的基础设施
docker-compose up -d
# 5. (未来) 运行 webhook server
# uvicorn webhook.main:app --reload
```
## 开发状态
**当前阶段:** 第 10 步 - Dashboard ✅
- [x] 定义状态类型
- [x] 包含空操作节点的骨架图
- [x] 创建节点占位符
- [x] 初始化 Prompt 模板
- [x] 模拟 MCP 服务器 (Kubernetes, GitHub, Slack, Observability)
- [x] 支持模式切换的 MCP 服务器注册表
- [x] 带有固定数据的示例场景 (oom_after_deploy)
- [x] 自定义 Runbook Correlator MCP 服务器
- [x] find_runbook 工具 (带有 YAML frontmatter 的 markdown 语料库)
- [x] correlate_deploys 工具 (多因素嫌疑评分)
- [x] similar_past_incidents 工具 (使用 sentence-transformers + FAISS 进行向量搜索)
- [x] 全面的协议级文档
- [x] 端到端正常路径
- [x] Intake 节点从场景加载事件
- [x] Evidence 收集调用模拟 MCP 服务器
- [x] Diagnosis 使用 LLM 生成假设
- [x] Verification 确认第一个假设
- [x] Recovery 建议在评估模式下自动批准
- [x] Execution 和 post-mortem 完成工作流
- [x] 完整的测试场景运行器
- [x] **带回溯的验证循环** ⭐ 关键差异化优势
- [x] 使用 LLM 和针对性检查进行真实验证
- [x] 严格应用证伪标准
- [x] 被反驳的假设触发回溯到诊断阶段
- [x] 被确认的假设进入恢复阶段
- [x] 达到最大轮次后升级 (共 5 次,3 次无定论)
- [x] 展示了非线性图执行
- [x] 验证回溯行为的测试套件
- [x] **人工介入审批流程** 🔒 安全关卡
- [x] 带有风险级别的操作类型白名单
- [x] 支持 Slack/CLI 回退的 ApprovalHandler
- [x] 评估模式下自动审批以便测试
- [x] 完整的审计跟踪 (status, reasoning, decided_by, method)
- [x] 与 recovery_proposal 节点集成
- [x] 全面的测试覆盖
- [x] **检查点与可恢复性** 💾 持久性
- [x] 使用 SQLite/Postgres 的 LangGraph 检查点
- [x] 基于线程的调查跟踪
- [x] 跨进程重启的状态持久化
- [x] 演示暂停/恢复的可恢复性测试
- [x] 支持多个并发调查
- [x] 所有调查的完整审计跟踪
- [x] **带评分的评估工具** 📊 指标
- [x] 使用脚本化场景的自动化评估
- [x] 真实的根因标签
- [x] 评分标准 (root cause, remediation, efficiency, cost)
- [x] 5 个不同难度的完整场景
- [x] Markdown 报告生成
- [x] 用于 CI/CD 集成的命令行运行器
- [x] **真实 MCP 服务器集成** 🔌 实时模式
- [x] 用于真实 MCP 服务器的 Stdio 传输
- [x] 适用于所有服务器类型的配置系统
- [x] 支持 Kubernetes, GitHub, Slack, Observability
- [x] 基于环境的配置
- [x] 透明的模式切换
- [x] 全面的集成文档
- [x] **Streamlit 仪表盘** 📊 可观测性
- [x] 带有汇总指标的概览页面
- [x] 带有过滤功能的调查列表
- [x] 包含完整记录的详细调查视图
- [x] 假设与验证跟踪
- [x] 恢复建议和审批状态
- [x] 实时读取检查点数据库
## 当前评估得分
**评估工具现已构建完成并可供运行!** 执行命令:
```
python -m evals.runner
```
**目标指标(目标):**
| 指标 | 目标得分 |
|--------|--------------|
| 根因准确率 (Exact) | ≥ 60% |
| 根因准确率 (Partial+) | ≥ 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) 获取全面的架构文档,包括:
- 系统概览图
- 数据流序列
- 组件架构
- 关键设计决策与权衡
- 可扩展性考量
- 安全模型
## 实战案例
参见 [`EXAMPLE.md`](EXAMPLE.md) 获取 OOM 事件调查的完整演示:
- 从告警到解决的逐步记录
- 证据收集与假设生成
- 验证过程和 LLM 评估
- 审批流程与修复执行
- 复盘报告生成
- 性能指标与人类 SRE 的对比
## 限制
参见 [`LIMITATIONS.md`](LIMITATIONS.md) 了解对当前限制的客观评估:
**当前限制**:
- 假设生成质量依赖于证据
- 验证检查解释使用简单的关键词匹配
- 仅限于 5 种操作类型
- 调查之间缺乏学习机制
- 侧重于单一服务(在处理级联故障时较为吃力)
- 评估范围仅限于 5 个场景
**观察到的故障模式**:
- 因误导性证据导致的错误确认(在评估中约占 5%)
- 无限验证循环(已通过最大轮次限制缓解)
- 证据收集超时(尚未实现超时处理)
**对生产环境的建议**:
- 将评估场景扩展到 15-25 个
- 为所有 MCP 调用添加超时处理
- 在日志中实现密钥脱敏
- 为高升级率添加告警
- 对审批流程进行安全审查
**渐进式推广策略**:
1. 影子模式(仅观察)
2. 提出修复建议(需人工批准)
3. 自动执行低风险操作
4. 对已知模式实现完全自主
## 项目统计
| 指标 | 值 |
|--------|-------|
| **总代码行数** | ~11,100 |
| **Agent 节点** | 7 |
| **MCP 工具 (模拟)** | 22 |
| **MCP 服务器 (真实)** | 5 |
| **评估场景** | 5 |
| **测试文件** | 6 |
| **文档页数** | 7 |
## 许可证
MIT
标签:AIOps, AI智能体, API集成, CLI, DLL 劫持, Human-in-the-loop, Incident Response, Kubernetes, LangGraph, MCP, Model Context Protocol, Post-Mortem, Python, RCA, Slack, SRE, Webhook, WiFi技术, 人工智能, 人机协同, 假设验证, 偏差过滤, 力导向图, 可观测性, 告警分诊, 回溯算法, 复盘报告, 大语言模型, 子域名突变, 故障排查, 故障诊断, 无后门, 根因分析, 模块化设计, 测试用例, 状态管理, 生产环境, 用户模式Hook绕过, 站点可靠性工程, 系统恢复, 自主代理, 自动化修复, 自动化运维, 请求拦截, 运维自动化, 逆向工具