Files
memory-gateway/SOC-Memory-POC-Design.md

1114 lines
56 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SOC 研判辅助记忆系统 POC 方案
## 一、整体架构设计
### A. 架构图
```
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ SOC Case 研判工作流 │
├─────────────────────────────────────────────────────────────────────────────────────────┤
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Ticket │ │ 情报系统 │ │ 历史 Case │ │ 知识库 │ │
│ │ System │ │ (Intel) │ │ Archive │ │ (KB/Playbook)│ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 数据接入层 (Ingestion Pipeline) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ ingest_skill│ │ extract_ │ │ classify_ │ │ commit_ │ │ │
│ │ │ │──▶│ memory_skill│──▶│ memory_skill│──▶│ memory_skill│ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────┼──────────────────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Obsidian │◀──────────│ OpenViking │◀───────────│ EverMemOS │ │
│ │ (知识沉淀) │ │ (统一 Context) │ │ (长期记忆整理) │ │
│ │ │ │ │ │ │ │
│ │ - KB/Playbook│ │ - memory │ │ - 抽取/归纳 │ │
│ │ - Case Note │ │ - resources │ │ - 去重/合并 │ │
│ │ - 模板/标签 │ │ - skills │ │ - 衰减/演化 │ │
│ └──────┬───────┘ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │ │
└─────────┼──────────────────────────────┼──────────────────────────────┼──────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ AI Agent / Harness System │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ retrieve_context_skill │ │
│ │ 根据当前 case 检索 ──▶ OpenViking ──▶ 返回相关上下文 ──▶ 辅助研判 │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────────────────┘
```
### B. 组件职责划分
| 组件 | 定位 | 核心职责 |
|------|------|----------|
| **Obsidian** | 人工可维护的知识沉淀层 | KB/Playbook/报告模板、Case Note 人工编辑、可视化知识网络 |
| **OpenViking** | 统一 Context/Memory Gateway | 统一入口、namespace 管理、资源/技能/记忆的组织与检索 |
| **EverMemOS** | 后台长期记忆整理层 | 抽取式记忆、归纳合并、去重衰减、长期记忆演化 |
| **Skills** | 记忆流程自动化 | 导入、抽取、分类、写回、检索、清理全流程 |
| **AI Agent** | 消费端 | 调用 skills 获取上下文,辅助研判 |
---
## 二、数据分层设计
### A. 五类记忆模型
```
┌────────────────────────────────────────────────────────────────────────────────┐
│ 数据分层架构 │
├──────────────────┬───────────────────────────────────────────────────────────┤
│ 记忆类型 │ 来源与特征 │
├──────────────────┼───────────────────────────────────────────────────────────┤
│ Knowledge Memory │ 来源: KB、月报、报告、Playbook、PO │
│ (知识库记忆) │ 特征: 静态、高价值、可复用、长期有效 │
│ │ 示例: "钓鱼邮件识别 playbook"、"CVE-2024-XXXX 分析" │
├──────────────────┼───────────────────────────────────────────────────────────┤
│ Case Memory │ 来源: 历史 case、研判结论、关键证据、误报/真报模式 │
│ (案例记忆) │ 特征: 经验沉淀、模式识别、场景化 │
│ │ 示例: "2024年Q3 钓鱼邮件攻击趋势"、"某 APT 组织 TTP" │
├──────────────────┼───────────────────────────────────────────────────────────┤
│ Process Memory │ 来源: AI agent 研判过程中的中间步骤、工具调用结果、推理路径 │
│ (过程记忆) │ 特征: 临时性、高信息量、需抽取提炼 │
│ │ 示例: "本次研判使用的 IOC 列表"、"推理链草稿" │
├──────────────────┼───────────────────────────────────────────────────────────┤
│ Profile Memory │ 来源: Analyst 偏好、团队规范、告警分级标准 │
│ (配置/偏好记忆) │ 特征: 相对稳定、个性化、可影响检索排序 │
│ │ 示例: "某 Analyst 偏好详细日志"、"夜间告警阈值" │
├──────────────────┼───────────────────────────────────────────────────────────┤
│ Session Memory │ 来源: 当前任务的临时上下文、对话历史 │
│ (会话记忆) │ 特征: 极短期、随任务结束可丢弃 │
│ │ 示例: "当前正在研判的告警 ID"、"已确认的 IOC" │
└──────────────────┴───────────────────────────────────────────────────────────┘
```
### B. 数据生命周期
```
Knowledge Memory ─────────────────────────────────────────────────▶ 长期保留
Case Memory ─────────────────────────▶ 抽取为 Pattern ──────────▶ 合并到 Knowledge
│ 或定期清理
Process Memory ──▶ 抽取高价值结论 ──▶ 写入 Case Memory
定期清理/衰减
Session Memory ──────────────────────▶ 任务结束即丢弃
```
---
## 三、Obsidian 设计
### A. Vault 目录结构
```
SOC Vault/
├── 📁 00_Knowledge/ # 知识库 - 静态文档
│ ├── 📁 00_KB/ # 知识库文档
│ │ ├── 01_Attack_Techniques/ # 攻击技术分类
│ │ ├── 02_Threat_Intelligence/ # 威胁情报
│ │ ├── 03_Vulnerability_Analysis/ # 漏洞分析
│ │ └── 04_Tool_Usage/ # 工具使用指南
│ ├── 📁 01_Playbooks/ # 响应playbook
│ │ ├── 01_Phishing/ # 钓鱼响应
│ │ ├── 02_Malware/ # 恶意软件响应
│ │ ├── 03_Data_Exfiltration/ # 数据外泄响应
│ │ └── README.md # Playbook 索引
│ ├── 📁 02_Monthly_Reports/ # 月报摘要
│ │ └── YYYY-MM/ # 按年月组织
│ └── 📁 03_PO/ # 发布命令/通告
├── 📁 10_Cases/ # 案例库 - 历史case
│ ├── 📁 by_type/ # 按类型分类
│ │ ├── Phishing/
│ │ ├── Malware/
│ │ ├── Brute_Force/
│ │ └── Data_Exfiltration/
│ ├── 📁 by_month/ # 按月份归档
│ │ └── YYYY-MM/
│ └── 📁 by_status/ # 按状态筛选
│ ├── Confirmed/
│ ├── False_Positive/
│ └── Pending/
├── 📁 20_Analysis/ # 分析工作区
│ ├── 📁 Templates/ # 模板
│ │ ├── Case_Note.md # Case 笔记模板
│ │ ├── Playbook.md # Playbook 模板
│ │ ├── Monthly_Report_Summary.md # 月报摘要模板
│ │ └── IOC_Extraction.md # IOC 提取模板
│ └── 📁 Inbox/ # 待处理草稿
├── 📁 30_Templates/ # 公共模板库
└── 📁 90_System/ # 系统配置
├── 📁_Tags/ # 标签定义
└── 📁_Graph/ # 双向链接配置
```
### B. 模板设计
#### Case Note 模板
```yaml
---
type: case_note
case_id: {{CASE_ID}}
severity: {{P1|P2|P3|P4}}
status: {{Open|Confirmed|False_Positive}}
analyst: {{ANALYST_NAME}}
created: {{YYYY-MM-DD HH:mm}}
tags: []
---
# Case: {{简短标题}}
## 告警摘要
- **告警类型**:
- **受影响资产**:
- **时间范围**:
## 研判过程
### 1. 初始信息
```
{{告警原始内容}}
```
### 2. 调查步骤
- [ ] 步骤1
- [ ] 步骤2
- [ ] 步骤3
### 3. 关键发现
{{关键发现列表}}
### 4. IOC 提取
| 类型 | 值 | 置信度 |
|------|-----|--------|
| IP | | |
| Domain | | |
| Hash | | |
## 结论
- **判定结果**: {{True_Positive|False_Positive|Uncertain}}
- **攻击链阶段**:
- **相关 TTP**:
## 关联信息
- **相关 KB**: [[]]
- **历史类似 Case**: [[]]
- **相关 Intel**: [[]]
## 后续行动
- [ ] 行动1
- [ ] 行动2
```
#### Playbook 模板
```yaml
---
type: playbook
category: {{Response|Detection|Analysis}}
mitre_tactics: []
mitre_techniques: []
last_updated: {{YYYY-MM-DD}}
reviewer: {{NAME}}
---
# Playbook: {{Playbook 名称}}
## 目标
{{简述本 Playbook 适用的场景和目标}}
## 触发条件
{{什么情况下应该使用本 Playbook}}
## 前置要求
- 工具/系统依赖
- 权限要求
## 步骤
### Step 1: {{步骤名称}}
**目的**:
**执行**:
```bash
# 命令或操作
```
**验证**:
- 预期结果
### Step 2: ...
## 决策点
```
{{决策树或流程图}}
```
## 常见问题
| 问题 | 解决方案 |
|------|----------|
| | |
## 关联
- **相关 Case**: [[]]
- **相关 KB**: [[]]
- **相关 Intel**: [[]]
```
### C. 标签体系
#### 核心标签 (必须)
| 标签 | 用途 | 示例 |
|------|------|------|
| `#soc/case` | Case 笔记 | `#soc/case/2024-Q3` |
| `#soc/playbook` | Playbook | `#soc/playbook/phishing` |
| `#soc/kb` | 知识库 | `#soc/kb/cve` |
| `#soc/intel` | 威胁情报 | `#soc/intel/apt29` |
#### 维度标签 (可选)
| 标签类型 | 标签 | 用途 |
|----------|------|------|
| 严重程度 | `#severity/p1`, `#severity/p2`, `#severity/p3` | 告警分级 |
| 攻击类型 | `#attack/phishing`, `#attack/malware`, `#attack/ransomware` | 攻击分类 |
| 行业 | `#industry/finance`, `#industry/tech` | 目标行业 |
| 威胁组织 | `#apt/apt28`, `#apt/lazarus` | 威胁组织 |
| 状态 | `#status/confirmed`, `#status/fp`, `#status/pending` | Case 状态 |
### D. 双向链接建议
```markdown
# 建议的链接模式
1. Case → KB: "[[KB/CVE-2024-XXXX]] 在本案例中的表现为..."
2. Case → Case: "与 [[Cases/2024/2024-Q3-phishing-001]] 类似"
3. Playbook → KB: "基于 [[KB/mitre-tactics]] 的 Initial Access"
4. Intel → Case: "该 IOC 首次出现在 [[Cases/2024/2024-Q2-apt29-campaign]]"
```
### E. 适合/不适合的内容
| 适合放入 Obsidian | 不适合放入 Obsidian |
|-------------------|---------------------|
| 人工编写的 KB/Playbook | 原始日志/告警 Dump |
| 整理后的 Case Note | 全量 Ticket 记录 |
| 月报/报告摘要 | 实时威胁情报 Feed |
| 分析方法论 | 工具执行输出 |
| IOC 知识卡片 | 临时调试信息 |
---
## 四、Skills 设计
### A. Skills 职责矩阵
```
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ SOC Memory Skills 全景 │
├────────────────┬──────────────┬──────────────────┬─────────────────────────────────────┤
│ Skill 名称 │ 输入 │ 输出 │ 触发时机 │
├────────────────┼──────────────┼──────────────────┼─────────────────────────────────────┤
│ ingest_skill │ 原始数据 │ 标准化中间件 │ 定时/手动触发 │
│ │ (KB/报告/ticket)│ │ │
├────────────────┼──────────────┼──────────────────┼─────────────────────────────────────┤
│ extract_ │ 原始数据/ │ 高价值记忆碎片 │ 每次 case 结案后 │
│ memory_skill │ agent 过程 │ (key-value) │ / 定时批量处理 │
├────────────────┼──────────────┼──────────────────┼─────────────────────────────────────┤
│ classify_ │ 待分类记忆 │ 带分类标签的内存 │ extract_ 后自动触发 │
│ memory_skill │ │ │ │
├────────────────┼──────────────┼──────────────────┼─────────────────────────────────────┤
│ retrieve_ │ 当前 case │ 排序后的上下文 │ AI agent 研判时 │
│ context_skill │ 特征/查询 │ 列表 │ │
├────────────────┼──────────────┼──────────────────┼─────────────────────────────────────┤
│ summarize_ │ case 过程数据 │ 精炼的 Case Note │ case 结案时 │
│ case_skill │ │ │ │
├────────────────┼──────────────┼──────────────────┼─────────────────────────────────────┤
│ commit_ │ 分类后的记忆 │ 写入目标存储 │ 分类后自动触发 │
│ memory_skill │ │ │ │
├────────────────┼──────────────┼──────────────────┼─────────────────────────────────────┤
│ prune_memory_ │ 记忆库 │ 清理报告/统计 │ 定时任务 │
│ skill │ │ │ │
└────────────────┴──────────────┴──────────────────┴─────────────────────────────────────┘
```
### B. 详细 Skill 规格
#### 1. ingest_skill
```yaml
name: ingest_skill
description: 从外部系统导入原始数据,转换为标准化中间格式
输入:
- KB 文档 (Markdown/PDF)
- 月报/报告 (Markdown/PDF)
- Ticket System 导出 (JSON/CSV)
- 历史 Case 归档 (JSON)
- 威胁情报 (STIX/JSON)
输出:
- 标准化中间件 (JSON)
- 元数据 (来源、日期、类型、标签)
触发时机:
- 手动触发: `ingest_skill --source kb --path /path/to/kb`
- 定时触发: 每日 2:00 自动同步
- 事件触发: 新 case 结案时
处理流程:
1. 识别数据源类型
2. 解析原始内容
3. 提取结构化字段
4. 生成唯一 ID
5. 写入待处理队列
依赖数据源:
- 文件系统 (本地/网络存储)
- Ticket API
- 情报系统 API
```
#### 2. extract_memory_skill
```yaml
name: extract_memory_skill
description: 从原始资料或 agent 过程里抽取高价值记忆碎片
输入:
- 原始文档/Case 数据
- Agent 过程日志
- 研判对话历史
输出:
- 高价值记忆碎片列表
- type: knowledge | case | pattern | ioc | ttp
- key: 记忆摘要
- value: 详细内容
- source: 来源
- confidence: 置信度 0-1
- tags: 标签
触发时机:
- Case 结案时自动触发
- 定时批量处理 (每小时)
- 手动批量处理
处理流程:
1. 加载待处理内容
2. 调用 LLM 抽取关键信息
3. 过滤低价值内容 (置信度 < 0.6)
4. 输出结构化记忆碎片
5. 发送至分类 skill
提取规则示例:
- IOC: IP/Domain/Hash/Email
- TTP: MITRE ATT&CK 战术/技术
- Pattern: 攻击模式、相似特征
- Conclusion: 研判结论、处置建议
```
#### 3. classify_memory_skill
```yaml
name: classify_memory_skill
description: 将记忆碎片分类到正确的记忆层
输入:
- 未分类的记忆碎片
- 当前分类规则配置
输出:
- 带分类标签的记忆
- memory_type: knowledge | case | process | profile | session
- ttl: 短期 | 中期 | 长期
- priority: 高 | 中 | 低
- namespace: 对应存储路径
触发时机:
- extract_memory_skill 完成后自动触发
处理流程:
1. 分析记忆内容特征
2. 匹配分类规则
3. 估算 TTL 和优先级
4. 分配 namespace
5. 发送至写回 skill
分类规则:
- knowledge: 通用知识、方法论、工具用法
- case: 具体案例、经验总结、模式
- process: 推理步骤、中间结果
- profile: 配置、偏好、规范
- session: 临时上下文、对话片段
```
#### 4. retrieve_context_skill
```yaml
name: retrieve_context_skill
description: 根据当前 case 检索最相关的上下文
输入:
- 当前 case 特征
- alert_type: 告警类型
- iocs: 已知 IOC
- description: 告警描述
- severity: 严重程度
- 检索参数
- top_k: 返回数量
- namespaces: 搜索范围
输出:
- 排序后的上下文列表
- content: 相关内容
- relevance_score: 相关度 0-1
- source: 来源 (ov/evermemos/obsidian)
- memory_type: 记忆类型
- metadata: 附加信息
触发时机:
- AI agent 开始新 case 研判时
- Agent 请求上下文时
检索策略:
1. 多路召回:
- 向量检索: 语义相似度
- 关键词检索: 精确匹配
- 图检索: 双向链接关系
2. 多层筛选:
- 按 memory_type 过滤
- 按时间/优先级排序
- 去重和合并
3. 重排序:
- 结合场景权重
- 个性化调整
返回格式:
- knowledge: 参考资料 1-3 条
- case: 相似案例 2-5 条
- ioc: 相关 IOC 1-3 条
- ttp: 相关 TTP 1-2 条
```
#### 5. summarize_case_skill
```yaml
name: summarize_case_skill
description: 将 case 过程沉淀为高质量 Case Note
输入:
- Case 元数据
- 研判过程日志
- Agent 对话历史
- 提取的 IOC/TTP
输出:
- 结构化 Case Note
- 关联建议
- 质量评分
触发时机:
- Case 状态变更为 Confirmed/FP 时
- Analyst 手动触发
处理流程:
1. 收集 Case 相关信息
2. 提取关键时间线
3. 归纳 IOC/TTP
4. 生成研判摘要
5. 推荐关联 (KB/历史 Case)
6. 写入 Obsidian
```
#### 6. commit_memory_skill
```yaml
name: commit_memory_skill
description: 将通过筛选的记忆写入目标存储
输入:
- 已分类的记忆
- 目标存储配置
输出:
- 写入结果
- 存储位置映射
触发时机:
- classify_memory_skill 完成后自动触发
- 批量定时提交
写入策略:
- knowledge → Obsidian (Markdown)
- case → Obsidian + OpenViking
- process → EverMemOS (短期)
- profile → OpenViking (长期)
- session → EverMemOS (会话级)
```
#### 7. prune_memory_skill
```yaml
name: prune_memory_skill
description: 清理过时、重复、低价值记忆
输入:
- 记忆库
- 清理策略配置
输出:
- 清理报告
- 统计信息
触发时机:
- 定时任务 (每周)
- 手动触发
清理规则:
1. TTL 过期:
- process: 7
- session: 任务结束
- case: 180 天后降级
2. 重复合并:
- 相似度 > 0.9 合并
- 保留高置信度版本
3. 价值评估:
- 长期未访问
- 引用计数过低
```
---
## 五、OpenViking 设计
### A. Namespace 设计
```yaml
# SOC Memory Namespace 架构
viking://soc/ # SOC 根命名空间
├── knowledge/ # 知识库
│ ├── kb/ # 知识库文档
│ ├── playbook/ # Playbook
│ └── intel/ # 威胁情报摘要
├── cases/ # 案例库
│ ├── 2024/ # 按年归档
│ │ ├── Q1/
│ │ ├── Q2/
│ │ ├── Q3/
│ │ └── Q4/
│ ├── patterns/ # 攻击模式库
│ └── iocs/ # IOC 知识库
├── process/ # 过程记忆
│ ├── active/ # 当前活跃
│ └── archived/ # 已归档
├── profiles/ # 配置/偏好
│ ├── analysts/ # Analyst 配置
│ │ └── {user_id}/
│ └── teams/ # 团队配置
└── sessions/ # 会话记忆
└── {session_id}/
```
### B. 资源组织
```yaml
# OpenViking Resource 结构
resources:
soc_kb: # SOC 知识库
type: directory
path: viking://soc/knowledge/
description: KB、Playbook、Intel
soc_cases: # 案例库
type: directory
path: viking://soc/cases/
description: 历史案例和模式
soc_process: # 过程记忆
type: directory
path: viking://soc/process/
description: 研判过程临时存储
```
### C. AI Agent 检索流程
```
┌─────────────────────────────────────────────────────────────────────────────────┐
│ AI Agent 上下文检索流程 │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ Agent 请求: "帮我研判这个告警" │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ retrieve_context_skill │ │
│ │ - alert_type: "钓鱼邮件" │ │
│ │ - iocs: ["192.168.1.1", "evil.com"] │ │
│ │ - severity: "P2" │ │
│ └───────────────────────────┬───────────────────────────────────┘ │
│ │ │
│ ┌───────────────────┼───────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Vector │ │ Keyword │ │ Graph │ │
│ │ Search │ │ Search │ │ Search │ │
│ │ (语义) │ │ (精确) │ │ (链接) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └───────────────────┼───────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────┐ │
│ │ Multi-way RRF Fusion │ │
│ │ + 场景权重调整 │ │
│ │ + 个性化排序 │ │
│ └────────────────┬────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────┐ │
│ │ 返回优先级上下文 │ │
│ │ - Knowledge: 1-3 │ │
│ │ - Case: 2-5 │ │
│ │ - IOC: 1-3 │ │
│ │ - TTP: 1-2 │ │
│ └─────────────────────────────────┘ │
│ │ │
│ ▼ │
│ Context Window │
└─────────────────────────────────────────────────────────────────────────────────┘
```
### D. OpenViking 与其他组件的关系
| 组件 | 与 OpenViking 的关系 |
|------|----------------------|
| Obsidian | OpenViking 读取 Obsidian 作为 resource 源 |
| Skills | 通过 OpenViking API 写入/读取记忆 |
| EverMemOS | 作为 OpenViking 的后端记忆存储 |
| AI Agent | 从 OpenViking 获取统一上下文 |
---
## 六、EverMemOS 设计
### A. 后台长期记忆整理架构
```
┌──────────────────────────────────────────────────────────────────────────────────┐
│ EverMemOS 长期记忆整理层 │
├──────────────────────────────────────────────────────────────────────────────────┤
│ │
│ 数据输入 │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
│ │ Episode Processor │ │
│ │ - 从 Process Memory 提取关键事件 │ │
│ │ - 识别有价值的研判步骤 │ │
│ │ - 标记重要结论和决策点 │ │
│ └────────────────────────────┬─────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
│ │ Memory Extractor │ │
│ │ 输入: 原始 episode │ │
│ │ 输出: 结构化记忆碎片 │ │
│ │ - fact: 事实陈述 │ │
│ │ - pattern: 模式发现 │ │
│ │ - conclusion: 结论 │ │
│ │ - confidence: 置信度 │ │
│ └────────────────────────────┬─────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
│ │ Deduplication & Merge │ │
│ │ - 向量相似度检测 │ │
│ │ - 语义去重 │ │
│ │ - 记忆合并 (多版本合并) │ │
│ │ - 冲突解决 │ │
│ └────────────────────────────┬─────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
│ │ Evolution & Decay │ │
│ │ - 访问计数跟踪 │ │
│ │ - 时间衰减 │ │
│ │ - 重要性重估 │ │
│ │ - 低价值清理 │ │
│ └────────────────────────────┬─────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 输出 │
│ │ │
│ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ OpenViking │ │ Obsidian │ │ 清理报告 │ │
│ │ (长期记忆) │ │ (案例笔记) │ │ (统计) │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────────────┘
```
### B. 长期记忆抽取规则
```yaml
# 记忆抽取策略
抽取目标:
- 从 Process Memory 抽取:
- 关键决策点
- 重要发现
- 有效 TTP
- 成功/失败模式
- 从 Session Memory 抽取:
- 高价值结论
- 常用模式
- Analyst 偏好
保留策略:
长期 (永久):
- 确认的 TTP 模式
- 有效的 Playbook
- 重要的 IOC 知识
- 经典 Case 总结
中期 (180天):
- 近期 Case 总结
- 有效的分析方法
- 团队知识更新
短期 (30天):
- Process 记忆
- 临时分析结果
- 中间推理步骤
丢弃:
- 重复信息
- 低置信度内容
- 未验证假设
去重/合并规则:
1. 语义相似度 > 0.9: 合并
2. 时间相近 + 内容相似: 合并
3. 冲突内容: 保留高置信度 + 标记
```
### C. 与 OpenViking/Obsidian 的闭环
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 记忆循环流动 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Process │────▶│ EverMemOS │────▶│ Open │ │
│ │ Memory │ │ (抽取/整理) │ │ Viking │ │
│ └─────────┘ └─────────────┘ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 检索返回 │ │
│ │ 供 Agent 使用 │ │
│ └─────────────────┘ │
│ │ │
│ ┌─────────┐ ┌─────────────┐ │ │
│ │ Session │────▶│ Summarize │◀──────────┘ │
│ │ Memory │ │ (case总结) │ │
│ └─────────┘ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Obsidian │ │
│ │ (Case Note) │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 七、最小可行 POC 范围
### A. POC 目标
**聚焦场景**: 钓鱼邮件告警研判
**理由**:
1. 钓鱼邮件是 SOC 最常见的告警类型之一
2. 有成熟的 KB 和 playbook 可供参考
3. IOC 提取和模式识别相对标准化
4. 容易评估效果 (研判时间、准确率)
### B. 数据范围
| 数据类型 | 接入范围 | 优先级 |
|----------|----------|--------|
| 历史 Case | 最近 6 个月的钓鱼邮件 Case | P0 |
| KB | 钓鱼邮件识别 KB、常见钓鱼模式 | P0 |
| Playbook | 钓鱼邮件响应 Playbook | P0 |
| 月报摘要 | 最近 4 个季度月报 | P1 |
| 情报 | 活跃钓鱼域名/IP 情报 | P1 |
| Ticket | 只接已结案的 Case | P2 |
### C. 先不做
- 实时告警接入
- 自动化研判闭环
- 多语言支持
- 移动端访问
- 全文档 OCR 识别
### D. 实施计划 (4 周)
```
┌────────────────────────────────────────────────────────────────────────────────┐
│ POC 实施计划 │
├────────────────────────────────────────────────────────────────────────────────┤
│ │
│ Week 1: 基础搭建 │
│ ├─ 搭建 Obsidian Vault 结构 │
│ ├─ 设计 Case Note / Playbook 模板 │
│ ├─ 配置 OpenViking SOC namespace │
│ ├─ 部署 EverMemOS 并验证 │
│ └─ 导入 50 个历史钓鱼 Case │
│ │
│ Week 2: Skills 开发 │
│ ├─ ingest_skill: KB/Case 导入 │
│ ├─ extract_memory_skill: IOC/TTP 抽取 │
│ ├─ classify_memory_skill: 分类逻辑 │
│ ├─ commit_memory_skill: 写入流程 │
│ └─ 端到端流程打通 │
│ │
│ Week 3: 检索与评估 │
│ ├─ retrieve_context_skill: 上下文检索 │
│ ├─ 多路召回实现 │
│ ├─ 基础评估脚本 │
│ └─ 内部测试使用 │
│ │
│ Week 4: 优化与验收 │
│ ├─ 检索效果调优 │
│ ├─ POC 演示 │
│ ├─ 评估指标统计 │
│ └─ 文档和交接 │
│ │
└────────────────────────────────────────────────────────────────────────────────┘
```
### E. 评估指标
| 指标 | 目标值 | 测量方式 |
|------|--------|----------|
| 相关 Case 命中率 | ≥ 70% | 检索结果相关性标注 |
| 研判时间缩短 | ≥ 30% | 对比有/无辅助的时间 |
| 结论准确率 | ≥ 85% | 回测历史 Case 准确率 |
| 人工满意度 | ≥ 4/5 | Analyst 评分 |
| 记忆库质量评分 | ≥ 80% | 随机抽样评估 |
---
## 八、目录结构与工程结构
### A. 推荐目录结构
```
soc-memory-poc/
├── 📁 obsidian_vault/ # Obsidian Vault
│ ├── 00_Knowledge/
│ ├── 10_Cases/
│ ├── 20_Analysis/
│ └── 90_System/
├── 📁 skills/ # Skills 集合
│ ├── ingest_skill/
│ │ ├── SKILL.md
│ │ ├── scripts/
│ │ │ └── ingest.py
│ │ └── configs/
│ │
│ ├── extract_memory_skill/
│ │ ├── SKILL.md
│ │ ├── scripts/
│ │ │ └── extract.py
│ │ └── prompts/
│ │ └── extraction.md
│ │
│ ├── classify_memory_skill/
│ ├── retrieve_context_skill/
│ ├── summarize_case_skill/
│ ├── commit_memory_skill/
│ └── prune_memory_skill/
├── 📁 openviking_integration/ # OpenViking 集成
│ ├── namespace_config.yaml
│ ├── resource_config.yaml
│ └── scripts/
│ └── sync_resources.py
├── 📁 evermemos_worker/ # EverMemOS 后台任务
│ ├── config.yaml
│ ├── extract_worker.py
│ ├── dedup_worker.py
│ ├── decay_worker.py
│ └── requirements.txt
├── 📁 ingestion_pipeline/ # 数据接入管道
│ ├── kb_ingester.py
│ ├── case_ingester.py
│ ├── ticket_connector.py
│ └── intel_connector.py
├── 📁 retrieval_service/ # 检索服务
│ ├── api.py
│ ├── ranker.py
│ ├── multi_way_merge.py
│ └── requirements.txt
├── 📁 evaluation/ # 评估脚本
│ ├── hit_rate_test.py
│ ├── time_measurement.py
│ ├── accuracy_test.py
│ └── synthetic_data/
├── 📁 configs/ # 全局配置
│ ├── soc_memory_config.yaml
│ ├── namespaces.yaml
│ └── template_config.yaml
└── 📁 docs/ # 文档
├── ARCHITECTURE.md
├── SKILLS_API.md
├── POC_PLAN.md
└── USER_GUIDE.md
```
### B. 核心文件说明
```yaml
# 目录与文件映射
soc-memory-poc/
├── obsidian_vault/ # 人工维护的知识库
│ └── 00_Knowledge/ # 静态知识
├── skills/ # 记忆流程自动化
│ ├── retrieve_context_skill/ # 检索入口 (Agent 调用)
│ ├── commit_memory_skill/ # 写入入口
│ └── ...其他 skill
├── openviking_integration/ # OpenViking 适配层
│ └── namespace_config.yaml # namespace 定义
├── evermemos_worker/ # 后台整理任务
│ └── extract_worker.py # 从 process 抽取
├── retrieval_service/ # 检索服务
│ └── api.py # 对外 API
└── evaluation/ # 评估
└── hit_rate_test.py # 命中率测试
```
---
## 九、为什么选择这个组合
### A. 组合逻辑
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 组件选择理由 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Obsidian │
│ ├─ 人工可维护: 分析师可直接编辑 KB/Playbook/Case Note │
│ ├─ 双向链接: 天然支持知识间的关联发现 │
│ └─ 模板系统: 规范 Case Note 和 Playbook 格式 │
│ │
│ OpenViking │
│ ├─ 统一入口: 所有 Agent 通过 OpenViking 获取上下文 │
│ ├─ 多模存储: 支持文件、资源、技能等多种形式 │
│ └─ 检索能力: 内置向量/关键词/图检索 │
│ │
│ EverMemOS │
│ ├─ 后台整理: 自动从过程记忆中抽取有价值内容 │
│ ├─ 去重合并: 避免记忆库膨胀 │
│ └─ 衰减机制: 自动清理低价值记忆 │
│ │
│ Skills │
│ ├─ 流程编排: 连接各组件形成完整工作流 │
│ ├─ 可插拔: 不同 Agent 框架可复用 │
│ └─ 可扩展: 方便添加新的处理逻辑 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
```
### B. 核心优势
1. **避免"全量存储"**: 通过 skills 层层筛选 + EverMemOS 自动清理
2. **高质量记忆**: 只保留对研判有帮助的内容
3. **模块化**: 各组件松耦合,方便替换
4. **可扩展**: POC 成功后容易扩展到其他告警类型
5. **人工可维护**: 分析师可以参与知识沉淀
---
## 十、落地顺序建议
### 推荐顺序
```
1⃣ Week 1: 先搭建 Obsidian + 导入历史 Case
- 最快看到价值
- 验证模板和标签体系
2⃣ Week 2: 部署 OpenViking + 配置 namespace
- 建立统一入口
- 打通检索流程
3⃣ Week 3: 开发核心 Skills (ingest/extract/commit)
- 实现自动化流程
- 端到端打通
4⃣ Week 4: 部署 EverMemOS + 实现检索
- 后台整理能力
- 评估效果
```
### 关键里程碑
| 周 | 里程碑 | 验收标准 |
|----|--------|----------|
| Week 1 | Obsidian 可用 | 50 个 Case 导入完成 |
| Week 2 | OpenViking 可检索 | 关键词检索正常工作 |
| Week 3 | Skills 端到端 | 自动化流程跑通 |
| Week 4 | POC 完成 | 命中率 ≥ 70% |
---
*文档版本: v1.0*
*创建日期: 2026-04-20*
*目标: 4 周 POC 落地*