DEV Community

韩

Posted on

MemPalace的5个隐藏用法,96.6% LongMemEval分数背后没写在README里的能力

过去 30 天,一个开源项目悄悄冲到了 54,325 个 GitHub stars,然后丢出了 AI 记忆领域最让人不舒服的基准测试结果:在 LongMemEval 上达到 96.6% 召回率——用的是原始逐字文本加上 ChromaDB 的默认 embedding,零 LLM 调用、零 API key、零查询成本。所有竞品都用 LLM 来提取"事实"并丢掉其余内容,而 MemPalace 只存储你的原始文字,让语义搜索去做剩下的工作。它还是 MCP 原生,自带四种可插拔存储后端,在开发者的笔记本上完全离线运行。大多数团队搭好向量库就管它叫"记忆系统",而下面这五个隐藏用法,会把 MemPalace 从一个"搜索工具"变成你的 Agent 一直缺失的持久化基础层。

核心数据,已于 2026-06-07 验证:

  • GitHub:54,325 stars,1,800+ Forks,Python 3.9+,MIT 协议
  • 基准测试:LongMemEval 上 96.6% raw R@5(500/500 可复现),450 题留出测试集上 98.4% Hybrid 分数
  • HN 讨论:发布主帖 67 分、17 条评论(编号 47672792,2026-04-07)

为什么这件事在 2026 年很重要

"记忆层"已经成为生产级 AI Agent 上最重的一笔税。每个团队都在用同一套模式:向量库 + 一个定时任务重新总结昨天的日志 + 一个 LLM 在丢弃对话背景的情况下臆造出"用户偏好 PostgreSQL"。MemPalace 直接对底层假设开刀。它的核心论点——由基准测试验证、不是营销话术——是带好 embedding 的逐字存储,跑赢 LLM 抽取的事实,因为信息丢失就发生在 LLM 抽取这一步。完整的演进过程、开发方法论,以及 450 题的留出测试集审计,都写在仓库的 benchmarks/BENCHMARKS.md 里。

结果就是一个你的 Agent 可以在 Docker 容器里跑的记忆系统,通过 MCP 接入 Claude Code,5 行 JSON 就能跑起来——不用每月烧 200 美元做抽取调用。下面这五个隐藏用法,覆盖的是 README 埋在最底部、文档里只一笔带过的能力。


隐藏用法 #1:Hybrid v4 重排序——一个 flag 把 96.6% 拉到 98.4%

大多数人的做法: 跑一次 mempalace mine ~/projects/myapp,再调 mempalace search "why GraphQL",然后上线。他们拿到了 96.6% 的原始分数,就以为那是天花板。

隐藏技巧: MemPalace 有一个四阶段混合检索流水线(Hybrid v4),加上了关键词加权、时间临近加权和偏好模式抽取——在 450 道未见过的题上拿到的留出测试分数是98.4% R@5,整个过程没有 LLM。你不用装任何新东西,只传一个 flag。

# 隐藏用法:一个 CLI flag 把原始 96.6% 拉到留出测试 98.4%
# 来源:mempalace/cli.py + benchmarks/BENCHMARKS.md(留出 450 题)
import subprocess

# 用混合流水线重新 mine(不需要 LLM)
subprocess.run([
    "mempalace", "mine", "~/projects/myapp",
    "--mode", "hybrid_v4",      # 加上关键词 + 时间 + 偏好加权
    "--backend", "chroma",      # 默认;也可以 "sqlite_exact" 做校验
], check=True)

# 留出 450 题:98.4% R@5,$0 / 查询
# 完整 500 题 + LLM rerank:100%(Haiku 约 $0.001 / 次,Sonnet 约 $0.003 / 次)
Enter fullscreen mode Exit fullscreen mode

效果: 在最常被引用的 AI 记忆基准上拿到 1.8 个百分点的召回率提升,CLI 不变、ChromaDB 后端不变。仓库自己的 BENCHMARKS.md 在边界上反常地诚实——他们明确把 100% 的"hybrid + LLM rerank"标成内部数字,因为最后那 0.6% 来自人工审查了 3 道具体的错题(针对测试调优)。无 LLM 路径上,98.4% 才是那个诚实的可泛化数字。

数据来源: 2026-06-07 通过直接调用 GitHub API 核对 MemPalace/mempalace(54,325 stars,pushed 2026-06-06)。基准测试数字与 main 分支 benchmarks/BENCHMARKS.md 交叉核对。


隐藏用法 #2:可插拔后端——不改代码把 ChromaDB 换成 Qdrant 或 pgvector

