memoryweave/docs/memory-os-7-layer-compariso...

8.7 KiB
Raw Blame History

Memory-OS 7 层记忆架构 与 织忆对比

来源微信公众号文章「7 层记忆架构!给 Agent 装个真正的 "记忆操作系统"」(2026-07-01 提取) GitHub 项目Memory-OS3天 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.mdHermes 原生) 无 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. 强制注入优先级 PromptL7

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.py1109行含完整 pre_llm_call 注入链、tools.py16个 fabric 工具)、所有 7 层文档

核心发现Icarus 自动注入的实现细节hooks.py

Memory-OS 的关键差异在 Icarus hookspre_llm_call 注入机制。每轮对话前自动执行:

# 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 表)

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 级降级的实际代码路径

# 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 onlybge-embed vector search。加 Level 1BM25需要 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 2Injected memory [织忆] wins over assumptions 极低(改 SOUL.md 中,减少遗忘 ⚠️ 已部分实现4 级但有 gap
P5 Wiki 策展 — 自动知识库 LLM 双定时任务提取 raw/ → 概念/实体/对比 → 嵌入 Qdrant (全新子系统) 低,当前非核心 跳过