YogithaIshwaryaMoganti/ai-incident-copilot

GitHub: YogithaIshwaryaMoganti/ai-incident-copilot

基于 Spring Boot 的自我监控服务,结合 Java 原生 LLM agent 实现异常检测、事件调查与批准门控的自动化事件响应。

Stars: 0 | Forks: 0

# AI 事件响应 Copilot 一个真实的、自我监控的 Spring Boot 服务。它暴露了真实的业务 endpoint、真实的 Micrometer 指标,以及会导致真实性能下降的真实混沌注入 endpoint。一个定时监控器会读取其自身的 真实指标,检测真实的异常,并将其移交给一个 **Java 原生** 的 LLM 工具调用 agent 进行调查并提出建议行动—— 该行动只会在明确的人类批准点击下才会执行。 这是四个作品集项目中的第四个,也是最后一个——刻意填补了前三个项目(全为 Python)留下的 Java 空白。 有关完整设计,请参阅 [`docs/architecture.md`](docs/architecture.md),包括关于“监控其内部包含的真实服务”的决策,以及在此过程中 发现并修复的真实数据质量 bug;有关评估状态,请参阅 [`docs/eval-report.md`](docs/eval-report.md)。 ## 为什么做这个项目 - **Agent 推理所基于的一切都是真实的**,而非捏造的:真实的 HTTP endpoint、 真实的由 Thread.sleep 引发的延迟、真实的抛出异常、真实的 Micrometer 指标、 真实的 Logback 日志行、来自 GitHub 和 Cloudflare 公共状态页面的真实历史事件。 - **Agent 本身就是 Java**,而不是“Java 负责基础管道,而 Python 负责处理 AI 部分”——它通过 HTTP 直接调用 Anthropic 的 API(Maven Central 上不存在官方的 Java SDK), 这正是本项目真正的核心所在。 - **真实的批准关卡**:建议的行动只能通过明确的 `/approve` endpoint 到达。不存在任何会自动执行该操作的代码路径。 - **真实的公司网络坑,已记录在案而非隐藏**:这台开发机器的 网络会拦截 TLS(Zscaler)——请参阅下文的“在公司网络上运行”。 ## 当前状态 与项目 2 和 3 存在相同的诚实差距——agent 的核心机制需要进行实时的 LLM 调用, 且没有回退层级。在没有任何 API key 的情况下验证如下: - 混沌注入确实导致了真实测量指标的性能下降(实时确认:延迟 混沌将真实的最大延迟从约 20ms 变为约 307ms;错误率混沌产生了真实的 47 个 失败请求对比 106 个成功请求)。 - 异常检测器能正确地对真实的注入混沌做出反应,并在 健康的基线上保持安静——已实时确认,包括观察到滚动基线的自适应过程。 - 历史事件客户端从 GitHub 和 Cloudflare 的公共 状态页面获取真实数据(实时确认:缓存了 100 个真实事件)。 - Agent 循环的控制流(工具调用后报告、不报告、针对同一持续问题防止重复触发的 60 秒冷却时间)已通过 脚本化的虚假 LLM 客户端确定性地验证——23 个后端测试通过,其中任何一个都不需要实时 API。 - 后端(Maven/JUnit)和前端(Next.js)均能干净地构建/lint/测试;整个 系统可以端到端运行,并且在未设置 API key 触发时,会优雅地报告“ANTHROPIC_API_KEY is not set”,而不会崩溃。 等待个人的 `ANTHROPIC_API_KEY`:一个真实的已调查事件,以及来自 `evals/run_evals.py` 的真实根本原因分类准确度。 ## 在本地运行 ### 后端 ``` cd backend cp ../.env.example .env # add your OWN personal Anthropic API key export ANTHROPIC_API_KEY=... # Spring reads it directly from the environment mvn test # unit tests — no live API needed mvn spring-boot:run # starts on :8423 ``` ### 前端 ``` cd frontend npm install npm run dev ``` 打开 http://localhost:3000,点击“Inject 400ms latency”或“Inject 70% error rate”, 在仪表板上观察,大约 10-20 秒内会出现一个新事件。 ### 运行评估 在后端运行的情况下(并且配置了真实的 key): ``` python3 evals/run_evals.py ``` 通过 HTTP 驱动正在运行的服务:注入六个具有已知真实情况的受控真实故障,轮询 agent 的报告,并检查根本原因分类准确度。 ### 在公司网络上运行 如果您的网络存在拦截 TLS 的安全软件(Zscaler 等),Java 的 默认 trust store 将不信任其 root CA,并且实时调用(Statuspage API、Anthropic) 将失败并报错 `PKIX path building failed`。解决方法:导出您的公司 root CA 并 将其导入 Java trust store,然后让 JVM 指向它: ``` keytool -importcert -noprompt -alias corp-root -file corp-root.pem \ -keystore ~/.local/java-truststore/cacerts-with-corp-root -storepass changeit export JAVA_TOOL_OPTIONS="-Djavax.net.ssl.trustStore=$HOME/.local/java-truststore/cacerts-with-corp-root -Djavax.net.ssl.trustStorePassword=changeit" ``` 在普通网络或 CI 中不需要(GitHub Actions runner 不在这样的代理之后)。 ## API - `GET /api/status` — 当前指标窗口、混沌状态、历史事件缓存大小。 - `POST /api/chaos/latency` `{"ms": 400}` / `POST /api/chaos/error-rate` `{"rate": 0.7}` / `POST /api/chaos/reset` - `GET /api/incidents` / `GET /api/incidents/{id}` - `POST /api/incidents/{id}/approve` — 唯一能执行真实操作的路径。 - `POST /api/incidents/{id}/dismiss` ## 项目布局 ``` docs/ architecture.md, eval-report.md backend/src/main/java/.../ orders/, chaos/ real business endpoints + real chaos injection monitoring/ MetricsReader, AnomalyDetector, ScheduledMonitor, log ring buffer incidents/ Statuspage client + cache (GitHub/Cloudflare) llm/ raw-HTTP Anthropic client (no SDK exists) agent/ the tool-calling loop, tools, approval-gated executor tracing/ OpenTelemetry Java SDK setup backend/src/test/ unit tests, incl. a fake-LLM-client agent loop test evals/ controlled real fault-injection scenarios + Python eval driver frontend/ Next.js dashboard ``` ## 许可证 MIT
标签:AIOps, API集成, JS文件枚举, Spring Boot, 可观测性, 域名枚举, 应急处置, 故障演练, 用户代理, 逆向工具