# 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 落地*