avira-nithinmudunuri/enterprise-incident-langgraph
GitHub: avira-nithinmudunuri/enterprise-incident-langgraph
基于 LangGraph 和 Google Gemini 构建的六智能体企业 IT 事件响应流水线,将工单、日志和指标自动转化为结构化的高管事件报告。
Stars: 0 | Forks: 0
# 企业事件智能与响应系统 — LangGraph 版本
一个基于 **LangGraph** 和
**Google Gemini** 构建的多智能体 IT 事件响应流水线。六个专门的 AI 智能体协同工作 —— 就像一个企业
事件作战室 —— 将原始的工单、日志和指标数据转化为一份精致的、
适合高管阅读的事件报告。
这是最初使用 CrewAI 构建的系统的 LangGraph 重新实现,
旨在探索相同的多智能体工作流如何映射到一个显式的
图上,并手动管理状态、工具和结构化输出。
## 架构
六个智能体(图节点)以并行和顺序依赖相混合的方式运行:
```
START ──▶ triage ─────────▶ knowledge ─┐
└────▶ log_analysis ──────────────────┼─▶ rca ─▶ remediation ─▶ report ─▶ END
│
(triage + log run in parallel) (rca fans in from log + knowledge)
```
| # | 智能体 (节点) | 角色 | 读取 | 工具 / 记忆 |
|---|--------------|------|-------|----------------|
| 1 | `triage` | 严重程度 + 类别分类 | inputs | 事件快照检索器 |
| 2 | `log_analysis` | 错误模式、异常、时间线 | inputs | 日志 + 指标检索器 |
| 3 | `knowledge` | 相似事件、操作手册、变通方法 | triage | KB 检索器 |
| 4 | `rca` | 排序的根因假设 + 因果链 | triage, log, knowledge | 仅工作记忆 |
| 5 | `remediation` | 三阶段修复计划 + 回滚 | rca | 仅工作记忆 |
| 6 | `report` | 高管 Markdown 报告 + 仪表板 payload | 所有内容 | 仅工作记忆 |
## 项目布局
| 文件 | 职责 |
|------|----------------|
| `config.py` | 共享 Gemini 聊天模型 + embedding;加载 `.env`;可选 LangSmith |
| `retrievers.py` | RAG 检索器 (加载 → 拆分 → embedding → 存储 → 检索) = 长期记忆 |
| `state.py` | `IncidentState` TypedDict = 跨节点共享的短期工作记忆 |
| `schemas.py` | 用于结构化 (已验证) 智能体输出的 Pydantic 模型 |
| `nodes.py` | 六个智能体节点函数 |
| `graph.py` | 将节点和边组装成编译后的 LangGraph |
| `main.py` | 入口点:预热检索器,运行图,保存 `report.md` |
| `demo_inputs.py` | 演示事件场景 (Northwind Financial P1) |
| `data/` | `incident_snapshot.json`, `application_logs.txt`, `error_metrics.csv` |
## 设置
```
python -m venv .venv
.venv\Scripts\activate # Windows PowerShell
pip install -r requirements.txt
```
从模板创建一个 `.env` 并添加你的 Gemini 密钥:
```
cp .env.example .env # then edit GOOGLE_API_KEY / GEMINI_API_KEY
```
## 运行
```
python main.py
```
这将对数据源进行 embedding,运行所有六个智能体,打印报告,
并将其写入 `report.md`。
### 可选:LangSmith 追踪
在 `.env` 中设置 `LANGSMITH_TRACING=true` 和 `LANGSMITH_API_KEY`,即可在 [smith.langchain.com](https://smith.langchain.com) 上将每个节点查看为嵌套追踪。
## 注意事项与设计决策
- **确定性的 RAG,而非代理式工具调用。** 每个节点使用检索器获取其
上下文,然后调用 LLM。这比让模型决定何时调用工具
更可预测且成本更低。
- **结构化输出** (`with_structured_output`) 提供了类型化、经过验证的
节点间交接,而不是脆弱的自由文本解析。
- **不均匀的扇入** (fan-in) 到 `rca` 使用 `defer=True` 处理,因此它会等待
较慢的 `knowledge` 分支。
- **Chroma 客户端以单线程构建** (`warm_retrievers()`),在并行
节点运行之前,避免了客户端构建时的竞态条件。
## 环境要求
- Python 3.11+
- 一个 Google Gemini API 密钥
标签:AI智能体, IT运维, LangGraph, PyRIT, Socks5代理, 多智能体系统, 故障响应, 自动化报告, 逆向工具