智能运维(AIOps)平台,集成多智能体架构、知识图谱、时间序列预测和根因分析能力。
AIops/
├── aiops-platform/ # 智能诊断平台(主项目)
│ ├── backend/ # FastAPI 后端
│ ├── frontend/ # React 前端
│ ├── k8s/ # Kubernetes 部署配置
│ └── docker/ # Docker 配置
├── knowledge_graph/ # 知识图谱构建与查询
└── time_sequence_prediction/ # 时间序列预测与异常检测
├── cpu_anomaly_detection/ # CPU 异常检测
├── cost_analysis/ # 成本分析与预测
├── microservice_rca/ # 微服务根因分析
└── security_audit/ # 安全审计
基于多智能体架构的智能运维诊断平台:
- 多智能体协作:Master、Orchestrator、Intent Parser、Skill Manager 等智能体协同工作
- 技能系统:支持 MySQL 死锁、Redis 异常、Kubernetes Pod、SLB 负载均衡等诊断技能
- GNN 根因分析:使用图神经网络进行微服务根因定位
- Web 界面:React + Vite 构建的现代化前端界面
技术栈:
- 后端:FastAPI + SQLite + Neo4j
- 前端:React + TypeScript + Vite
- AI:OpenAI API / 通义千问
- 部署:Docker + Kubernetes
运维知识图谱构建与查询系统:
- 基础设施图谱:服务器、网络、应用拓扑关系
- Text2Cypher:自然语言转 Cypher 查询
- 医疗知识图谱:示例知识图谱构建
技术栈:
- Neo4j 图数据库
- Python + OpenAI API
运维场景下的时间序列分析与预测:
- CPU 异常检测:多服务器 CPU 使用率异常检测
- 成本分析:云资源成本预测与异常检测
- 微服务根因分析:基于 GNN 的微服务故障根因定位
- 安全审计:SSH、认证、云 API 调用异常检测
技术栈:
- Prophet 时间序列预测
- PyTorch + PyTorch Geometric
- 图神经网络(GCN、GAT、GraphSAGE)
- Docker Engine 24+ 与 Docker Compose
- Neo4j 4.4+/5.x(可选)
- RAG 服务(可选)
# 在仓库根目录执行
docker compose up --build -d
docker compose logs -f默认访问地址:
- 前端:http://localhost:3000
- 后端 API:http://localhost:8000
- 后端 Swagger:http://localhost:8000/docs
如需启用真实外部依赖,请先在宿主机导出环境变量再启动:
export OPENAI_API_KEY=your_api_key
export NEO4J_URI=bolt://localhost:7687
export NEO4J_USER=neo4j
export NEO4J_PASSWORD=your_password
export RAG_SERVICE_URL=http://localhost:8001未设置时,系统仍可启动,但知识图谱、RAG 和部分智能诊断能力会降级。
# 后端
cd aiops-platform/backend
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
# 前端(新终端)
cd aiops-platform/frontend
npm install
npm run dev前端开发模式默认访问 http://localhost:3000,并通过 Vite 代理 /api 到本地后端。
- aiops-platform/README.md - 智能诊断平台详细文档
- time_sequence_prediction/README.md - 时间序列预测详细文档
┌─────────────────────────────────────────────────────────────────────────────┐
│ Multi-Agent 协同架构 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ 用户请求 │ │
│ └──────┬──────┘ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ MultiAgentOrchestrator (编排器) │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ MasterAgent (大脑中枢) │ │ │
│ │ │ • 动态规划诊断流程 │ │ │
│ │ │ • ReAct 循环控制 │ │ │
│ │ │ • Function Calling 调用工具 │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ │ │ │ │ │ │ │
│ │ ▼ ▼ ▼ ▼ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Intent │ │ Knowledge│ │Observability│ │ Action │ │ │
│ │ │ Parse │ │ Expert │ │ Analyst │ │ Execute │ │ │
│ │ │ Agent │ │ Agent │ │ Agent │ │ Agent │ │ │
│ │ │ (入口) │ │ (知识) │ │ (感知) │ │ (执行) │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ ToolRegistry + SkillManager │ │
│ │ • 工具注册与执行 │ │
│ │ • Skill 动态加载 │ │
│ │ • 安全检查与审批 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
| Agent | 角色 | 核心职责 | 输入 | 输出 |
|---|---|---|---|---|
| IntentParseAgent | 入口网关 | NER 实体识别、意图分类 | 用户自然语言 | IntentResult + EntitiesResult |
| KnowledgeExpertAgent | 知识专家 | 查询知识图谱、RAG 检索 | 服务名 + 症状 | KnowledgeResult (拓扑 + RAG 上下文) |
| ObservabilityAnalystAgent | 感知分析师 | 收集指标/日志/链路、分析异常 | 服务 + 实体 | ObservabilityResult (分析报告) |
| MasterAgent | 大脑中枢 | 动态规划、ReAct 循环、决策 | 所有上下文 | DiagnosisDecision |
| ActionExecuteAgent | 执行者 | 生成安全执行指令 | 修复方案 | ActionResult (含风险评估) |
┌─────────────────────────────────────────────────────────────────┐
│ ReAct 循环 (Reasoning + Acting) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Thought │ ──▶│ Action │ ──▶│Observation│ ──▶│ Decision │ │
│ │ (思考) │ │ (行动) │ │ (观察) │ │ (决策) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ▲ │ │
│ └────────────────────────────────────────────────┘ │
│ (循环直到终止) │
│ │
│ 终止条件: │
│ 1. 调用 submit_diagnosis_result 提交结果 │
│ 2. 调用 ask_user_confirmation 需要用户确认 │
│ 3. 达到最大迭代次数 (40) │
│ │
└─────────────────────────────────────────────────────────────────┘
用户输入
│
▼
┌──────────────────┐
│ IntentParseAgent │
│ parse() │───────▶ IntentResult
└──────────────────┘ │
▼
┌──────────────────┐ ┌──────────────────┐
│ KnowledgeExpert │◀──────│ MasterAgent │
│ query() │───────▶ KnowledgeResult │
└──────────────────┘ └──────────────────┘
│
▼
┌──────────────────┐ ┌──────────────────┐
│ Observability │◀──────│ ToolRegistry │
│ analyze() │───────▶ ObservabilityRes │
└──────────────────┘ └──────────────────┘
│
▼
┌──────────────────┐
│ ActionExecute │
│ execute() │───────▶ ActionResult
└──────────────────┘
用户输入: "order-service 连接池耗尽,帮我排查"
┌─────────────────────────────────────────────────────────────────────────────┐
│ Step 1: IntentParseAgent │
├─────────────────────────────────────────────────────────────────────────────┤
│ Input: "order-service 连接池耗尽,帮我排查" │
│ Output: IntentResult( │
│ intent = "DIAGNOSE", │
│ entities = { │
│ "services": [{"type": "SERVICE", "value": "order-service"}], │
│ "symptoms": [{"type": "SYMPTOM", "value": "连接池耗尽"}] │
│ }, │
│ confidence = "HIGH" │
│ ) │
└─────────────────────────────────────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ Step 2: Skill 匹配 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Matched Skills: ["debug_skill", "mysql_deadlock_skill"] │
│ Content Length: ~15,000 chars │
└─────────────────────────────────────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ Step 3: ReAct 循环 (MasterAgent) │
├─────────────────────────────────────────────────────────────────────────────┤
│ Iteration 1: │
│ Thought: 需要先了解 order-service 的拓扑依赖 │
│ Action: query_knowledge_graph(service="order-service") │
│ Result: {upstream: ["payment-service"], downstream: ["user-service"]} │
│ │
│ Iteration 2: │
│ Thought: 需要检查数据库连接状态 │
│ Action: execute_command("SHOW STATUS LIKE 'Threads_connected'") │
│ Result: {Threads_connected: 148, max_connections: 150} │
│ │
│ Iteration 3: │
│ Thought: 连接数接近上限,需要检查慢查询 │
│ Action: execute_command("SELECT * FROM mysql.slow_log ...") │
│ Result: {slow_queries: [...], longest_query: "SELECT * FROM orders..."} │
│ │
│ Iteration 4: │
│ Thought: 已定位根因,提交诊断结果 │
│ Action: submit_diagnosis_result( │
│ problem_type="connection_pool_exhaustion", │
│ root_cause="慢查询导致连接池阻塞", │
│ recommendation="优化慢查询 + 增加连接池大小" │
│ ) │
│ Result: {status: "completed"} │
└─────────────────────────────────────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ Step 4: 返回结果 │
├─────────────────────────────────────────────────────────────────────────────┤
│ { │
│ "final_decision": { │
│ "problem_type": "connection_pool_exhaustion", │
│ "root_cause": "慢查询导致连接池阻塞", │
│ "recommendation": "优化慢查询 + 增加连接池大小", │
│ "risk_level": "MEDIUM", │
│ "confidence": "HIGH" │
│ }, │
│ "execution_history": [...], │
│ "duration_seconds": 12.5 │
│ } │
└─────────────────────────────────────────────────────────────────────────────┘
| 设计点 | 实现方式 | 优势 |
|---|---|---|
| 动态规划 | LLM 根据 Skill 内容实时决策 | 灵活应对各种场景,无需硬编码流程 |
| ReAct 循环 | Thought → Action → Observation → Decision | 可解释性强,每步都有推理过程 |
| Schema 契约 | Pydantic 强类型模型 | 类型安全,接口清晰 |
| Skill 驱动 | 关键词匹配 + 渐进式披露 | 可扩展,易维护 |
| 安全防护栏 | 命令注入检测 + 审批流控 | 防止误操作,保障生产安全 |
| 工具注册制 | ToolRegistry 统一管理 | 解耦工具实现与调用 |
用户请求 → Master Agent
↓
Intent Parser(意图识别)
↓
Skill Manager(技能匹配)
↓
Orchestrator(任务编排)
↓
Action Executor(执行诊断)
↓
知识库 / 工具 / LLM
使用图神经网络分析微服务调用图,定位故障根因:
- GCN:图卷积网络
- GAT:图注意力网络
- GraphSAGE:大规模图采样
使用 Prophet 进行时间序列预测和异常检测:
- 自动检测趋势和季节性
- 异常点识别
- 置信区间预测
- 故障诊断:自动诊断 MySQL 死锁、Redis 异常、Kubernetes Pod 故障
- 根因分析:微服务故障根因定位
- 容量规划:CPU、内存、存储容量预测
- 成本优化:云资源成本分析与预测
- 安全审计:异常登录、API 调用检测
欢迎提交 Issue 和 Pull Request!
MIT License
为提高 Skill 匹配准确率,实现了带权重的关键词匹配系统:
WEIGHTED_KEYWORDS = {
"kafka_skill": {
"core": {"kafka": 10, "kafka故障": 10, "消息队列故障": 9}, # 核心关键词
"symptom": {"消息堆积": 10, "consumer lag": 10, "消费延迟": 8}, # 症状关键词
"component": {"broker": 5, "partition": 5, "topic": 5}, # 组件关键词
"alias": {"mq": 7} # 别名/缩写
},
# ... 34 个 skills
}权重设计原则:
| 类别 | 权重范围 | 说明 |
|---|---|---|
| core | 8-10 | 核心标识词,如组件名、故障类型 |
| symptom | 5-10 | 症状描述词,如"堆积"、"死锁" |
| component | 3-5 | 相关组件词,如"broker"、"partition" |
| alias | 6-8 | 常用别名/缩写,如"mq"、"es" |
支持同义词自动扩展,提高匹配召回率:
SYNONYM_MAP = {
"故障": ["问题", "异常", "错误", "报错", "失败"],
"慢": ["缓慢", "卡顿", "延迟", "耗时", "响应慢"],
"不通": ["无法连接", "连不上", "连接失败", "网络不通"],
# ... 更多同义词
}
SYNONYM_GROUPS = {
"消息堆积": ["消息积压", "消费延迟", "consumer lag", "队列堆积"],
"慢查询": ["sql慢", "查询慢", "慢sql", "sql执行慢"],
"内存溢出": ["oom", "out of memory", "内存不足", "内存泄漏"],
# ... 更多同义词组
}用户查询
↓
┌─────────────────────────────────────┐
│ 1. 文本预处理 │
│ - 转小写 │
│ - 合并 symptoms/entities │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 2. 同义词扩展 │
│ - SYNONYM_MAP 基础同义词 │
│ - SYNONYM_GROUPS 场景同义词 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 3. 加权关键词匹配 │
│ - WEIGHTED_KEYWORDS 权重匹配 │
│ - SKILL_REGISTRY 关键词补充 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 4. 组件优先级加分 │
│ - java/jvm → jvm_skill +15 │
│ - kafka → kafka_skill +10 │
│ - nginx → nginx_skill +10 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 5. 排序返回 Top-5 │
│ - 得分 >= 5 或 Top-3 返回 │
└─────────────────────────────────────┘
| 查询 | 优化前 | 优化后 |
|---|---|---|
| kafka消息积压严重 | kafka_skill (43) | kafka_skill (53) ✓ |
| 数据库查询很慢 | mysql_slow_query_skill (8) | mysql_slow_query_skill (24) ✓ |
| mysql锁死了 | debug_skill (9) | mysql_deadlock_skill (9) ✓ |
| java内存溢出 | debug_skill (18) | jvm_skill (27) ✓ |
| java oom | debug_skill (43) | jvm_skill (43) ✓ |
| pod起不来 | k8s_pod_skill (18) | k8s_pod_skill (18) ✓ |
如有问题或建议,请提交 Issue。