56 KiB
56 KiB
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 模板
---
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 模板
---
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: ...
决策点
{{决策树或流程图}}
常见问题
| 问题 | 解决方案 |
|---|---|
关联
### 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
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
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
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
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
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
name: commit_memory_skill
description: 将通过筛选的记忆写入目标存储
输入:
- 已分类的记忆
- 目标存储配置
输出:
- 写入结果
- 存储位置映射
触发时机:
- classify_memory_skill 完成后自动触发
- 批量定时提交
写入策略:
- knowledge → Obsidian (Markdown)
- case → Obsidian + OpenViking
- process → EverMemOS (短期)
- profile → OpenViking (长期)
- session → EverMemOS (会话级)
7. prune_memory_skill
name: prune_memory_skill
description: 清理过时、重复、低价值记忆
输入:
- 记忆库
- 清理策略配置
输出:
- 清理报告
- 统计信息
触发时机:
- 定时任务 (每周)
- 手动触发
清理规则:
1. TTL 过期:
- process: 7 天
- session: 任务结束
- case: 180 天后降级
2. 重复合并:
- 相似度 > 0.9 合并
- 保留高置信度版本
3. 价值评估:
- 长期未访问
- 引用计数过低
五、OpenViking 设计
A. Namespace 设计
# 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. 资源组织
# 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. 长期记忆抽取规则
# 记忆抽取策略
抽取目标:
- 从 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 目标
聚焦场景: 钓鱼邮件告警研判
理由:
- 钓鱼邮件是 SOC 最常见的告警类型之一
- 有成熟的 KB 和 playbook 可供参考
- IOC 提取和模式识别相对标准化
- 容易评估效果 (研判时间、准确率)
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. 核心文件说明
# 目录与文件映射
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. 核心优势
- 避免"全量存储": 通过 skills 层层筛选 + EverMemOS 自动清理
- 高质量记忆: 只保留对研判有帮助的内容
- 模块化: 各组件松耦合,方便替换
- 可扩展: POC 成功后容易扩展到其他告警类型
- 人工可维护: 分析师可以参与知识沉淀
十、落地顺序建议
推荐顺序
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 落地