面向 OnCall / SRE 场景的多智能体智能运维诊断与自愈平台。系统把告警或用户故障描述转化为结构化 Incident,按确定性三级递进自动决定调查深度,调用 RAG 知识库和只读 MCP 工具收集证据,输出可追溯的 Markdown 诊断报告与可审计的处置闭环。
核心理念:进来的是症状,出去的是根因 + 修复验证结果 + 沉淀的知识。
- Incident 状态机为骨架:告警只是喂给 Incident 的信号,Incident 有完整生命周期(
DETECTED → TRIAGING → INVESTIGATING → RCA_READY → REMEDIATING → VERIFYING → RESOLVED | ESCALATED),迁移矩阵默认拒绝,非法迁移抛错。 - 分层自适应调查引擎:砍掉调用方手选的 fast/deep 模式,换成确定性三级递进——调用方只提交告警,系统自动 Tier 1 → 2 → 3 命中即止、未命中递进并继承证据。调查深度是系统的输出,不是调用方的输入。
- L2 纯规则降噪:去重 / 抑制 / 时间窗聚合 / 抖动检测 / 拓扑关联 / Impact 评分,零 LLM,直接缓解百炼 RPM/TPM 限流压力。
- 假设驱动式调查:Tier 3 采用两阶段推理——LLM 先生成 3-5 条根因假设排序,再逐条定向取证,达标即终止,避免无目标漫游。
- Runbook 自增长飞轮:Tier 3 调查经人工确认 + 验证门禁通过 → LLM 提炼结构化 Runbook → 审核入库 → 下次同类告警在 Tier 1 命中,越用越准。
- 资源域建模 + 事务化处置:白名单结构化工具替代自由 shell 命令,消除命令注入;快照 → CAS 漂移检测 → 执行 → 三级验证门禁 → 失败自动回滚。
- 飞书移动端一键审批:高风险操作走飞书长连接一键审批,超时自动降级
escalate_then_deny,破无公网限制。 - 优雅降级:LLM 不可用时 Tier 1 纯规则 / Tier 2 检索侧仍工作,系统退化为"确定性自愈 + 相似案例推荐"而非瘫痪。
- RAG 知识库增强:Parent-Child chunking + Vector/BM25 混合检索 + RRF 融合 + 本地 rerank。
- 后台化架构:Redis Streams 优先级队列 + 多 Worker 消费 + 全局执行槽限流 + 心跳 + 死信队列。
- 可量化评测:内置 50 题检索评测、50 题 RAGAS / OpenEvals 端到端评测和并发压测。
调用方只提交告警,不选择任何模式。系统内部一条链路自动决定调查深度:
提交告警
│
▼
L2 纯规则预处理(去重/聚合/拓扑关联/Impact)
│ 被抑制 → 不入队,直接降噪报告
▼
Tier 1:Runbook 指纹匹配 + 前置条件校验 ── 命中 ──► 确定性处置(零 LLM)
│ 未命中(继承证据)
▼
Tier 2:相似故障向量检索 + 限定 3 轮定向验证 ── 命中 ──► 复用历史 RCA
│ 未命中(继承证据)
▼
Tier 3:假设驱动两阶段推理 ──► 根因 + 证据链
│
▼
处置审批 → 事务化执行 → 三级验证门禁 → RESOLVED 或 ESCALATED
| Tier | 做什么 | LLM 消耗 | 参考项目 |
|---|---|---|---|
| Tier 1 已知故障 | 告警指纹精确匹配 Runbook + 前置条件校验 → 确定性处置 | 零 | Robusta playbooks / StackStorm |
| Tier 2 相似故障 | pgvector + BM25 混合检索历史 Incident → 限定 3 轮定向验证适用性 | 便宜档小模型 | Microsoft RCACopilot / k8sgpt |
| Tier 3 未知故障 | LLM 生成 3-5 条根因假设排序 → 逐条派 subagent 定向取证 → 达标即终止 | 完整推理 | HolmesGPT / ReAct / Anthropic Orchestrator-Workers |
impact_score 只调门槛不改结构:影响面越大,各 Tier 的置信门槛越高,越不敢便宜地停。
Tier 3 调查 → 人工确认 RCA → 验证门禁通过
→ LLM 提炼前置条件 + 处置步骤
→ 结构化 Runbook 草稿(pending_review)
→ 人工审核入库
→ 下次同类告警在 Tier 1/2 命中
刹车:草稿一律 pending_review,LLM 发明的动作会被资源域白名单拒收;命中后 verify 失败的 Runbook 自动打回待审查。
RemediationPlan
→ 自治分级(AUTO / APPROVAL / MANUAL)
→ 高风险 → 飞书移动端一键审批(超时 → escalate_then_deny)
→ 事务化执行: 快照 → CAS 漂移检测 → 执行
→ 三级验证门禁:
① 命令成功(返回码 + 状态变更确认)
② 服务健康(verify_metric)
③ 指标恢复(metric_recovery,观察 N 分钟)
→ 全部通过 → RESOLVED
→ 任一失败 → 自动补偿回滚 → ESCALATED
安全纵深:资源域建模(白名单结构化工具,不生成自由 shell 命令)→ 命令安全闸 → 爆炸半径限制 → 同组件熔断 + 分布式锁串行。
Markdown / SOP / Alert 语料
→ 标题层级切分 → Parent-Child chunking
→ pgvector HNSW 向量索引 + ParadeDB pg_search BM25 索引
→ Vector + BM25 双路召回 → RRF 融合
→ 本地 bge-reranker-v2-m3 精排
→ 返回 top-k parent 上下文给 LLM
检索侧 50 题结果:
| 配置 | Hit | MRR | Recall |
|---|---|---|---|
Recall@3, bm25_weight=0.4 |
1.000 | 0.930 | 1.000 |
Recall@5, bm25_weight=0.4 |
1.000 | 0.930 | 1.000 |
RAGAS / OpenEvals 50 题结果:
| faith | rel | cprec | crecall | ground | help |
|---|---|---|---|---|---|
| 0.913 | 0.936 | 0.997 | 0.871 | 0.994 | 0.872 |
评测入口:
python benchmark/run_benchmark.py retrieval --k 3
python benchmark/run_benchmark.py ragas --limit 5核心思路:API 只负责快速接收,诊断交给队列和 Worker,真正昂贵的执行由全局并发槽限速。
| 层级 | 做法 |
|---|---|
| 接入层削峰 | API 只做校验、落库、入队,立即返回 task_id |
| 队列缓冲 | Redis Streams 优先级队列(critical / high / normal / low) |
| 执行层限额 | 全局执行槽,Worker 可多但真正运行的诊断可控 |
| 接口限流 | 固定窗口限流,超限 429 |
| 失败恢复 | Worker 心跳、pending 回收、重试、死信队列 |
| 可观测 | 队列深度 / pending / lag / DLQ / Worker 存活暴露到 API 和前端 |
本地压测结果:读接口 3000 请求 / 200 并发 100% 成功;后台提交 200 请求 / 100 并发 100% 成功;Webhook 500 请求 / 100 并发 100% 成功;真实诊断执行被全局执行槽限制在最多 2 个同时运行。压测脚本见 scripts/loadtest.py。
需要:
- Python 3.11+
- Docker / Docker Compose
- OpenAI-compatible Chat 模型 API Key(如 DeepSeek / DashScope)
- 如使用本地 embedding,需准备 Ollama 和
bge-m3
git clone <your-repo-url>
cd <repo>
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env编辑 .env,至少配置一个可用模型:
DEEPSEEK_API_KEY=your-deepseek-api-key
# 或
DASHSCOPE_API_KEY=your-dashscope-api-key
KB_ADMIN_TOKEN=change-this-admin-tokendocker compose up -d启动 Redis、Postgres(ParadeDB 镜像:内置 pgvector + pg_search)和 open-webSearch。
python scripts/ingest_kb_corpus.py --dry-run
python scripts/ingest_kb_corpus.py --reset一键启动(macOS / Linux):
./start.sh手动启动:
bash scripts/run_all.sh容器化启动:
docker compose --profile app up -d --build停止服务:
bash scripts/stop_all.sh本机诊断:
我电脑很卡,帮我看下是不是 CPU 或内存太高
Redis 告警诊断:
Redis 实例 redis-master-01 内存使用率 98%,客户端连接被强制断开
Alertmanager Webhook 模拟:
python scripts/mock_alert.py --scenario redis
python scripts/mock_alert.py --list-history并发压测:
python scripts/loadtest.py submit --n 100 --concurrency 20
python scripts/loadtest.py webhook --n 500 --concurrency 100.
├── app/ # 核心业务
│ ├── incidents/ # Incident 生命周期状态机
│ ├── preprocessing/ # L2 纯规则预处理(去重/聚合/拓扑/Impact)
│ ├── topology/ # 拓扑资源图 + 级联关联
│ ├── investigation/ # L3 分层自适应调查引擎(Tier 1/2/3)
│ ├── runbooks/ # Tier 1 Runbook 库 + 自增长闭环
│ ├── remediation/ # 资源建模 + 事务化处置 + 验证门禁
│ ├── agents/ & subagents/ # Tier 3 定向取证 subagent
│ ├── skills/ # 排障剧本(Tier 3 假设生成时注入)
│ ├── orchestration/ # 编排(diagnosis_runner)
│ ├── rag/ # 检索(pgvector + BM25 + RRF + rerank)
│ ├── evidence/ # 证据管理
│ ├── wiki/ # 经验库
│ ├── queue/ # Redis Streams 队列
│ ├── db/ # 数据访问(asyncpg)
│ └── api/v1/ # FastAPI 接口
├── data/runbooks/ # 种子 Runbook(冷启动)
├── data/kb_corpus/ # RAG 开源语料
├── mcp_servers/ # MCP 工具服务(system/network/docker/websearch/winlog)
├── scripts/ # 启动、导入、压测、拓扑发现
├── benchmark/ # 检索与 RAGAS 评测
├── frontend/ # Web UI
├── docs/sop/ # OnCall SOP 语料(入知识库)
├── tests/ # 测试(532 个)
├── docker-compose.yml
└── requirements.txt
| 层面 | 选型 |
|---|---|
| 语言 / 框架 | Python 3.11+ / FastAPI 0.115+ |
| 智能体编排 | LangChain v1.x + LangGraph(checkpoint + interrupt) |
| LLM 调用 | langchain-openai(DeepSeek-V4 经百炼) |
| 工具协议 | langchain-mcp-adapters + 只读 MCP Server |
| 向量检索 | pgvector (HNSW) + ParadeDB pg_search (BM25) + RRF + bge-reranker-v2-m3 |
| 队列 | Redis 5+ Streams(优先级队列 + 限流) |
| 数据库 | Postgres(asyncpg,事实库 + Incident + 审计) |
| 审批 | 飞书 WebSocket 长连接(破无公网限制) |
| 前端 | 独立 frontend 目录 |
本项目的每一个关键设计决策都挂有真实开源 / 成熟商业项目参考:
| 设计点 | 参考项目 |
|---|---|
| 事件生命周期状态机 | incident.io / Rootly / FireHydrant / Netflix Dispatch |
| 接入 / 聚合 / 抑制 | Prometheus Alertmanager / Keep(keephq) / BigPanda / Moogsoft |
| 确定性 Playbook 自愈 (Tier 1) | Robusta playbooks / StackStorm / PagerDuty Event Orchestration |
| 检索增强 RCA (Tier 2) | Microsoft RCACopilot / k8sgpt |
| 假设驱动 Agent (Tier 3) | HolmesGPT(Robusta) / ReAct 论文 |
| Agent 编排模式 | Anthropic《Building Effective Agents》 |
| 自治分级 + 护栏 | Shoreline.io / Google SRE Book / AWS SSM Automation |
| 事务化执行 / 回滚 | K8s Controller reconcile / Terraform plan-apply / Argo Rollouts |
| LLM 安全治理 | OWASP LLM Top 10 / NIST AI RMF |
对应实现见 app/incidents/(状态机)、app/preprocessing/(L2 降噪)、app/investigation/(分层调查引擎)、app/remediation/(事务化处置)。
仓库保留源码、文档、公开语料和 benchmark 记录。以下内容不应提交:
.env、.env.*中的 API Key 和本地配置volumes/、数据库卷、Redis / Postgres 本地状态data/wiki/运行时诊断经验.idea/、.vscode/、.claude/、__pycache__/、日志和临时文件