Cubiczan/incident-commander
GitHub: Cubiczan/incident-commander
一个多智能体 AI 事件响应系统,利用 CockroachDB 持久化记忆和 AWS Bedrock 实现生产事件的自动分类、调查、解决与复盘。
Stars: 0 | Forks: 0
# 🪳 Incident Commander
**具备持久化智能体记忆的 AI 驱动事件响应系统**
专为 [CockroachDB × AWS Hackathon: Build with Agentic Memory](https://cockroachdb-ai.devpost.com/) 构建
**🚀 在线演示:** [https://incident-commander-dun.vercel.app](https://incident-commander-dun.vercel.app)

## 概述
Incident Commander 是一个多智能体 AI 系统,可自主对生产事件进行分类、调查、解决并生成事后复盘报告。它使用 **CockroachDB 作为持久化记忆层** —— 每一个事件、智能体操作和向量嵌入都存储在 CockroachDB 全球分布式数据库中,使智能体能够通过 RAG(检索增强生成)从过去的每一次事件中学习。
## 架构
```
┌─────────────────────────────────────────────┐
│ Next.js 16 Frontend │
│ Dashboard │ Incident Detail │ Knowledge Base │
└──────────────────┬──────────────────────────┘
│ API Routes
┌─────────────┼─────────────┐
▼ ▼ ▼
┌─────────┐ ┌──────────┐ ┌────────┐
│ Bedrock │ │CockroachDB│ │ S3 │
│ (Claude)│ │ │ │(artifacts)│
│ 4 Agents│ │ ┌───────┐ │ │ │
│ │ │ │incidents│ │ │ │
│ Triage │ │ │actions │ │ │ │
│Investigate│ │ │runbooks │ │ │ │
│ Resolve │ │ │vectors──│─┼─ pgvector │
│PostMortem│ │ │sessions │ │ │ RAG │
└─────────┘ │ └───────┘ │ │ │
└──────────┘ └────────┘
```
## 核心功能
- **4 智能体流水线**:分类 → 调查 → 解决 → 事后复盘
- **RAG 驱动的记忆**:对过往事件和运行手册进行向量相似度搜索
- **AWS Bedrock 集成**:Claude Sonnet 4 为所有智能体推理提供支持
- **S3 产物存储**:事后复盘报告和智能体输出存储在 S3 中
- **实时控制面板**:带有严重程度追踪的深色“任务控制”UI
## 技术栈
| 组件 | 技术 |
|-----------|-----------|
| 前端 | Next.js 16, TypeScript, Tailwind CSS 4, shadcn/ui |
| 后端 | Next.js API Routes |
| 数据库 | CockroachDB Cloud 配合 pgvector |
| 向量索引 | CockroachDB 分布式向量索引 (VECTOR(1536)) |
| LLM | AWS Bedrock (Claude Sonnet 4) |
| 存储 | AWS S3 |
## 所用的 CockroachDB 工具
### 1. 分布式向量索引
所有的事件描述、解决方案和运行手册都被嵌入为 1536 维的向量。CockroachDB 的原生向量索引支持对数千条记录进行亚秒级的相似度搜索,为 RAG 流水线提供动力,使智能体在每次事件处理中变得越来越聪明。
### 2. CockroachDB Cloud(持久化智能体记忆)
所有的事件状态、智能体操作、运行手册和会话数据都存储在 CockroachDB 的全球分布式数据库中。这是智能体的记录系统 —— 它们的记忆永远不会中断。
## 所用的 AWS 服务
### 1. Amazon Bedrock (Claude Sonnet 4)
所有四个智能体都通过 Bedrock 使用 Claude 进行推理:
- **分类智能体 (Triage Agent)**:评估严重程度,识别类似的历史事件
- **调查智能体 (Investigation Agent)**:通过 RAG 搜索运行手册,确定根本原因
- **解决智能体 (Resolution Agent)**:执行修复计划
- **事后复盘智能体 (Post-Mortem Agent)**:生成全面的事后复盘报告
### 2. Amazon S3
存储事件产物,包括:
- 智能体分类报告 (JSON)
- 调查结果 (JSON)
- 解决方案摘要 (JSON)
- 事后复盘报告 (Markdown)
## 数据库 Schema
```
-- Core incident tracking
CREATE TABLE incidents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
title STRING, description STRING,
severity STRING CHECK (severity IN ('critical','high','medium','low')),
status STRING CHECK (status IN ('open','triaging','investigating','resolving','resolved','post_mortem')),
agent_notes STRING, resolution_summary STRING
);
-- Vector embeddings for RAG
CREATE TABLE incident_embeddings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
incident_id UUID REFERENCES incidents(id),
content_chunk STRING,
embedding VECTOR(1536) NOT NULL,
chunk_type STRING
);
CREATE VECTOR INDEX idx_incident_vec ON incident_embeddings (embedding);
-- Knowledge base with vector search
CREATE TABLE runbooks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
title STRING, content STRING, category STRING,
embedding VECTOR(1536)
);
CREATE VECTOR INDEX idx_runbook_vec ON runbooks (embedding);
```
## 签名审计账本
除了 `agent_actions` 表之外,智能体产生的每一个决策(分类、调查、解决、
事后复盘)都会被写入到一个**带有签名的、仅可追加的、防篡改的审计账本**中。
这为事件记录提供了法律/合规方面的
可辩护性:对过去决策的任何编辑、重新排序、插入或删除都是
可检测的。
**方案。** 该账本是一个 JSONL 文件 —— 每行一个 JSON 记录。每条记录为:
```
{ "ts", "event", "actor", "inputs", "sources", "confidence?", "rationale?",
"prevSig", "sig" }
```
- `sig = HMAC_SHA256(key, canonicalJson({ ...fields, prevSig }))`,采用十六进制编码。
- `canonicalJson` 会按排序顺序序列化每一级的对象键,因此
签名后的字节与键的插入顺序无关。
- `prevSig` 是上一行的 `sig`(对于第一行则为空字符串)。
由于每个签名都会与前一个签名绑定,这些行就形成了一个哈希
链 —— 篡改第 _i_ 行会导致第 _i_ 行及其后的每一行失效。
**密钥。** 签名密钥来自 `process.env.AUDIT_LEDGER_KEY`。如果未设置,则会使用一个已知的
不安全默认值 (`incident-commander-dev-audit-key`),以便应用程序和测试能够
开箱即运行 —— **在生产环境中请务必设置真实的密钥。** 账本
文件的默认位置为 `.audit/incident-ledger.jsonl`,并且可以通过
`AUDIT_LEDGER_PATH` 进行覆盖。
**API** (`src/lib/audit/ledger.ts`):
```
import { AuditLedger, getAuditLedger } from '@/lib/audit/ledger';
// Append a signed record; returns the record's signature.
const sig = getAuditLedger().append({
event: 'triage_incident',
actor: 'triage-agent',
inputs: { incident_id, title, description },
sources: ragResults, // provenance the decision drew on
rationale: 'severity=high; classification=...',
});
// Re-walk the chain and report tampering.
const { intact, tamperedIndex } = AuditLedger.verify(path, key);
// -> { intact: true, tamperedIndex: null } when untouched
// -> { intact: false, tamperedIndex: 2 } first bad line index
```
**测试。** `bun run test` (或 `bun test src/lib`) 会运行
`src/lib/audit/ledger.test.ts`,该测试会追加 N 条记录并断言链保持
完整,然后篡改 / 删除某一行并断言 `verify` 会报告
正确的 `tamperedIndex`。
## 入门指南
### 前置条件
- Node.js 18+ / Bun
- CockroachDB Cloud 账户(免费套餐)
- 拥有 Bedrock 和 S3 访问权限的 AWS 账户
### 设置
1. **克隆仓库**
```
git clone https://github.com/icohangar-ops/incident-commander.git
cd incident-commander
```
2. **安装依赖**
```
bun install
```
3. **配置环境**
```
cp .env.example .env.local
# 使用您的 CockroachDB 和 AWS 凭证编辑 .env.local
```
4. **设置 CockroachDB**
```
CREATE EXTENSION IF NOT EXISTS vector;
-- Run the schema from docs/schema.sql
```
5. **启动开发服务器**
```
bun run dev
```
6. **填充示例数据**
```
curl -X POST http://localhost:3000/api/seed
```
## 截图
### 控制面板

### 事件详情与智能体流水线

## 演示视频
[观看 3 分钟演示](assets/incident-commander-demo.webm)
## 工作原理
### 智能体流水线流程
1. **创建事件** → 连同向量嵌入一起存储在 CockroachDB 中
2. **分类智能体** (Bedrock Claude):
- 嵌入事件描述
- 向量搜索查找类似的历史事件
- 评估严重程度并建议操作
- 将结果存储在 CockroachDB + S3 中
3. **调查智能体** (Bedrock Claude):
- 通过 RAG 检索相关的运行手册
- 交叉比对类似事件的解决方案
- 确定根本原因假设
4. **解决智能体** (Bedrock Claude):
- 根据调查执行修复
- 将解决方案作为新的向量嵌入存储(系统在不断学习!)
5. **事后复盘智能体** (Bedrock Claude):
- 审查整个智能体的历史记录
- 生成全面的报告
- 上传到 S3
### 为什么智能体记忆很重要
传统的事件管理工具将每一个事件都视为孤立的。而 Incident Commander 则截然不同:**每一次已解决的事件都会让系统变得更聪明**。当新的事件发生时,智能体会使用向量相似度搜索所有的过往事件和运行手册,从而找到帮助它们更快速、更准确响应的相关上下文。
## 项目结构
```
src/
├── lib/
│ ├── types.ts # TypeScript interfaces
│ ├── cockroachdb.ts # Database connection & helpers
│ ├── bedrock.ts # AWS Bedrock Claude integration
│ ├── s3.ts # AWS S3 artifact storage
│ └── agents.ts # 4 agent implementations + RAG
├── app/
│ ├── page.tsx # Main entry point
│ ├── layout.tsx # Root layout
│ └── api/
│ ├── incidents/ # CRUD + agent endpoints
│ ├── runbooks/ # Knowledge base
│ ├── rag/search/ # Vector similarity search
│ └── seed/ # Sample data seeder
└── components/
├── incident-commander.tsx # Main app shell
├── incident-dashboard.tsx # Dashboard view
├── incident-detail.tsx # Detail + agent pipeline
├── incident-form.tsx # Create incident
├── knowledge-base.tsx # Runbooks
└── rag-search.tsx # RAG search
```
## 黑客松提交清单
- [x] 采用 MIT 许可证的开源项目
- [x] 公开的 GitHub 仓库
- [x] 使用了 CockroachDB 分布式向量索引
- [x] 使用了 CockroachDB Cloud 作为持久化记忆
- [x] 使用了 AWS Bedrock (Claude) 进行智能体推理
- [x] 使用了 AWS S3 进行产物存储
- [x] 功能完备的演示应用程序
- [x] 演示视频(< 3 分钟)
- [x] 包含设置说明的清晰 README
## 许可证
[MIT](LICENSE)
标签:AI智能体, CockroachDB, RAG, 人工智能, 后端开发, 用户模式Hook绕过, 运维监控