Harishma20/Incident-Response
GitHub: Harishma20/Incident-Response
一个结合 Agentic AI 与 RAG 的自主事件响应系统,通过两阶段架构实现 LLM 诊断与安全策略执行的分离,自动化完成系统异常的根因分析和缓解操作。
Stars: 0 | Forks: 0
# Vigil:面向自主事件响应的 Agentic AI + RAG
Vigil 是一个自主的 agentic AI 事件响应系统,旨在作为一个可运行的原型,展示结合工具增强的 LLM 推理、基于历史事件的本地检索增强生成(RAG)以及确定性安全策略的强大能力。当服务阈值被突破时,Vigil 会自动协调一个两阶段的 pipeline:阶段 1 启动一个由 Groq 驱动的 SRE agent,该 agent 运行一个手写的执行循环,利用只读诊断工具(日志、指标、部署历史以及基于 pgvector 的向量相似性搜索)来诊断根本原因;阶段 2 将此诊断假设传递给一个确定性的安全引擎,由其执行自动化缓解措施(重启、回滚),或提醒待命响应人员进行人工审批。
## 如何运行
### 前置条件:数据库设置
确保你有一个正在运行的 PostgreSQL 数据库,并启用了 `pgvector` 扩展。
连接 URL 设置应与下方的环境配置相匹配。
### 环境配置
在项目根目录下创建一个 `.env` 文件,包含以下配置(模板请参考 `.env.example`):
```
# Postgres 数据库连接
DB_HOST=localhost
DB_PORT=5432
DB_NAME=vigil
DB_USER=postgres
DB_PASSWORD=postgres
# LLM API 设置 (Groq)
GROQ_API_KEY=your_groq_api_key_here
GROQ_MODEL=llama-3.1-8b-instant
# JWT Secret
JWT_SECRET=supersecretjwtsigningkey_changeme
JWT_ALGORITHM=HS256
JWT_EXPIRE_MINUTES=480
# SMTP 分页设置(可选 — 如果未配置则回退到 log)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your_gmail@gmail.com
SMTP_PASSWORD=your_gmail_app_password
ALERT_EMAIL_TO=your_alert_recipient@example.com
```
### 在本地运行
#### 1. 设置后端
安装 Python 依赖(需要 Python 3.10+):
```
pip install -r requirements.txt
```
启动 Uvicorn 开发服务器:
```
python -m uvicorn main:app --host 0.0.0.0 --port 8000
```
这会自动初始化 Postgres schema,运行种子脚本(使用本地 embedding 填充 10 个历史事件),并启动后台指标循环。
#### 2. 设置前端
进入前端目录:
```
cd frontend
npm install
```
启动 React 开发服务器:
```
npm start
```
React 监控仪表板将在 `http://localhost:3000` 提供。
### 通过 Docker Compose 运行
要通过单个命令启动整个技术栈(PostgreSQL、pgvector 和 FastAPI 后端):
```
docker-compose up --build
```
*(注意:你仍然需要通过 npm 在本地的 `http://localhost:3000` 运行 React 前端,或者构建其 bundle)。*
## 架构概述
Vigil 实行了严格的**两阶段架构**,以确保自动化生产操作的安全性和可预测性:
1. **阶段 1:基于 LLM 的诊断(只读)**
Agent 被配置为使用 Groq API 的手写执行循环(messages -> tool definitions -> tool dispatch)。它被严格限制只能使用只读工具:`get_metrics`、`get_logs`、`get_recent_deploys` 和 `search_similar_incidents`。该 agent 无法重启服务或执行部署。当它输出一个包含技术假设、置信度和推荐操作的 JSON 结构化对象时,循环便会退出。
2. **阶段 2:确定性 Python 安全网关(写操作执行)**
阶段 1 输出的最终 JSON 会被传递给一个纯 Python 模块(`policy_engine.py`),该模块中不包含任何 LLM 代码。只有在满足以下严格条件时,该网关才会执行自动缓解操作:
- 诊断置信度分数 $\ge 80\%$。
- 目标服务被明确列在 `ACTION_ALLOWLIST` 中(例如 `checkout-api`)。
- 该服务不是 `local-host`(永远不对其进行自动操作)。
任何未能满足这些参数的情况都会阻止自动操作的执行,并回退到 SMTP/日志告警页面。
## 技术栈
- **后端框架**:FastAPI (asyncio)
- **数据库 ORM**:SQLAlchemy (asyncpg)
- **数据库引擎**:PostgreSQL with `pgvector`
- **Embedding 模型**:`sentence-transformers`(本地加载 `all-MiniLM-L6-v2`,无需外部 API)
- **LLM 引擎**:Groq API (`llama-3.1-8b-instant` / `llama-3.3-70b-versatile`)
- **前端仪表板**:React.js with Chart.js line charts
- **指标与日志**:`psutil`(主机指标)和 `prometheus-client` (:8000/metrics)
- **容器化**:Docker & Docker Compose
## 功能
- **确定性触发器**:阈值规则引擎(延迟 > 500ms,错误率 > 5%,或主机 CPU > 85%)触发调查。
- **调查锁**:分布式锁标志(`investigation_in_progress`)可防止对同一服务进行冗余的并发诊断运行。
- **本地 RAG 集成**:通过本地 SentenceTransformers 模型对过往事件进行余弦相似度搜索。
- **自动缓解**:在满足安全策略的情况下,自动执行重启或在数据库中标记回滚。
- **人工介入审批**:事件仪表板提供详细的诊断时间线,并为分页的事件提供一个“批准操作”按钮。
- **JWT 身份验证**:受保护的 REST endpoint,包括安全的调试路由。
- **Prometheus 指标**:提供关于 endpoint 延迟和事件率的高可用性监控指标。
## 安全设计
- **关注点分离**:将诊断推理与操作执行分离开来,以消除 LLM 幻觉导致执行失控的基础设施命令的风险。
- **锁定冷却期**:在调查结束后强制执行 120 秒的冷却窗口,以防止规则引擎引发级联循环。
- **保证锁释放**:锁状态会在 `try/finally` 块中释放,以确保单次崩溃(例如 SMTP 超时)不会导致服务被永久锁定。
## 已知局限性
- **模拟基础设施**:服务回滚和重启是在内存/数据库状态上进行模拟的,而不是在真实的云端基础设施上执行。
- **每分钟 Token 配额**:在多服务并发的异常情况下,庞大的指标和日志追踪数据可能会触及免费版 Groq API 的 TPM 限制。
- **主机指标注意事项**:主机 CPU 和内存测量数据使用的是执行 Python 进程所在服务器的本地环境数据。
标签:AIOps, IT运维, LLM Agent, PostgreSQL, RAG, Socks5代理, 测试用例, 自动化响应, 自定义请求头, 请求拦截, 逆向工具