icohangar-ops/incident-commander
GitHub: icohangar-ops/incident-commander
基于多智能体 AI 和 RAG 检索增强的生产事件自动分类、调查、解决与事后分析系统。
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 (Retrieval-Augmented Generation,检索增强生成) 从过往的每一次事件中学习。
## 架构
```
┌─────────────────────────────────────────────┐
│ 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 进行推理:
- **分类智能体**:评估严重程度,识别过往的相似事件
- **调查智能体**:通过 RAG 搜索操作手册,确定根本原因
- **解决智能体**:执行修复计划
- **事后分析智能体**:生成全面的事后分析报告
### 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 credentials 编辑 .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)
标签:AWS, CockroachDB, DPI, RAG, 后端开发, 多智能体, 运维自动化