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 控制面板](https://static.pigsec.cn/wp-content/uploads/repos/cas/4c/4c95266463eeb536429bd674cd21c622924cd5255e2c644f72ea2d814f91af23.png) ## 概述 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 ``` ## 截图 ### 控制面板 ![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)
标签:AI智能体, CockroachDB, RAG, 人工智能, 后端开发, 用户模式Hook绕过, 运维监控