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 仪表板](https://static.pigsec.cn/wp-content/uploads/repos/cas/4c/4c95266463eeb536429bd674cd21c622924cd5255e2c644f72ea2d814f91af23.png) ## 概述 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 ``` ## 截图 ### 仪表板 ![Incident Commander 仪表板](https://static.pigsec.cn/wp-content/uploads/repos/cas/be/be598ef7a5bff2fdecb44eed42b59b4d11705073af69f7be105ea0e0e8ae92e9.png) ### 事件详情与智能体流水线 ![事件详情视图](https://static.pigsec.cn/wp-content/uploads/repos/cas/23/2339dd7cdd1155df3d91224efbc6308c444621c84bfb13b38e543cf8ab51d347.png) ## 演示视频 [观看 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, 后端开发, 多智能体, 运维自动化