<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ChromaDB on Yison's Blog</title><link>https://blog.7ys.top/tags/chromadb/</link><description>Recent content in ChromaDB on Yison's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Sun, 17 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.7ys.top/tags/chromadb/index.xml" rel="self" type="application/rss+xml"/><item><title>AI Agent 的记忆革命：MemPalace 如何用'宫殿隐喻'重构 LLM 记忆</title><link>https://blog.7ys.top/posts/mempalace-ai-memory-deep-dive/</link><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><guid>https://blog.7ys.top/posts/mempalace-ai-memory-deep-dive/</guid><description>&lt;img src="https://blog.7ys.top/" alt="Featured image of post AI Agent 的记忆革命：MemPalace 如何用'宫殿隐喻'重构 LLM 记忆" /&gt;&lt;h2 id="金鱼记忆的-ai-agent"&gt;金鱼记忆的 AI Agent
&lt;/h2&gt;&lt;p&gt;用 AI Agent 写代码的人，大概都有过这样的时刻：&lt;/p&gt;
&lt;p&gt;你花了三个小时跟 Agent 讨论架构方案，做了十几轮代码迭代，终于把认证模块从 OAuth 1.0 迁移到 OAuth 2.0。第二天打开新会话，Agent 一脸茫然：&amp;ldquo;请问您想实现什么功能？&amp;rdquo;&lt;/p&gt;
&lt;p&gt;三个小时的上下文，就这么蒸发了。&lt;/p&gt;
&lt;p&gt;这不是 Agent 笨——这是&lt;strong&gt;记忆系统&lt;/strong&gt;的根本性缺陷。当前所有主流方案（Mem0、Mastra、Supermemory）都在做同一件事：&lt;strong&gt;用 LLM 决定记什么&lt;/strong&gt;。它们提取事实、生成摘要、压缩上下文，然后把原始对话丢进垃圾桶。&lt;/p&gt;
&lt;p&gt;问题在于：当 LLM 提取出&amp;quot;用户喜欢 PostgreSQL&amp;quot;并丢弃原始对话时，它丢失了&lt;strong&gt;为什么&lt;/strong&gt;喜欢、考虑过哪些替代方案、讨论了哪些权衡。&lt;/p&gt;
&lt;p&gt;MemPalace 说：&lt;strong&gt;别提取了，把原文存下来。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个反直觉的方案，在 LongMemEval 基准上跑出了 &lt;strong&gt;96.6% 的检索召回率&lt;/strong&gt;——不需要任何 API，不需要云端，不需要 LLM。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一mempalace不只是另一个-rag"&gt;一、MemPalace：不只是另一个 RAG
&lt;/h2&gt;&lt;h3 id="11-核心理念"&gt;1.1 核心理念
&lt;/h3&gt;&lt;p&gt;MemPalace 的设计哲学可以用一句话概括：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;原始文本 &amp;gt; LLM 提取。简单的事情做对了，比复杂的事情做错了更好。&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;维度&lt;/th&gt;
 &lt;th&gt;传统方案（Mem0 等）&lt;/th&gt;
 &lt;th&gt;MemPalace&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;存储内容&lt;/td&gt;
 &lt;td&gt;LLM 提取的事实/摘要&lt;/td&gt;
 &lt;td&gt;原始对话文本（verbatim）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;信息损耗&lt;/td&gt;
 &lt;td&gt;高（提取过程丢失上下文）&lt;/td&gt;
 &lt;td&gt;零（原文存储）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;检索方式&lt;/td&gt;
 &lt;td&gt;向量语义搜索&lt;/td&gt;
 &lt;td&gt;BM25 + 向量 + Closet Boost 混合搜索&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LLM 依赖&lt;/td&gt;
 &lt;td&gt;必须（提取和检索都需要）&lt;/td&gt;
 &lt;td&gt;可选（核心路径零 API）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;隐私性&lt;/td&gt;
 &lt;td&gt;数据通常上传云端&lt;/td&gt;
 &lt;td&gt;本地优先，数据不出机器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="12-灵感来源"&gt;1.2 灵感来源
