Memory-Palace-Openclaw 解读

Memory Palace Openclaw 解读 一句话:这不是给 OpenClaw 随便补一个 MEMORY.md 的小插件,而是一个“TypeScript 插件 + Python/FastAPI 后端 + React Dashboard + SQLite 检索/写入守卫/审查回滚”的完整记忆子系统。来源:README.md:8, extensions/memory palace/packag…


Memory-Palace-Openclaw 解读

一句话:这不是给 OpenClaw 随便补一个 MEMORY.md 的小插件,而是一个“TypeScript 插件 + Python/FastAPI 后端 + React Dashboard + SQLite 检索/写入守卫/审查回滚”的完整记忆子系统。来源:README.md:8, extensions/memory-palace/package.json:2,7,48-52, backend/main.py:600-620, frontend/package.json:2,7,12,25,30

这项目到底是什么

  • README 直接把项目定义为 “OpenClaw memory plugin + bundled skills for durable memory”。来源:README.md:8
  • Quickstart 和 chat-first onboarding 明确表明它面向真实安装与接入,而不是只供阅读的 demo。来源:README.md:40,61,75,84,214-216
  • 阮一峰周刊 issue 9651 把它包装成 “OpenClaw 的更强长期记忆系统”;这个判断大体成立,但要区分“仓库已证实能力”和“issue 宣传语”。来源:https://github.com/ruanyf/weekly/issues/9651

已确认的主架构

1) OpenClaw 插件层

  • 插件包名是 @openclaw/memory-palace。来源:extensions/memory-palace/package.json:2
  • Node 入口是 ./dist/index.js。来源:extensions/memory-palace/package.json:7
  • 发布包暴露了 memory-palace-openclaw 启动入口。来源:extensions/memory-palace/package.json:48-49
  • peerDependencies 要求 openclaw >=2026.3.2。来源:extensions/memory-palace/package.json:51-52

2) Python 后端

  • 后端主入口直接创建 FastAPI 应用。来源:backend/main.py:600-605
  • 同一入口注册 review / browse / maintenance 三组路由,说明后端不只是单一 MCP 转发层。来源:backend/main.py:617-620
  • 存储依赖包含 SQLAlchemy 与 aiosqlite。来源:backend/requirements.txt:11-12

3) Dashboard 前端

  • 前端包名是 memory-palace-dashboard。来源:frontend/package.json:2
  • 使用 Vite。来源:frontend/package.json:7
  • 使用 React 18。来源:frontend/package.json:30
  • 引入 diff 包,且 E2E 使用 Playwright。来源:frontend/package.json:12,25
  • 官方 Dashboard 指南明确写它是插件的 “companion operations surface”,并覆盖 setup / memory / review / maintenance / observability 五页。来源:docs/openclaw-doc/16-DASHBOARD_GUIDE.en.md:11,16,114-128,138,254
  • E2E 测试名也直接写了五页覆盖。来源:frontend/e2e/dashboard-five-pages.spec.ts:22

已确认的核心能力

1) 视觉记忆:不是空宣传,但“全网唯一”没法仅靠本仓库证明

  • visual-memory.ts 会把 enrichment 输出解析成 summary / ocr / scene / whyRelevant / entities / sourceChannel / observedAt / confidence 等字段。来源:extensions/memory-palace/src/visual-memory.ts:151-162
  • 调用 provider 时会把 mediaRef / summary / ocr / scene / whyRelevant / entities / sourceChannel 打包送入 enrichment。来源:extensions/memory-palace/src/visual-memory.ts:190-210
  • merge 阶段会把 ocr / scene / entities / whyRelevant 等字段写回 resolved input。来源:extensions/memory-palace/src/visual-memory.ts:329-367
  • 当 OCR provider 启用且字段缺失时,会真正调用 OCR enrichment。来源:extensions/memory-palace/src/visual-memory.ts:370-387
  • 所以“视觉记忆/视觉增强”在源码里是有实装证据的;但 issue 里的“全网唯一”“11 个竞品都没有”属于营销比较,本轮未逐个竞品验证。来源:https://github.com/ruanyf/weekly/issues/9651

2) 自动回忆(Auto-Recall)

  • auto-recall.ts 定义了完整依赖接口,包括 query variant 构造、shouldRecall 判定、scoped search、host bridge recall 等。来源:extensions/memory-palace/src/auto-recall.ts:61-120
  • Durable memory recall 会先搜主 query,没命中再尝试 query variants。来源:extensions/memory-palace/src/auto-recall.ts:194-214
  • 还存在 reflection recall lane。来源:extensions/memory-palace/src/auto-recall.ts:239-259
  • 如果 durable recall 不够,会尝试 host workspace bridge recall。来源:extensions/memory-palace/src/auto-recall.ts:262-280