大多数人的做法: 把 README 里那句"ChromaDB"当成硬依赖。他们 pip install mempalace,然后接受 300 MB 的 embedding 模型占用、进程内的 server,以及没有水平扩展能力的现实。

隐藏技巧: MemPalace 自带一个可插拔后端接口,定义在 mempalace/backends/base.py 里,目前提供四种实现:chroma(默认)、sqlite_exact(本地精确向量校验)、qdrant(REST)、pgvector(Postgres/JSONB)。那两个外部后端的存在,就是为了"在不同底座上跑存储契约,让接口不是被某个供应商偶然塑形出来的"。

# 隐藏用法:换后端不改应用代码
# 来源:mempalace/cli.py + mempalace/backends/base.py

# 本地精确匹配校验后端(适合测试 + CI)
mempalace mine ~/projects/myapp --backend sqlite_exact

# 用 Qdrant 横向扩展
export MEMPALACE_QDRANT_URL=http://localhost:6333
mempalace mine ~/projects/myapp --backend qdrant

# 生产用 Postgres + pgvector
mempalace mine ~/projects/myapp --backend pgvector
# 从环境变量读 postgresql://localhost:5432/...
Enter fullscreen mode Exit fullscreen mode

效果: 同一个 palace、同一个搜索索引、同一个 MCP server,可以跑在四种完全不同的存储底座上。Qdrant 和 pgvector 是可选启用的(运行时通过环境变量接入),但它们就装在默认安装里——没有"企业版"包。对一个跑多 Agent 集群的团队来说,这意味着开发机用 ChromaDB、CI 用 sqlite_exact(确定性)、Staging 用 Qdrant、生产用 pgvector——应用代码完全一样。

数据来源: mempalace/cli.py(default 分支,定义 _EXPLICIT_BACKEND_ENV 和四个后端名的位置)。README 的"Storage backends"小节。2026-06-07 通过 GitHub Contents API 读取 mempalace/backends/ 目录验证。


隐藏用法 #3:Claude Code 自动保存 Hook——撑过上下文压缩

大多数人的做法: 信任 Agent 自带的上下文窗口,认定"记忆"就是模型能在 prompt 里看到的那些东西,然后每开一个新会话都从头把项目再讲一遍。

隐藏技巧: MemPalace 自带两个 Claude Code hook(Stop 之前 + 压缩之前),在上下文窗口被截断之前,把对话逐字存进你的 palace。README 里直接指向那份 30 天保留设置的官方清单,而仓库 issue #1388 正在喊这个生态里最响的警告:"Claude Code 会话如果不挂自动保存 hook,30 天就过期。"

// 隐藏用法:挂上两个 Claude Code hook,让会话撑过压缩
// 来源:mempalaceofficial.com/guide/hooks + 仓库文档
{
  "hooks": {
    "Stop": [{
      "matcher": "",
      "hooks": [{
        "type": "command",
        "command": "mempalace sweep ~/.claude/projects/ --mode convos"
      }]
    }],
    "PreCompact": [{
      "matcher": "",
      "hooks": [{
        "type": "command",
        "command": "mempalace sweep ~/.claude/projects/ --mode convos --wing current"
      }]
    }]
  }
}
Enter fullscreen mode Exit fullscreen mode

效果: 在 Claude Code 压缩上下文窗口或回收会话之前,你的会话转录就已经被归档为每个用户/助手消息一个逐字抽屉——幂等、可断点续传——落盘。配套命令 mempalace mine ~/.claude/projects/ --mode convos 是一次性回填命令,对存量 JSONL 转录文件同样有效——哪怕你今天才听说 hook,也照样能把过去 30 天的内容捞回来。想要在文件级 chunk 之上再做按消息级别的检索,周期跑 mempalace sweep <transcript-dir> 即可。

数据来源: README 的"Auto-save hooks"小节,外链到 mempalaceofficial.com/guide/hooks。GitHub Discussion #1388("Claude Code sessions expire in 30 days without auto-save hooks wired"),2026-06-07 在线核对。


隐藏用法 #4:stdio 上的 MCP Server——五行 JSON,所有 Agent 通吃

大多数人的做法: 单独搭一个向量库,在 Agent 的 prompt 里写一个自定义的检索函数,把索引名硬编码进去,语料一改 Agent 就得重发一次。

隐藏技巧: MemPalace 自带一个完整的 MCP server,把 palace 操作、跨 wing 导航、抽屉管理、Agent 日记全部暴露成可发现的工具。官方容器镜像走 stdio 协议,所以 Claude Code、Codex CLI、Cursor、Gemini CLI 以及任何兼容 MCP 的客户端,只要五行配置就能接上。agents 概念尤其干净:你舰队里的每个专家 Agent 都有自己独立的 wing 和日记,运行时通过 mempalace_list_agents 发现——不污染你的系统 prompt。