&lt;/h3&gt;&lt;p&gt;MemPalace 的架构灵感来自两个经典方法论：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;卢曼卡片笔记法（Zettelkasten）&lt;/strong&gt;：德国社会学家尼克拉斯·卢曼用小的、交叉引用的索引卡片管理知识。每张卡片是一个原子想法，通过链接形成知识网络。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;古希腊记忆宫殿法（Method of Loci）&lt;/strong&gt;：把需要记忆的内容&amp;quot;放置&amp;quot;在想象中的空间位置，通过&amp;quot;行走&amp;quot;回忆。MemPalace 的 Wings、Rooms、Drawers 就是这个隐喻的代码实现。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="二宫殿架构四层结构深度剖析"&gt;二、宫殿架构：四层结构深度剖析
&lt;/h2&gt;&lt;p&gt;MemPalace 的核心是一个&lt;strong&gt;四层递进的存储结构&lt;/strong&gt;：&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 A[🏰 Palace 宫殿] --&gt; B[🦋 Wing 翼楼]
 B --&gt; C[🚪 Room 房间]
 C --&gt; D[🗄️ Closet 衣柜]
 D --&gt; E[📄 Drawer 抽屉]
 
 B --&gt; |"人物/项目/主题"| B1["wing_kai&lt;br/&gt;wing_driftwood&lt;br/&gt;wing_auth-system"]
 C --&gt; |"主题/时间段"| C1["auth-migration&lt;br/&gt;graphql-switch&lt;br/&gt;ci-pipeline"]
 D --&gt; |"AAAK压缩索引"| D1["§ W-042/R-11/D-007&lt;br/&gt;@p noah~son.age=6&lt;br/&gt;@e birthday~party"]
 E --&gt; |"原始文本"| E1["完整的对话内容&lt;br/&gt;代码片段&lt;br/&gt;决策记录"]
 
 style A fill:#1e293b,stroke:#22d3ee,color:#e2e8f0
 style B fill:#1e3a5f,stroke:#38bdf8,color:#e2e8f0
 style C fill:#1e3a5f,stroke:#38bdf8,color:#e2e8f0
 style D fill:#1e3a5f,stroke:#38bdf8,color:#e2e8f0
 style E fill:#1e3a5f,stroke:#38bdf8,color:#e2e8f0&lt;/pre&gt;&lt;h3 id="21-wing翼楼-顶层组织单元"&gt;2.1 Wing（翼楼）—— 顶层组织单元
&lt;/h3&gt;&lt;p&gt;每个 Wing 代表一个&lt;strong&gt;实体&lt;/strong&gt;：一个人、一个项目、或一个主题。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wing_kai → 某个人的所有对话
wing_driftwood → 某个项目的所有记录
wing_auth-system → 认证系统相关的所有内容
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;设计意图&lt;/strong&gt;：当搜索&amp;quot;Kai 的认证方案&amp;quot;时，可以限定在 &lt;code&gt;wing_kai&lt;/code&gt; 范围内搜索，避免其他项目的噪音干扰。&lt;/p&gt;
&lt;h3 id="22-room房间-主题分组"&gt;2.2 Room（房间）—— 主题分组
&lt;/h3&gt;&lt;p&gt;每个 Wing 下有多个 Room，代表&lt;strong&gt;具体主题或时间段&lt;/strong&gt;：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wing_kai/
 ├── room_auth-migration → OAuth 迁移相关
 ├── room_graphql-switch → GraphQL 切换相关
 └── room_ci-pipeline → CI 流水线相关
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Room 通常从文件夹结构自动检测，也可以手动创建。&lt;/p&gt;
&lt;h3 id="23-closet衣柜-aaak-压缩索引"&gt;2.3 Closet（衣柜）—— AAAK 压缩索引
&lt;/h3&gt;&lt;p&gt;这是 MemPalace 最精妙的设计。Closet 是一个&lt;strong&gt;压缩的索引层&lt;/strong&gt;，用一种叫 AAAK 的密集符号语言编写，LLM 可以一眼扫描数千条索引，精确定位到需要的 Drawer。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;§ W-042/R-11/D-007 &lt;/span&gt; &lt;span style="color:#75715e"&gt;# 定位符：翼楼-042/房间-11/抽屉-007&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#ae81ff"&gt;p noah~son.age=6~dob=09-12&lt;/span&gt; &lt;span style="color:#75715e"&gt;# 人物：Noah，儿子6岁，生日9月12日&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#ae81ff"&gt;l glebe-pt-rd.park &lt;/span&gt; &lt;span style="color:#75715e"&gt;# 地点：Glebe Point Road 公园&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#ae81ff"&gt;e birthday~party(n≈8) &lt;/span&gt; &lt;span style="color:#75715e"&gt;# 事件：生日派对，约8人&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#ae81ff"&gt;i therizinosaurus~claws &lt;/span&gt; &lt;span style="color:#75715e"&gt;# 兴趣：镰刀龙的爪子&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#ae81ff"&gt;t 2026-04-14T09:41 &lt;/span&gt; &lt;span style="color:#75715e"&gt;# 时间戳&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;§ ptr → D-007 (verbatim) &lt;/span&gt; &lt;span style="color:#75715e"&gt;# 指针：指向抽屉-007的原始文本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;为什么需要 Closet？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;直接搜索所有 Drawer 效率太低。Closet 就像图书馆的目录卡片——先看目录，再去找书。LLM 扫描 Closet 可以瞬间知道&amp;quot;关于 Noah 生日的信息在 D-007&amp;quot;，然后直接读取那个 Drawer 的完整内容。&lt;/p&gt;
&lt;h3 id="24-drawer抽屉-原始文本存储"&gt;2.4 Drawer（抽屉）—— 原始文本存储
&lt;/h3&gt;&lt;p&gt;最底层，存储&lt;strong&gt;原始对话的完整文本&lt;/strong&gt;。不做任何摘要、压缩或改写。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Drawer D-007:
 &amp;#34;Noah&amp;#39;s birthday party was at the park on Glebe Point Road.
 About 8 kids came. He was really into therizinosaurus claws
 at the time, so the cake had a dinosaur theme...&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="25-hall大厅-概念分类"&gt;2.5 Hall（大厅）—— 概念分类