3) 自动捕获(Auto-Capture)

  • auto-capture.ts 定义了自动分析、生成 capture content、生成 durable synthesis content/uri 的完整依赖接口。来源:extensions/memory-palace/src/auto-capture.ts:48-80
  • 实际写入时会调用 createOrMergeMemoryRecord(...),并按 category 设置 priority/disclosure/lane。来源:extensions/memory-palace/src/auto-capture.ts:353-373
  • Capture 成功后还会尝试把内容 upsert 到 profile memory block。来源:extensions/memory-palace/src/auto-capture.ts:378-399
  • 最终 trace 会记录 candidatesstored。来源:extensions/memory-palace/src/auto-capture.ts:495-503

4) 写入守卫(Write Guard)

  • MCP 写入链路明确调用 await client.write_guard(...)。来源:backend/mcp_tool_write.py:136-145
  • 还专门有 _guard_target_differs(...) 检查守卫目标 URI 与请求 URI 是否不一致。来源:backend/mcp_tool_write.py:31-39
  • SQLite 客户端里存在真正的 async def write_guard(...) 实现。来源:backend/db/sqlite_client.py:6558-6582
  • 前端 MemoryBrowser 也会根据 guard_action / guard_reason / guard_target_uri 构造反馈。来源:frontend/src/features/memory/MemoryBrowser.jsx:53-76

5) 检索与重排

  • 搜索链路显式维护 degraded_reasons。来源:backend/mcp_tool_search.py:687
  • 搜索响应里显式暴露 search_api_kindsemantic_search_unavailable。来源:backend/mcp_tool_search.py:1054-1058
  • SQLite retrieval mixin 中存在 candidate score 计算、MMR rerank、redundancy ratio。来源:backend/db/sqlite_client_retrieval.py:88-105,194-217,840-864
  • 这说明它不是单纯关键词搜索,而是带多因素打分与去冗余重排。

6) Review / Diff / Rollback

  • Review API 文件头直接写着 “Selective Rollback for Database Changes (SQLite Backend)”。来源:backend/api/review.py:1-14
  • 同模块导入了 difflib。来源:backend/api/review.py:18
  • 提供 /sessions 会话审查接口。来源:backend/api/review.py:98-105
  • 前端存在 DiffViewer,用 diffLines 渲染文本差异。来源:frontend/src/components/DiffViewer.jsx:1-10,20-30

7) Profile A/B/C/D + 对话式 Onboarding

  • Dashboard 文档明确给出 Profile B/C/D 的分层定位。来源:docs/openclaw-doc/16-DASHBOARD_GUIDE.en.md:114-128
  • Onboarding 文档明确要求流程是 memory_onboarding_status -> memory_onboarding_probe -> memory_onboarding_apply。来源:docs/openclaw-doc/18-CONVERSATIONAL_ONBOARDING.en.md:40,88-90,121,220
  • 同文档要求 apply/setup 后必须执行 openclaw memory-palace verify / doctor / smoke。来源:docs/openclaw-doc/18-CONVERSATIONAL_ONBOARDING.en.md:41,203,209
  • onboarding-tools.ts 里也有这三个工具常量。来源:extensions/memory-palace/src/onboarding-tools.ts:35-37
  • 评测文档则把 A/B/C/D 各档 setup/probe/apply/sign-off 列成明确验证项。来源:docs/EVALUATION.en.md:19-29

对 weekly issue 的结论校正

可以直接认定基本成立的

  • “这是 OpenClaw 长期记忆增强版” —— 成立。来源:README.md:8, backend/main.py:600-620, docs/openclaw-doc/16-DASHBOARD_GUIDE.en.md:11,16
  • “有 Dashboard” —— 成立。来源:docs/openclaw-doc/16-DASHBOARD_GUIDE.en.md:16, frontend/e2e/dashboard-five-pages.spec.ts:22
  • “有写入守卫、自动回忆、自动捕获、review/rollback” —— 成立。来源:backend/mcp_tool_write.py:136-145, extensions/memory-palace/src/auto-recall.ts:194-280, extensions/memory-palace/src/auto-capture.ts:353-399, backend/api/review.py:1-18
  • “有 Profile 化部署与 chat-first onboarding” —— 成立。来源:docs/openclaw-doc/18-CONVERSATIONAL_ONBOARDING.en.md:40-41,203, docs/EVALUATION.en.md:19-29

需要保守处理的

  • “全网唯一”“11 个竞品都没有” —— 本轮未做竞品逐仓复核,只能视为作者宣传。来源:https://github.com/ruanyf/weekly/issues/9651
  • “Precision 1.000 / 0.940 / 0.950”等具体分数 —— 仓库存在 benchmark 体系与文档,但本轮没有复跑 benchmark,因此不能把这些数字当作我已独立验证的事实。来源:docs/EVALUATION.en.md:19-29, https://github.com/ruanyf/weekly/issues/9651

我的判断

如果你问“mempalace 的加强版来了”这句话靠不靠谱:靠谱,而且不是小修小补,是明显的工程化升级版。

但更精确的说法应是:

  • 架构层面,它已经是一个完整记忆子系统;
  • 功能层面,视觉增强、自动回忆、自动捕获、写入守卫、检索重排、审查回滚、Profile、Onboarding 都有源码/文档证据;
  • 宣传层面,“全网唯一”“竞品碾压”“具体 benchmark 分数”还不能在本轮直接照单全收。

相关链接