// 隐藏用法:用官方容器跑 MCP server
// 来源:README  "Docker" 小节
{
  "mcpServers": {
    "mempalace": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-v", "mempalace-data:/data", "mempalace"]
    }
  }
}
// 想用 GPU 加速 embedding,换成 GPU 镜像:
// docker build -f Dockerfile.gpu -t mempalace:gpu .
// 并在 run 命令里加 "--gpus all"
Enter fullscreen mode Exit fullscreen mode

效果: 你舰队里的每一个 Agent 都拿到同一份记忆底座、同一套 embedding、同一组可查询工具。docker compose run --rm mcp 这个变体在 docker-compose.yml 里写好了,偏好 Compose 而不是裸 docker run 的团队可以直接用。官方镜像自带 extractspellcheck 额外包;想要 PDF/DOCX/PPTX 抽取功能,编译时用 docker build --build-arg EXTRAS="extract,spellcheck" -t mempalace . 定制即可。

数据来源: README 的"Docker"和"MCP server"小节,加上 mempalaceofficial.com/reference/mcp-tools 上的 MCP 工具参考。96.6% 原始分数的 100% 可复现性(无 API key)让"完全离线跑 MCP"这件事站得住脚——你不需要云账号就能把 server 跑起来。


隐藏用法 #5:三种摄取模式——代码、对话、二进制 Office 文档

大多数人的做法: 以为"记忆"就是"把我的代码做 embedding"。他们跑 mempalace mine ~/projects/myapp,拿到代码级召回,然后停手。

隐藏技巧: CLI 提供三种一等公民摄取模式,共用同一个 palace、同一个搜索索引、同一个检索层——但用的是完全不同的解析器和切块策略。完整功能面如下:

# 隐藏用法:三种摄取模式,一个搜索索引
# 来源:mempalace/cli.py 模块 docstring
mempalace mine ~/projects/my_app                              # 代码、文档、笔记(默认)
mempalace mine ~/.claude/projects/-Users-you-Projects-my_app \
            --mode convos --wing my_app                       # Claude/ChatGPT/Slack 导出
mempalace mine ~/Documents/quarterly-reports \
            --mode extract --wing finance                     # PDF/DOCX/PPTX/XLSX/RTF/EPUB
                                                              # 需要:pip install "mempalace[extract]"

# 三种内容用同一条查询去搜
mempalace search "pricing discussion" --wing my_app --room costs
Enter fullscreen mode Exit fullscreen mode

效果: 一座 palace 装下你的源代码、Agent 对话历史、二进制 Office 文档。--mode convos 标志认得 Claude Code、Claude.ai、ChatGPT 和 Slack 导出格式;--mode extract 标志在装了 [extract] 额外包后能处理 PDF、DOCX、PPTX、XLSX、RTF 和 EPUB。--wing 参数限定查询范围,比如"pricing discussion"可以只搜 finance wing 的季报,不会被代码注释里的同名词误命中。mempalace splitmempalace init 命令则负责 mine 之前的脏活——拆巨大的拼接文件、按目录结构识别 room。

数据来源: 2026-06-07 直接读 mempalace/cli.py 模块 docstring 验证。格式覆盖在 docs/format-coverage.md 里有说明,extract 额外包的依赖列表在 pyproject.toml 里。


总结:五个隐藏用法

  1. Hybrid v4 重排序——一个 CLI flag 把原始 96.6% 拉到留出测试 98.4%,全程无 LLM
  2. 可插拔后端——一个环境变量把 ChromaDB 换成 Qdrant 或 pgvector,应用代码不变
  3. Claude Code 自动保存 hook——挂两个 PreCompact/Stop hook,让 30 天会话保留真正生效
  4. stdio 上的 MCP server——五行 JSON 把官方容器变成所有兼容 MCP 的 Agent 的记忆后端
  5. 三种摄取模式——代码、对话、二进制 Office 文档共享同一座 palace、同一个搜索索引、同一个检索层

内部链接

轮到你了

你从 Agent 会话里捞回来最久的记忆是什么——一个设计决策、一段定价逻辑、一条你发誓再也不会用到的正则?写在评论里。如果你在自己机器上挂了 Claude Code hook,把那条恢复命令和它救回来的最有用的会话贴出来,我会把最好的几条整理成续篇。

Top comments (0)