&lt;/h3&gt;&lt;p&gt;每个 Wing 内还有隐含的 &lt;strong&gt;Hall&lt;/strong&gt; 分类：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Hall&lt;/th&gt;
 &lt;th&gt;内容&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;hall_facts&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;做出的决定、锁定的选择&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;hall_events&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;会话、里程碑、调试过程&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;hall_discoveries&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;突破、新洞察&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;hall_preferences&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;习惯、偏好、观点&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;hall_advice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;建议和解决方案&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="26-tunnel隧道-跨翼楼连接"&gt;2.6 Tunnel（隧道）—— 跨翼楼连接
&lt;/h3&gt;&lt;p&gt;当两个 Wing 有相同的 Room 名称时，自动建立 &lt;strong&gt;Tunnel&lt;/strong&gt; 连接：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wing_kai / hall_events / auth-migration → &amp;#34;Kai 调试了 OAuth token refresh&amp;#34;
wing_driftwood / hall_facts / auth-migration → &amp;#34;团队决定迁移到 Clerk&amp;#34;
wing_priya / hall_advice / auth-migration → &amp;#34;Priya 批准了 Clerk 而非 Auth0&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;搜索&amp;quot;auth-migration&amp;quot;时，可以通过 Tunnel 找到所有相关 Wing 的内容。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="三核心实现原理"&gt;三、核心实现原理
&lt;/h2&gt;&lt;h3 id="31-混合搜索算法"&gt;3.1 混合搜索算法
&lt;/h3&gt;&lt;p&gt;MemPalace 的搜索不是简单的向量检索，而是一个&lt;strong&gt;三阶段混合管道&lt;/strong&gt;：&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;sequenceDiagram
 participant U as 用户查询
 participant V as 向量搜索引擎
 participant B as BM25 关键词搜索
 participant C as Closet Boost
 participant R as 混合排序器
 participant N as 邻居扩展
 
 U-&gt;&gt;V: 语义相似度搜索
 V-&gt;&gt;R: 返回 Top-K 候选（cosine distance）
 
 U-&gt;&gt;B: 关键词匹配
 B-&gt;&gt;R: 返回 BM25 候选（Okapi-BM25）
 
 R-&gt;&gt;R: 合并候选集（Union Merge）
 R-&gt;&gt;R: 混合排序&lt;br/&gt;score = 0.6 × vector_sim + 0.4 × bm25_norm
 
 R-&gt;&gt;C: 查询 Closet 索引
 C-&gt;&gt;R: 返回 Boost 信号&lt;br/&gt;boost = [0.40, 0.25, 0.15, 0.08, 0.04]
 R-&gt;&gt;R: 应用 Boost&lt;br/&gt;effective_dist = max(0, raw_dist - boost)
 
 R-&gt;&gt;N: 对 Top 结果扩展 ±1 邻居
 N-&gt;&gt;U: 返回最终结果（含上下文）
 
 Note over U,N: 整个过程零 API 调用，纯本地执行&lt;/pre&gt;&lt;h4 id="bm25-实现细节"&gt;BM25 实现细节
&lt;/h4&gt;&lt;p&gt;MemPalace 使用 &lt;strong&gt;Okapi-BM25&lt;/strong&gt; 算法，参数经过精心调优：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# BM25 参数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;k1 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1.5&lt;/span&gt; &lt;span style="color:#75715e"&gt;# 词频饱和度（term-frequency saturation）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;b &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0.75&lt;/span&gt; &lt;span style="color:#75715e"&gt;# 长度归一化（length normalization）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# IDF 计算：使用 Lucene/BM25+ 平滑公式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 避免除零错误，对罕见词给予更高权重&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;idf &lt;span style="color:#f92672"&gt;=&lt;/span&gt; log(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; (N &lt;span style="color:#f92672"&gt;-&lt;/span&gt; n &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0.5&lt;/span&gt;) &lt;span style="color:#f92672"&gt;/&lt;/span&gt; (n &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0.5&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 最终分数归一化到 [0, 1]，与向量分数可比较&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bm25_norm &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (score &lt;span style="color:#f92672"&gt;-&lt;/span&gt; min_score) &lt;span style="color:#f92672"&gt;/&lt;/span&gt; (max_score &lt;span style="color:#f92672"&gt;-&lt;/span&gt; min_score)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="closet-boost-机制"&gt;Closet Boost 机制
&lt;/h4&gt;&lt;p&gt;Closet 不是搜索的&amp;quot;门&amp;quot;，而是&amp;quot;助推器&amp;quot;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CLOSET_RANK_BOOSTS &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#ae81ff"&gt;0.40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0.25&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0.15&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0.08&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0.04&lt;/span&gt;] &lt;span style="color:#75715e"&gt;# 基于排名的 Boost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CLOSET_DISTANCE_CAP &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1.5&lt;/span&gt; &lt;span style="color:#75715e"&gt;# 距离 &amp;gt; 1.5 的 Closet 信号太弱，忽略&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 有效距离 = max(0, min(2, 原始距离 - boost))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 效果：匹配 Closet 的 Drawer 被拉到更前面&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;关键设计决策&lt;/strong&gt;：Closet 只是排序信号，不是过滤器。即使 Closet 没命中，直接搜索 Drawer 也能找到结果。这避免了&amp;quot;Closet 质量差导致搜不到&amp;quot;的问题。&lt;/p&gt;
&lt;h4 id="邻居扩展"&gt;邻居扩展
&lt;/h4&gt;&lt;p&gt;当找到一个匹配的 Drawer 时，自动扩展其&lt;strong&gt;前后各 1 个 Drawer&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;expand_with_neighbors&lt;/span&gt;(drawers_col, matched_doc, matched_meta, radius&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&amp;#34;扩展匹配的 Drawer，包含 ±radius 的兄弟块。&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 解决&amp;#34;对话被切断&amp;#34;的问题&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 例如：Drawer 5 讨论了方案 A，Drawer 6 讨论了方案 B&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 搜索&amp;#34;方案 A&amp;#34;时，返回 Drawer 5 + 6，提供完整上下文&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="bm25-only-降级方案"&gt;BM25-Only 降级方案
&lt;/h4&gt;&lt;p&gt;当 HNSW 索引损坏时，自动降级到纯 BM25 搜索：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;bm25_only_via_sqlite&lt;/span&gt;(query, palace_path, &lt;span style="color:#f92672"&gt;...&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&amp;#34;BM25-only 搜索，直接从 chroma.sqlite3 读取。&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 绕过 ChromaDB 的 Python 客户端&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 使用 ChromaDB 内部的 FTS5 三元组索引&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 当 HNSW 段损坏或不可加载时自动触发&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="32-知识图谱时间感知的实体关系"&gt;3.2 知识图谱：时间感知的实体关系
&lt;/h3&gt;&lt;p&gt;MemPalace 内置了一个&lt;strong&gt;时间感知的实体关系图谱&lt;/strong&gt;，用 SQLite 实现（不是 Neo4j）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;-- 实体表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TABLE&lt;/span&gt; entities (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; id TEXT &lt;span style="color:#66d9ef"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;KEY&lt;/span&gt;, &lt;span style="color:#75715e"&gt;-- 规范化名称（小写，下划线）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name TEXT &lt;span style="color:#66d9ef"&gt;NOT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;NULL&lt;/span&gt;, &lt;span style="color:#75715e"&gt;-- 原始名称
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;type&lt;/span&gt; TEXT &lt;span style="color:#66d9ef"&gt;DEFAULT&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;unknown&amp;#39;&lt;/span&gt;, &lt;span style="color:#75715e"&gt;-- person, project, tool, concept
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; properties TEXT &lt;span style="color:#66d9ef"&gt;DEFAULT&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;{}&amp;#39;&lt;/span&gt;, &lt;span style="color:#75715e"&gt;-- JSON 元数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; created_at TEXT &lt;span style="color:#66d9ef"&gt;DEFAULT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;CURRENT_TIMESTAMP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;-- 关系三元组表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TABLE&lt;/span&gt; triples (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; id TEXT &lt;span style="color:#66d9ef"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;KEY&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; subject TEXT &lt;span style="color:#66d9ef"&gt;NOT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;NULL&lt;/span&gt;, &lt;span style="color:#75715e"&gt;-- FK → entities.id
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; predicate TEXT &lt;span style="color:#66d9ef"&gt;NOT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;NULL&lt;/span&gt;, &lt;span style="color:#75715e"&gt;-- 关系类型
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;object&lt;/span&gt; TEXT &lt;span style="color:#66d9ef"&gt;NOT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;NULL&lt;/span&gt;, &lt;span style="color:#75715e"&gt;-- FK → entities.id
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; valid_from TEXT, &lt;span style="color:#75715e"&gt;-- 生效时间
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; valid_to TEXT, &lt;span style="color:#75715e"&gt;-- 失效时间（NULL = 仍有效）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; confidence REAL &lt;span style="color:#66d9ef"&gt;DEFAULT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;.&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, &lt;span style="color:#75715e"&gt;-- 置信度
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; source_closet TEXT, &lt;span style="color:#75715e"&gt;-- 链接到原始记忆
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; source_drawer_id TEXT &lt;span style="color:#75715e"&gt;-- 溯源信息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;使用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; mempalace.knowledge_graph &lt;span style="color:#f92672"&gt;import&lt;/span&gt; KnowledgeGraph
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kg &lt;span style="color:#f92672"&gt;=&lt;/span&gt; KnowledgeGraph()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 添加事实（带时间窗口）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kg&lt;span style="color:#f92672"&gt;.&lt;/span&gt;add_triple(&lt;span style="color:#e6db74"&gt;&amp;#34;Kai&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;works_on&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;Orion&amp;#34;&lt;/span&gt;, valid_from&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;2025-06-01&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kg&lt;span style="color:#f92672"&gt;.&lt;/span&gt;add_triple(&lt;span style="color:#e6db74"&gt;&amp;#34;Maya&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;assigned_to&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;auth-migration&amp;#34;&lt;/span&gt;, valid_from&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;2026-01-15&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 查询：Kai 的所有关系&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kg&lt;span style="color:#f92672"&gt;.&lt;/span&gt;query_entity(&lt;span style="color:#e6db74"&gt;&amp;#34;Kai&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 时间旅行查询：2026年1月的事实&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kg&lt;span style="color:#f92672"&gt;.&lt;/span&gt;query_entity(&lt;span style="color:#e6db74"&gt;&amp;#34;Maya&amp;#34;&lt;/span&gt;, as_of&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;2026-01-20&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 时间线：Orion 项目的历史&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kg&lt;span style="color:#f92672"&gt;.&lt;/span&gt;timeline(&lt;span style="color:#e6db74"&gt;&amp;#34;Orion&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 失效旧事实&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kg&lt;span style="color:#f92672"&gt;.&lt;/span&gt;invalidate(&lt;span style="color:#e6db74"&gt;&amp;#34;Kai&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;works_on&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;Orion&amp;#34;&lt;/span&gt;, ended&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;2026-03-01&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="33-hook-系统零-token-的自动保存"&gt;3.3 Hook 系统：零 Token 的自动保存
&lt;/h3&gt;&lt;p&gt;MemPalace 的 Hook 系统是&lt;strong&gt;零 Token 消耗&lt;/strong&gt;的自动保存机制：&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;sequenceDiagram
 participant U as 用户
 participant A as AI Agent
 participant H as Hook 系统
 participant P as Palace 存储
 
 U-&gt;&gt;A: 发送消息（第15条）
 A-&gt;&gt;A: 正常处理消息
 
 Note over H: Stop Hook 触发&lt;br/&gt;（每15条消息）
 H-&gt;&gt;A: 注入提示词：&lt;br/&gt;"保存关键话题/决策/引用到 Palace"
 A-&gt;&gt;P: 调用 mempalace_add_drawer&lt;br/&gt;保存本次会话内容
 P--&gt;&gt;A: 确认保存
 A-&gt;&gt;U: 继续正常对话
 
 Note over H: PreCompact Hook 触发&lt;br/&gt;（上下文压缩前）
 H-&gt;&gt;A: 紧急保存提示：&lt;br/&gt;"上下文即将压缩，保存所有内容"
 A-&gt;&gt;P: 批量保存所有未保存内容
 P--&gt;&gt;A: 确认保存
 
 Note over U,P: Hook 是本地 bash 脚本&lt;br/&gt;不消耗 API Token&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Hook 配置&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;.claude/settings.local.json&lt;/code&gt; 中配置（详见第六章安装指南）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;性能指标&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stop Hook 执行时间：&amp;lt; 500ms&lt;/li&gt;
&lt;li&gt;PreCompact Hook 执行时间：&amp;lt; 500ms&lt;/li&gt;
&lt;li&gt;启动注入（wake-up）：&amp;lt; 100ms&lt;/li&gt;
&lt;li&gt;测试规模：150K+ Drawers&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="四mcp-工具生态30-个工具全景"&gt;四、MCP 工具生态：30 个工具全景
&lt;/h2&gt;&lt;p&gt;MemPalace 通过 MCP（Model Context Protocol）暴露了 &lt;strong&gt;30 个工具&lt;/strong&gt;，覆盖记忆系统的完整生命周期：&lt;/p&gt;
&lt;h3 id="41-读取工具7-个"&gt;4.1 读取工具（7 个）
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;工具&lt;/th&gt;
 &lt;th&gt;功能&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_status&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;宫殿概览：总 Drawer 数、Wing/Room 计数、AAAK 规范&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_list_wings&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;列出所有 Wing 及其 Drawer 数量&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_list_rooms&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;列出指定 Wing 下的 Room&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_get_taxonomy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;完整的 Wing → Room → Drawer 数量树&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_search&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;语义搜索&lt;/strong&gt;：返回原始 Drawer 内容 + 相似度分数&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_check_duplicate&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;检查内容是否已存在（阈值 0.85-0.87）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_get_aaak_spec&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;返回 AAAK 索引规范&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="42-写入工具6-个"&gt;4.2 写入工具（6 个）
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;工具&lt;/th&gt;
 &lt;th&gt;功能&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_add_drawer&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;将原始内容存入 Palace&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_delete_drawer&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;删除 Drawer（不可逆）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_sync&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;清理已删除/移动的源文件对应的 Drawer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_get_drawer&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;获取单个 Drawer 的完整内容&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_list_drawers&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;分页列出 Drawer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_update_drawer&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;更新 Drawer 内容/元数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="43-知识图谱工具5-个"&gt;4.3 知识图谱工具（5 个）
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;工具&lt;/th&gt;
 &lt;th&gt;功能&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_kg_query&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;查询实体关系（支持时间过滤）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_kg_add&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;添加事实三元组&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_kg_invalidate&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;标记事实失效&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_kg_timeline&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;实体的时间线&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_kg_stats&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;图谱概览&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="44-导航工具7-个"&gt;4.4 导航工具（7 个）
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;工具&lt;/th&gt;
 &lt;th&gt;功能&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_traverse&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;从某个 Room 开始遍历，找到跨 Wing 的关联内容&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_find_tunnels&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;找到连接两个 Wing 的 Tunnel&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_graph_stats&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;宫殿图概览：节点、隧道、边、连通性&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_create_tunnel&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;创建跨 Wing 的 Tunnel&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_list_tunnels&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;列出所有 Tunnel&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_delete_tunnel&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;删除 Tunnel&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_follow_tunnels&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;跟踪 Tunnel 到达其他 Wing&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="45-agent-日记工具2-个"&gt;4.5 Agent 日记工具（2 个）
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;工具&lt;/th&gt;
 &lt;th&gt;功能&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_diary_write&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;写入 Agent 个人日记&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_diary_read&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;读取最近的日记条目&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="46-系统工具3-个"&gt;4.6 系统工具（3 个）
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;工具&lt;/th&gt;
 &lt;th&gt;功能&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_hook_settings&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;获取/设置自动保存 Hook 行为&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_memories_filed_away&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;检查最近的 Palace 检查点是否已保存&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mempalace_reconnect&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;强制重连 Palace 数据库&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="五性能基准966-的真实含义"&gt;五、性能基准：96.6% 的真实含义
&lt;/h2&gt;&lt;h3 id="51-longmemeval-结果"&gt;5.1 LongMemEval 结果
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;模式&lt;/th&gt;
 &lt;th style="text-align: center"&gt;R@5&lt;/th&gt;
 &lt;th style="text-align: center"&gt;是否需要 LLM&lt;/th&gt;
 &lt;th style="text-align: center"&gt;成本&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Raw（纯语义搜索）&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;96.6%&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;❌&lt;/td&gt;
 &lt;td style="text-align: center"&gt;$0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Hybrid v4（held-out 450题）&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;98.4%&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;❌&lt;/td&gt;
 &lt;td style="text-align: center"&gt;$0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Hybrid v4 + Haiku rerank&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;✅ Haiku&lt;/td&gt;
 &lt;td style="text-align: center"&gt;~$0.001/次&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Hybrid v4 + Sonnet rerank&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;✅ Sonnet&lt;/td&gt;
 &lt;td style="text-align: center"&gt;~$0.003/次&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;重要说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;96.6% 是&lt;strong&gt;检索召回率&lt;/strong&gt;（R@5），不是 QA 准确率&lt;/li&gt;
&lt;li&gt;100% 的最后 0.6% 是通过检查 3 个特定错误答案达到的（属于&amp;quot;教学生应付考试&amp;quot;）&lt;/li&gt;
&lt;li&gt;诚实的泛化数字是 held-out 450 题的 98.4%&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="52-与其他系统对比"&gt;5.2 与其他系统对比
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;系统&lt;/th&gt;
 &lt;th style="text-align: center"&gt;分数&lt;/th&gt;
 &lt;th style="text-align: center"&gt;指标类型&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;MemPalace (raw)&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;96.6%&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;R@5 召回率&lt;/td&gt;
 &lt;td&gt;零 API，纯本地&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Mastra&lt;/td&gt;
 &lt;td style="text-align: center"&gt;94.87%&lt;/td&gt;
 &lt;td style="text-align: center"&gt;QA 准确率&lt;/td&gt;
 &lt;td&gt;不同指标，不可直接比较&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Supermemory ASMR&lt;/td&gt;
 &lt;td style="text-align: center"&gt;~99%&lt;/td&gt;
 &lt;td style="text-align: center"&gt;QA 准确率&lt;/td&gt;
 &lt;td&gt;实验性，8-12 Agent 集成&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Hindsight&lt;/td&gt;
 &lt;td style="text-align: center"&gt;91.4%&lt;/td&gt;
 &lt;td style="text-align: center"&gt;未验证&lt;/td&gt;
 &lt;td&gt;需要检查方法论&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Mem0&lt;/td&gt;
 &lt;td style="text-align: center"&gt;~66.9%&lt;/td&gt;
 &lt;td style="text-align: center"&gt;QA 准确率（LoCoMo）&lt;/td&gt;
 &lt;td&gt;不同基准&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;关键洞察&lt;/strong&gt;：Mem0 在 ConvoMem 基准上只有 30-45%，而 MemPalace 是 92.9%——&lt;strong&gt;2 倍以上的差距&lt;/strong&gt;。原因是 Mem0 用 LLM 提取记忆，提取错了记忆就丢了；MemPalace 存原始文本，什么都不丢。&lt;/p&gt;
&lt;h3 id="53-社区争议"&gt;5.3 社区争议
&lt;/h3&gt;&lt;p&gt;Hacker News 上对 MemPalace 的基准分数有质疑：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;100% 分数被揭穿&lt;/strong&gt;：GitHub issues #27、#29、#39、#125、#242 有详细的揭穿记录&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LoCoMo 100% 有问题&lt;/strong&gt;：使用 top-k=50 超过了会话数量；诚实的 top-10 无 rerank 是 88.9%&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;名人效应&lt;/strong&gt;：作者是演员 Milla Jovovich，带来了关注度但也带来了质疑&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全警告&lt;/strong&gt;：相关域名被发现传播恶意软件（GitHub issue #326）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;客观来看&lt;/strong&gt;：基准分数有水分，但核心理念（原始文本 &amp;gt; LLM 提取）是成立的。96.6% 的 raw 分数仍然很亮眼——不需要任何 API 就能达到这个水平，说明&amp;quot;简单的事情做对了&amp;quot;这个思路是对的。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="六安装与使用指南"&gt;六、安装与使用指南
&lt;/h2&gt;&lt;h3 id="61-安装"&gt;6.1 安装
&lt;/h3&gt;&lt;p&gt;推荐使用 &lt;code&gt;uv&lt;/code&gt; 安装（Python 包管理器）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 安装 uv（如果没有）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -LsSf https://astral.sh/uv/install.sh | sh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 安装 MemPalace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;uv tool install mempalace
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 或者用 pip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip install mempalace
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装完成后，&lt;code&gt;mempalace&lt;/code&gt; CLI 就可以直接使用了。&lt;/p&gt;
&lt;h3 id="62-初始化与挖掘"&gt;6.2 初始化与挖掘
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 初始化项目记忆（交互式，会自动检测实体）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mempalace init ~/projects/myapp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 非交互式初始化（适合脚本）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mempalace init --yes ~/projects/myapp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 挖掘项目文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mempalace mine ~/projects/myapp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 挖掘 Claude Code 会话历史&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mempalace mine ~/.claude/projects/ --mode convos
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 挖掘时指定 Wing（按项目分组）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mempalace mine ~/.claude/projects/myapp --mode convos --wing myapp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="63-搜索模式"&gt;6.3 搜索模式
&lt;/h3&gt;&lt;p&gt;MemPalace 提供三种搜索模式，按需选择：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;模式&lt;/th&gt;
 &lt;th&gt;命令&lt;/th&gt;
 &lt;th&gt;特点&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Raw（默认）&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;mempalace search &amp;quot;查询内容&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;纯向量语义搜索，零 API，96.6% R@5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Hybrid&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;mempalace search --mode hybrid &amp;quot;查询内容&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;BM25 + 向量混合搜索，98.4% R@5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Hybrid + Rerank&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;mempalace search --mode hybrid --llm-rerank &amp;quot;查询内容&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;混合搜索 + LLM 重排，≥99% R@5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 基础语义搜索&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mempalace search &lt;span style="color:#e6db74"&gt;&amp;#34;为什么选择 GraphQL 而不是 REST&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 混合搜索（推荐，效果最好）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mempalace search --mode hybrid &lt;span style="color:#e6db74"&gt;&amp;#34;OAuth 迁移遇到的问题&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 限定 Wing 范围搜索&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mempalace search --wing myapp &lt;span style="color:#e6db74"&gt;&amp;#34;认证方案设计&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 限定 Room 范围搜索&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mempalace search --wing myapp --room auth-migration &lt;span style="color:#e6db74"&gt;&amp;#34;token 刷新逻辑&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="64-配置-claude-code-hook"&gt;6.4 配置 Claude Code Hook
&lt;/h3&gt;&lt;p&gt;在项目的 &lt;code&gt;.claude/settings.local.json&lt;/code&gt; 中添加 Hook，实现自动保存：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;hooks&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;Stop&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;matcher&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;hooks&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;mempalace-hook-stop&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;PreCompact&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;matcher&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;hooks&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;mempalace-hook-precompact&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stop Hook&lt;/strong&gt;：每 15 条用户消息自动触发，保存关键内容&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PreCompact Hook&lt;/strong&gt;：上下文压缩前紧急保存，防止记忆丢失&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="65-唤醒上下文"&gt;6.5 唤醒上下文
&lt;/h3&gt;&lt;p&gt;在新会话开始前，用 &lt;code&gt;wake-up&lt;/code&gt; 注入历史记忆：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 自动注入相关历史上下文&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mempalace wake-up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行后，Agent 会自动获得最近的项目记忆，不再&amp;quot;失忆&amp;quot;。&lt;/p&gt;
&lt;h3 id="66-知识图谱操作"&gt;6.6 知识图谱操作
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 查看知识图谱统计&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mempalace kg stats
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 通过 Python API 操作&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python3 -c &lt;span style="color:#e6db74"&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;from mempalace.knowledge_graph import KnowledgeGraph
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;kg = KnowledgeGraph()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;kg.add_triple(&amp;#39;Kai&amp;#39;, &amp;#39;works_on&amp;#39;, &amp;#39;Orion&amp;#39;, valid_from=&amp;#39;2025-06-01&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;print(kg.query_entity(&amp;#39;Kai&amp;#39;))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="七实际应用场景"&gt;七、实际应用场景
&lt;/h2&gt;&lt;h3 id="71-代码开发跨会话的项目记忆"&gt;7.1 代码开发：跨会话的项目记忆
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;：Agent 可以回忆起三个月前讨论的技术选型理由、考虑过的替代方案、以及最终决策的上下文。&lt;/p&gt;
&lt;h3 id="72-知识管理个人知识图谱"&gt;7.2 知识管理：个人知识图谱
&lt;/h3&gt;&lt;p&gt;用知识图谱记录学到的知识和关系，支持时间旅行查询——&amp;ldquo;这个知识是怎么积累的&amp;rdquo;。&lt;/p&gt;
&lt;h3 id="73-团队协作共享记忆库"&gt;7.3 团队协作：共享记忆库
&lt;/h3&gt;&lt;p&gt;每个团队成员有自己的 Wing，通过 Tunnel 连接相关工作。搜索时可以跨 Wing 找到所有相关内容。&lt;/p&gt;
&lt;h3 id="74-私有化部署数据不出机器"&gt;7.4 私有化部署：数据不出机器
&lt;/h3&gt;&lt;p&gt;MemPalace 的&lt;strong&gt;本地优先&lt;/strong&gt;设计特别适合私有化场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;所有数据存储在本地 SQLite + ChromaDB&lt;/li&gt;
&lt;li&gt;核心路径零 API 调用&lt;/li&gt;
&lt;li&gt;可选的 LLM rerank 可以用本地模型（Ollama）&lt;/li&gt;
&lt;li&gt;适合对数据安全要求高的企业环境&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="八启发与未来展望"&gt;八、启发与未来展望
&lt;/h2&gt;&lt;h3 id="81-ai-记忆系统的设计思路"&gt;8.1 AI 记忆系统的设计思路
&lt;/h3&gt;&lt;p&gt;MemPalace 给我们最大的启发是：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;不要让 AI 决定记什么。存原始文本，让搜索算法决定找什么。&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这个思路可以应用到很多场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;代码审查记录&lt;/strong&gt;：存完整的 diff 和讨论，而不是摘要&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;需求文档&lt;/strong&gt;：存原始的用户对话，而不是需求分析师的理解&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;故障排查&lt;/strong&gt;：存完整的日志和排查过程，而不是事后总结&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;会议记录&lt;/strong&gt;：存原始的发言内容，而不是会议纪要&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;简单的事情做对了，比复杂的事情做错了更好——这个工程哲学值得每一个系统设计者铭记。&lt;/p&gt;
&lt;h3 id="82-从搜索到记忆组织"&gt;8.2 从搜索到记忆组织
&lt;/h3&gt;&lt;p&gt;MemPalace 的四层结构（Wing → Room → Closet → Drawer）暗示了一个更大的趋势：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;AI 需要的不是更好的搜索，而是更好的记忆组织。&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;当前的 RAG 系统大多是&amp;quot;扁平&amp;quot;的——所有文档扔进一个向量库，搜索时暴力匹配。MemPalace 的分层结构让搜索可以&lt;strong&gt;限定范围&lt;/strong&gt;，就像在图书馆里先找到对应楼层、对应书架，再找具体那本书。&lt;/p&gt;
&lt;p&gt;未来的记忆系统可能会：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自动学习用户的记忆模式（哪些信息关联在一起）&lt;/li&gt;
&lt;li&gt;主动推送相关记忆（&amp;ldquo;你三个月前讨论过类似的问题&amp;rdquo;）&lt;/li&gt;
&lt;li&gt;支持记忆的&amp;quot;遗忘&amp;quot;（过时信息自动降权）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="83-记忆系统的标准化"&gt;8.3 记忆系统的标准化
&lt;/h3&gt;&lt;p&gt;当前 AI 记忆系统处于&amp;quot;战国时代&amp;quot;——每个项目都有自己的架构和接口。未来可能会出现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;统一的记忆协议&lt;/strong&gt;（类似 MCP 之于工具调用）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可互操作的记忆后端&lt;/strong&gt;（MemPalace 的可插拔后端是好的开始）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;记忆交换格式&lt;/strong&gt;（让不同 Agent 共享记忆）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="84-记忆的隐私与所有权"&gt;8.4 记忆的隐私与所有权
&lt;/h3&gt;&lt;p&gt;MemPalace 的本地优先设计提出了一个重要问题：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;AI 的记忆应该归谁所有？&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;用户的对话记忆应该存储在用户控制的地方&lt;/li&gt;
&lt;li&gt;企业内部的知识记忆应该有访问控制&lt;/li&gt;
&lt;li&gt;记忆的&amp;quot;删除权&amp;quot;应该被尊重&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这不仅是技术问题，更是产品伦理问题。当 AI 越来越了解我们，谁拥有这些&amp;quot;了解&amp;quot;，将成为一个绕不开的议题。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;MemPalace GitHub&lt;/strong&gt;: &lt;a class="link" href="https://github.com/MemPalace/mempalace" target="_blank" rel="noopener"
 &gt;https://github.com/MemPalace/mempalace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;官方文档&lt;/strong&gt;: &lt;a class="link" href="https://mempalaceofficial.com" target="_blank" rel="noopener"
 &gt;https://mempalaceofficial.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LongMemEval 基准&lt;/strong&gt;: &lt;a class="link" href="https://github.com/MemPalace/mempalace/tree/main/benchmarks" target="_blank" rel="noopener"
 &gt;https://github.com/MemPalace/mempalace/tree/main/benchmarks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hacker News 讨论&lt;/strong&gt;: &lt;a class="link" href="https://news.ycombinator.com/item?id=43554262" target="_blank" rel="noopener"
 &gt;https://news.ycombinator.com/item?id=43554262&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mem0 Research&lt;/strong&gt;: &lt;a class="link" href="https://mem0.ai/research" target="_blank" rel="noopener"
 &gt;https://mem0.ai/research&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mastra Observational Memory&lt;/strong&gt;: &lt;a class="link" href="https://mastra.ai/research/observational-memory" target="_blank" rel="noopener"
 &gt;https://mastra.ai/research/observational-memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;卢曼卡片笔记法&lt;/strong&gt;: &lt;a class="link" href="https://zettelkasten.de/" target="_blank" rel="noopener"
 &gt;https://zettelkasten.de/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;本文基于 MemPalace v3.3.5（2026-05-09）版本分析。项目仍在活跃开发中，部分细节可能随版本更新而变化。&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>