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代理, 测试用例, 自动化响应, 自定义请求头, 请求拦截, 逆向工具