Skip to content

rapporbit/SREOps

Repository files navigation

Multi-Agent AIOps Platform

面向 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 详解

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 的置信门槛越高,越不敢便宜地停。

Runbook 自增长

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 命令)→ 命令安全闸 → 爆炸半径限制 → 同组件熔断 + 分布式锁串行。

RAG 与 Benchmark

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

快速开始

1. 准备环境

需要:

  • 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-token

2. 启动基础设施

docker compose up -d

启动 Redis、Postgres(ParadeDB 镜像:内置 pgvector + pg_search)和 open-webSearch。

3. 导入知识库

python scripts/ingest_kb_corpus.py --dry-run
python scripts/ingest_kb_corpus.py --reset

4. 启动应用

一键启动(macOS / Linux):

./start.sh

手动启动:

bash scripts/run_all.sh

容器化启动:

docker compose --profile app up -d --build

停止服务:

bash scripts/stop_all.sh

访问地址

页面 地址
Web UI http://localhost:9900
Swagger http://localhost:9900/docs
ReDoc http://localhost:9900/redoc
健康检查 http://localhost:9900/api/v1/health
就绪检查 http://localhost:9900/api/v1/health/ready
队列状态 http://localhost:9900/api/v1/queue/status

使用示例

本机诊断:

我电脑很卡,帮我看下是不是 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__/、日志和临时文件

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors