sumituppal03/pager
GitHub: sumituppal03/pager
基于 Spring Boot 和 LangChain4j 构建的生产级 AI 事件响应 Agent,采用多专家协同架构对接 PagerDuty 告警,通过人工审批机制实现安全的运维诊断与建议。
Stars: 0 | Forks: 0
# Pager
**一个 AI 事件响应 Agent —— 生产级的多 Agent 架构,端到端构建。**
这个仓库同时包含两样东西:
1. **一份从第一性原理出发的架构研究** ([阅读详情 →](./docs/architecture.html))
约一万字,从第一性原理推导设计:资深 SRE 在凌晨 3 点实际上是如何进行诊断的,为什么一个 Postgres 胜过三个数据库,为什么只读操作可以自主发布而写操作绝不可以,以及将设计转化为生产代码的 20 阶段构建生命周期。
2. **一个可运行的 Java + Spring Boot 参考实现**
使用大多数企业级生产系统实际采用的精确技术栈构建 —— Java 21、Spring Boot 3、LangChain4j、PostgreSQL + pgvector、Redis、Docker。通过 GitHub Actions 进行部署。
由位于班加罗尔的 [Sumit Uppal](https://github.com/sumituppal) 构建。
## 为什么使用 Java + LangChain4j,而不是 Python
95% 的 AI Agent 教程都是基于 Python 的。但是:
- 一半的财富 500 强企业在生产环境中运行 Java
- 印度每一家严谨的金融科技、保险和企业 SaaS 都运行在 JVM 上
- LangChain4j 已经存在,可用于生产环境,并且在第一性原理的深度解析文章中几乎无人涉及
Pager 旨在成为标准参考。如果您在生产环境中运行 Java,并且希望在不采用 Python 技术栈的情况下引入 Agentic AI 系统,这就是它的形态。
## 用一段话概述设计
PagerDuty 的 webhook 会触发一个 Spring Boot 入口处理器,该处理器会验证 HMAC,根据 `incident_id + payload_hash` 进行去重,并将分类任务排入 Redis。一个 worker 会对该任务进行出队操作,并通过 LangChain4j 将其并行分发给四个专家 Agent:`symptoms`(什么出现了故障)、`change`(最近部署/更改了什么)、`metrics`(各项数据指标说明了什么),以及 `comms`(要告知用户和团队什么内容)。每个专家都基于对过往的复盘报告和操作手册的检索(通过 pgvector 进行语义加全文搜索,并由倒数排名融合机制进行合并),以及对实时可观测性系统的**只读**工具调用作为支撑。一个聚合器会合并各项发现,对各个专家的去重结果进行交叉验证(并在他们意见一致时提升置信度),然后通过双层的 HITL 闸门来路由处理结果:当整体置信度 ≥ 0.75 时,只读分析会自动发布;建议的写操作(回滚、重启、扩容)会呈现出来,但**绝不**会在没有人工批准的情况下执行。整个过程中的每一个操作都会被写入同一个 Postgres 的 `agent_events` 表中,该表为追踪查看器、审计跟踪和成本台账提供数据支持。
## 架构一览
```
PagerDuty ──► Spring @RestController ──► Redis queue ──► Worker
│
▼
┌────────────────────────────────┐
│ Triage Graph (LangChain4j) │
│ │
│ symptoms change │
│ │ │ │
│ metrics comms │
│ │ │ │
│ └───┬───┘ │
│ ▼ │
│ aggregator │
│ │ │
│ ▼ │
│ HITL gate │
└───────────┬─────────────────────┘
│
read-only ────────┼──────── write action
│ │
▼ ▼
Slack approval queue
│
▼
human approves
│
▼
execute + audit
─────────────── beneath all of it ───────────────
Postgres + pgvector
· knowledge_chunks (memory / RAG)
· triage_runs (truth)
· findings (truth)
· hitl_approvals (truth)
· agent_events (time / append-only spine)
──────────────────────────────────────────────────
```
有关为什么采用这种架构形态而非其他的第一性原理完整推导,请[阅读该研究](./docs/architecture.html)。
## 技术栈
| 层级 | 选择 | 原因 |
|---|---|---|
| 语言 | Java 21 (LTS) | 现代 JVM:records、模式匹配、虚拟线程 |
| 框架 | Spring Boot 3.4 | 生产标准,无可匹敌的生态系统 |
| AI 编排 | LangChain4j 0.36 | 原生 JVM,结构化输出,工具调用,供应商无关 |
| LLM 供应商 | OpenAI + Anthropic | 为每个专家进行供应商路由 |
| 数据库 | PostgreSQL 16 + pgvector | 真相、记忆与时间统一于一个存储中 —— 见研究的第二部分 |
| ORM | Spring Data JPA + Hibernate | 类型安全;由 Flyway 管理 schema |
| 队列 | Redis (Spring Data Redis) | 异步 worker、重试、死信队列 |
| 弹性 | Resilience4j | 重试、熔断器、超时 |
| 前端 | Next.js 15 + TypeScript | 仪表盘 + 追踪查看器 (PR #13) |
| 容器 | Docker + Docker Compose | 从开发到生产使用相同的镜像 |
| CI/CD | GitHub Actions | 对每个 PR 进行类型检查、测试、构建 |
## 快速开始(本地开发)
您需要:Docker Desktop,JDK 21,Maven(或使用 `./mvnw`)。
```
# 1. Clone
git clone https://github.com/sumituppal/pager.git
cd pager
# 2. 启动 Postgres + Redis
docker compose up -d
# 3. 复制 env 模板(默认配置适用于本地开发)
cp .env.example .env.local
# 4. 运行测试(验证连接)
cd pager-api && ./mvnw test
# 5. 运行应用
./mvnw spring-boot:run
# 6. 对 health 端点进行 Sanity check
curl http://localhost:8080/actuator/health
# → {"status":"UP"}
```
## 状态
当前提交版本是可运行的基础基线:Spring Boot 启动,健康检查端点
正常响应,Docker Compose 成功拉起 Postgres(包含 pgvector)+ Redis。在此之后的
所有内容都将以 issue → PR 的形式发布,遵循
[`CONTRIBUTING.md`](./CONTRIBUTING.md) 中的规范。
在[议题页面](https://github.com/sumituppal/pager/issues)和[项目看板](https://github.com/sumituppal/pager/projects)上跟踪进度。
## 仓库结构
```
pager-api/ # Spring Boot backend (this PR)
├── src/main/java/dev/sumituppal/pager/
│ ├── PagerApplication.java
│ ├── domain/ # PR #02: entities, repositories
│ ├── ingress/ # PR #03: webhook, HMAC, idempotency
│ ├── queue/ # PR #03: Redis-backed job queue
│ ├── worker/ # PR #04: consumer, orchestrator
│ ├── specialists/ # PR #07-09: symptoms, change, metrics, comms
│ ├── aggregator/ # PR #09
│ ├── hitl/ # PR #10
│ ├── memory/ # PR #11: pgvector RAG + hybrid retrieval
│ ├── tools/ # PR #12: read-only tool registry
│ ├── observability/ # PR #05: EventEmitter, tracing
│ └── llm/ # PR #06: LangChain4j wiring
└── src/main/resources/
├── application.yml
└── db/migration/ # Flyway SQL migrations
pager-web/ # Next.js + TypeScript frontend (PR #13)
docs/
├── architecture.html # The first-principles study
└── decisions/ # ADRs added as we build
docker-compose.yml # Postgres (pgvector) + Redis for local dev
```
## 贡献 / 反馈
这是一件作品集性质的项目 —— 但我非常希望收到架构层面的反馈。欢迎提交 issue。
如果您是一家 AI 原生或重度依赖 Java 的初创公司的创始人或工程负责人,并且这种思维模式正是您期望在创始/资深工程师身上看到的,我的收件箱随时向您敞开。
## 许可证
MIT.
标签:AI智能体, LangChain4j, RAG, Spring Boot, 域名枚举, 搜索引擎查询, 请求拦截, 运维自动化