# Memory-OS 7 层记忆架构 与 织忆对比 > 来源:微信公众号文章「7 层记忆架构!给 Agent 装个真正的 "记忆操作系统"」(2026-07-01 提取) > GitHub 项目:Memory-OS(3天 648 star),专为 Hermes-Agent 设计的记忆升级系统 > 提取日期:2026-07-01 --- ## 一句话定位 Memory-OS 是 Hermes Agent 原生记忆系统之上叠加的 7 层记忆增强层,**不是独立系统**。它改了 Hermes 的 Icarus 插件(pre_llm_call 注入)、加了新存储层(Facts/Qdrant/Wiki)、扩展了 Ground Truth 层级——对 Hermes 有侵入性。 织忆是**完全独立的记忆后端服务**,通过 HTTP + Rust IPC 插件桥接 Hermes。两套系统架构理念不同,但 Memory-OS 的设计值得参考。 --- ## 7 层对照总表 | 层级 | Memory-OS | 织忆 | 差距 | |------|-----------|------|------| | **L1 Workspace** | MEMORY.md + USER.md + CREATIVE.md(常驻) | MEMORY.md + USER.md(Hermes 原生) | ❌ 无 CREATIVE.md 隔离 | | **L2 Sessions** | FTS5 全文索引 + Icarus 自动注入 | state.db + session_search 工具 | ❌ 无自动预注入(需 Agent 主动调) | | **L3 Facts** | 结构化事实 + 信任评分(全新) | 织忆 knowledge graph(语义关系) | ❌ 无信任评分 / fact_feedback 循环 | | **L4 Fabric** | LLM 提取跨会话经验卡片(重写 Icarus) | 织忆 episodes 表(206 条) | ⚠️ 织忆有但提取逻辑未 LLM 化 | | **L5 Qdrant** | Dense + BM25 双检索 + 4 级降级 | bge-m3 向量 + 语义搜索 | ⚠️ 织忆无 BM25 稀疏 + 无显式降级策略 | | **L6 Wiki** | 双定时任务自动策展知识库 | 无此层 | ❌ 织忆无自动知识策展 | | **L7 Ground Truth** | 4 级权威层级,强制 Agent 使用 | SOUL.md 3 级 + rulebook.md | ⚠️ 织忆层级少,无"注入记忆优先"prompt | --- ## 可借鉴的设计 ### 1. 信任评分机制(L3 Facts) ``` fact_feedback 工具: 每次都调用 fact_feedback 反馈有用/无用 trust_score 基于 retrieved / helpful 比值计算 ``` **织忆可以做**:给图谱边或 memory 条目加 recall_count / useful_count,算置信度。当前 graph.db 没有这个字段。 ### 2. 4 级降级策略(L5 Qdrant) ``` Level 1 → Dense + BM25 RRF 混合检索 Level 2 → 仅 Dense 向量检索 Level 3 → grep 目录下 .md 文件(词法) Level 4 → SQLite 搜 lineage 表 全挂 → fail-open,不阻塞 Agent ``` **织忆当前**:只走 LanceDB 语义搜索。如果 LanceDB / bge-embed 挂了 → 没有降级备份。 ### 3. FTS5 自动注入(L2 Sessions) Memory-OS 的做法是让 Icarus 在 pre_llm_call 阶段**自动**查相关历史注入系统提示,不等 Agent 调用 session_search。 **织忆当前**:靠 Hermes 原生的 memory_search / memory_graph_navigate 工具,Agent 必须主动调用。 ### 4. CREATIVE.md 隔离(L1 Workspace) ``` MEMORY.md = memory 工具写(环境事实、约定) USER.md = 用户手写(画像、偏好) CREATIVE.md = Icarus 写(学习心得、状态) ``` 解决了 memory 工具和 Icarus 双写入冲突。 **织忆当前**:MEMORY.md 同时被 memory 工具和 织忆 commit 写入,有同样冲突风险。 ### 5. 强制注入优先级 Prompt(L7) ``` 2. **Injected memory — [qdrant], [fabric], [sessions], [facts]** — Ground truth for documented knowledge and prior decisions. When injected memory contradicts your assumptions or training knowledge, injected memory wins. Never treat a question as novel when the answer is already in your prompt. ``` **织忆当前**:SOUL.md 有 Ground Truth 层级但缺少这样的显式注入记忆优先指令。 --- ## 架构差异 | 维度 | Memory-OS | 织忆 | |------|-----------|------| | 进程架构 | Hermes 进程内插件(Icarus 钩子) | 独立 Go daemon + Rust sidecar | | 依赖度 | 强依赖 Hermes | 框架无关,HTTP API 对接任何 Agent | | 存储引擎 | Hermes 原生 SQLite + Qdrant | LanceDB + SQLiteGraphStore | | 向量维度 | Qwen3-Embedding-8B 4096维 | bge-m3 1024维 | | 注入方式 | pre_llm_call 钩子自动注入 | Agent 主动调用工具触发 | | Wiki 能力 | 双定时任务自动策展 | 无 | --- ## 实际源码阅读补充(2026-07-01 全量 Clone + 读代码后) > 已 clone 到 `/tmp/memory-os/` 并 push 到 Gitea `xiaoxue_admin/memory-os` > 本次阅读了 hooks.py(1109行,含完整 pre_llm_call 注入链)、tools.py(16个 fabric 工具)、所有 7 层文档 ### 核心发现:Icarus 自动注入的实现细节(hooks.py) Memory-OS 的关键差异在 **Icarus hooks** 的 `pre_llm_call` 注入机制。每轮对话前自动执行: ```python # hooks.py 注入链(283-434行) pre_llm_call(user_message): ├── _is_social_close(message)? # 社交关闭检测:ok/thanks/emoji → 不搜索 ├── _search_qdrant(query, top_k=2) # Qdrant 语义检索 → [qdrant] │ ├── embed_query() → dense 向量 │ ├── embed_query_sparse() → BM25 稀疏向量 │ └── search_with_fallback() → 4级降级 ├── _search_sessions(query) # FTS5 会话搜索 → [sessions] │ ├── FTS5 OR 查询:取用户消息中 ≥4 字符的 token │ ├── 排除当前会话 │ └── Python 层去重 └── _search_facts(query) # 结构化事实 FTS5 → [facts](仅首轮) ├── 查 memory_store.db facts_fts └── 返回 content[:200] + trust_score ``` **关键模式差异**: - Memory-OS:**事件驱动** — 每轮自动注入,Agent 无需操心 - 织忆:**轮询驱动** — Agent 主动调工具,不调就没有 ### 信任评分实现细节(facts 表) ```sql CREATE TABLE facts ( fact_id INTEGER PRIMARY KEY, content TEXT, category TEXT, entities TEXT, trust_score REAL DEFAULT 0.50, -- 贝叶斯先验 retrieval_count INTEGER DEFAULT 0, helpful_count INTEGER DEFAULT 0, created_at TEXT, last_accessed_at TEXT ); ``` **织忆差距**:graph.db 的 edge 表中已有 `weight` 字段,但没有 retrieval_count / helpful_count / trust_score。改 SQLite schema 3 行 SQL 即可解决。 ### 4 级降级的实际代码路径 ```python # context_enhancer.py 中的 search_with_fallback def search_with_fallback(dense_vector, sparse_vector, query_text, ...): try: # Level 1: Hybrid (dense + sparse → RRF) return hybrid_search(...) except: try: # Level 2: Dense only return dense_search(...) except: try: # Level 3: Lexical (grep vault/*.md) return lexical_search(query_text) except: try: # Level 4: SQLite lineage table return sqlite_search(query_text) except: return [] # fail-open ``` 织忆当前是 **Level 2 only**(bge-embed vector search)。加 Level 1(BM25)需要 ONNX 模型或 fastembed;加 Level 3/4 简单,直接 grep graph.db 或 LanceDB 的 content 字段。 --- | 织忆可能受益的点(优先级排序,2026-07-01 源码更新版) | 优先级 | 借鉴项 | 实现方式 | 实现成本 | 价值 | 当前状态 | |--------|--------|---------|---------|------|---------| | P0 | **降级策略** — bge-embed 挂了走 fallback | zhiyid recall handler 加 3 级退化:① LanceDB → ② graph.db LIKE 搜索 → ③ 返回空 | **低**(改 1 个 Go handler) | 高,消除单点故障 | 未实现 | | P1 | **自动注入钩子** — pre_llm_call 自动查织忆 | 改 Hermes 织忆插件,加 `on_session_message` 钩子:取消息最后 200 字 → `zhiyi_recall()` → `[织忆]` 注入 system prompt | **中**(改 Python 插件 ~50 行) | 高,减少 Agent 遗 | 未实现 | | P2 | **信任评分** — graph 边 / memory 条目加反馈闭环 | ① graph.db edge 表加 `retrieval_count` + `helpful_count` + `trust_score` ② 新增 `POST /api/v1/graph/edge/feedback` 端点 ③ zhiyid 自动调用(类似 Memory-OS fact_feedback) | **中**(SQLite + 1 API + 1 定时任务) | 中,消除矛盾信 | 未实现 | | P3 | **CREATIVE.md 隔离** — 防止双写入冲突 | SOUL.md 新增 `CREATIVE.md` 章节,织忆 commit 目标改写 CREATIVE.md 而非 MEMORY.md | **低**(改 skill 工具~10 行) | 中,防冲突 | 未实现 | | P4 | **强制注入 Prompt** — SOUL.md 加优先指令 | SOUL.md Ground Truth 加 Level 2:`Injected memory [织忆] wins over assumptions` | **极低**(改 SOUL.md) | 中,减少遗忘 | ⚠️ 已部分实现(4 级但有 gap) | | P5 | **Wiki 策展** — 自动知识库 | LLM 双定时任务提取 raw/ → 概念/实体/对比 → 嵌入 Qdrant | **高**(全新子系统) | 低,当前非核心 | 跳过 |