本地优先的AI记忆:逐字存储,召回率96.6%,零API调用

lxiol

原文链接:https://mp.weixin.qq.com/s/mq67_EfpCKU2b03vpIa67g

MemPalace 把对话历史原样存成文本,不总结不改写。人和项目分成不同“区”,话题是“房间”,内容是“抽屉”,搜索可以限定范围。默认用 ChromaDB,后端可换。LongMemEval 上原始语义搜索召回率 96.6%,全程不调任何 API。

先提醒一件事:MemPalace 只有一个官方网站,就是 mempalaceofficial.com。PyPI 包和这个 GitHub 仓库也是真的。其他任何域名(包括 .tech、.net 或者其他 .com 变种)都是冒充的,可能夹带恶意软件。详情见 docs/HISTORY.md

另外,如果你在用 Claude Code,它的会话 30 天就过期了,不接自动保存钩子的话会丢数据。下文会讲怎么搞定。

这东西是干嘛的

MemPalace 把你跟 AI 的对话历史存成原始文本,然后用语义搜索把它翻出来。它不总结、不提炼、不改写。

索引是有结构的——人和项目变成不同的,话题变成房间,原始内容放在抽屉里。搜索的时候可以限定范围,而不是在一整个乱炖的语料库里瞎翻。

检索层是可插拔的。默认用 ChromaDB,接口定义在 mempalace/backends/base.py。换个后端不用动其他代码。

除非你主动同意,否则任何数据都不会离开你的机器。

架构、概念、挖掘流程的完整解释:mempalaceofficial.com/concepts/the-palace

安装

MemPalace 提供了一个 CLI。建议装在一个隔离的环境里——避免在 Debian/Ubuntu/Homebrew 的 Python 上遇到 PEP 668 错误,也防止依赖(chromadb、numpy、grpcio 等)跟全局包冲突。

用 uv(推荐)

1
2
`uv tool install mempalace
mempalace init ~/projects/myapp`

uv tool install 会把 mempalace CLI 放在一个隔离环境里,并且加到你的 PATH 上。

用 pipx(效果一样):

1
`pipx install mempalace`

用普通 pip(只能在虚拟环境里,并且你明确需要 import mempalace):

1
2
`python -m venv .venv && source .venv/bin/activate
pip install mempalace`

Docker

也提供了一个容器镜像,用来跑 MCP 服务器或者 CLI,不用本地装 Python。所有数据存在 /data 下(palace、配置、缓存的 embedding 模型),挂个卷就行。

1
2
3
4
5
6
7
8
9
`# 构建 CPU 镜像(打包了 extract 和 spellcheck 扩展)
docker build -t mempalace .

# 跑 MCP 服务器(stdio),注意 -i 参数(JSON-RPC 需要 stdin)
docker run -i --rm -v mempalace-data:/data mempalace

# 跑任意 CLI 命令(需要把宿主机目录挂进去)
docker run --rm -v mempalace-data:/data -v /path/to/project:/work mempalace mine /work
docker run --rm -v mempalace-data:/data mempalace search "为什么用 GraphQL"`

把它接到 MCP 客户端(比如 Claude Code)里当 stdio 服务器:

1
2
3
4
5
6
7
8
`{
  "mcpServers": {
    "mempalace": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-v", "mempalace-data:/data", "mempalace"]
    }
  }
}`

docker compose run --rm mcp 也能用(见 docker-compose.yml)。想要 CUDA 加速的 embedding,自己构建 GPU 版:docker build -f Dockerfile.gpu -t mempalace:gpu .,运行时加 --gpus all。构建时可以自定义打包哪些扩展:docker build --build-arg EXTRAS="extract,spellcheck" -t mempalace .

存储后端

默认后端是 ChromaDB。可插拔后端的预览版里,MemPalace 还提供了 sqlite_exact(用来做本地精确向量校验),以及两个可选的外部服务后端——qdrant(REST)和 pgvector(Postgres)。这两个外部后端分别跑在不同的存储基底上(一个 REST/dict 存储,一个 SQL/JSONB 存储),所以它不会无意中被某一个厂商的形状给绑死。

1
2
3
4
5
6
7
8
9
10
11
12
`# 本地无服务后端
mempalace mine ~/projects/myapp --backend sqlite_exact

# Qdrant 后端,默认连 http://localhost:6333
MEMPALACE_QDRANT_URL=http://localhost:6333 \
  mempalace mine ~/projects/myapp --backend qdrant

# Postgres + pgvector 后端,默认连 postgresql://localhost:5432/mempalace
# 需要装可选驱动:pip install mempalace[pgvector]
# 服务器上要有 vector 扩展
MEMPALACE_PGVECTOR_DSN=postgresql://localhost:5432/mempalace \
  mempalace mine ~/projects/myapp --backend pgvector`

Qdrant 还可以配 MEMPALACE_QDRANT_API_KEYMEMPALACE_QDRANT_NAMESPACEMEMPALACE_QDRANT_TIMEOUT。pgvector 可以配 MEMPALACE_PGVECTOR_NAMESPACE。两个外部后端都用 namespace 做租户隔离(通过 supports_namespace_isolation 能力标识),并且会写一个本地标记文件(qdrant_backend.json / pgvector_backend.json),防止你意外用错的服务器打开 palace。

如果 MEMPALACE_QDRANT_URL 或 MEMPALACE_PGVECTOR_DSN 指向的不是你自己本地或信任的自托管服务,MemPalace 会把原文抽屉里的文本和元数据发过去存。这是你主动选择的后端,不是默认行为。

快速上手

1
2
3
4
5
6
7
8
9
`# 往 palace 里挖掘内容
mempalace mine ~/projects/myapp                    # 项目文件
mempalace mine ~/.claude/projects/ --mode convos   # Claude Code 会话(可以用 --wing 按项目划分范围)

# 搜索
mempalace search "为什么当时换成了 GraphQL"

# 为新会话加载上下文
mempalace wake-up`

针对 Claude Code、Gemini CLI、MCP 兼容工具以及本地模型的具体用法,见 mempalaceofficial.com/guide/getting-started

基准测试

下面所有数据都可以在这个仓库里复现,命令在 benchmarks/BENCHMARKS.md。每个问题的完整结果文件也提交在 benchmarks/results_* 下。

LongMemEval —— 检索召回率(R@5,500 个问题)

模式

R@5

是否需要 LLM

原始(纯语义搜索,无启发式,无 LLM)
96.6%
不需要

混合 v4,留出 450 问(在 50 问上调过参,训练时没见过)
98.4%
不需要

混合 v4 + LLM 重排(完整 500 问)

≥99%

任意有能力的模型

原始的 96.6% 不需要任何 API key、不需要云、全阶段不用 LLM。混合管道加了关键词提权、时序邻近提权、偏好模式提取。留出的 98.4% 是诚实的泛化数字。

重排管道用 LLM reader 从检索到的 top-20 会话里挑出最佳候选。任何有基本能力的模型都行——我们用 Claude Haiku、Claude Sonnet 和 Ollama Cloud 上的 minimax-m2.7(不依赖 Anthropic)都复现过。原始和重排之间的差距是模型无关的。我们没把“100%”挂在标题上,因为最后那 0.6% 是通过盯着具体错题改出来的——benchmarks/BENCHMARKS.md 里明确说了那是在“教模型答题”。

其他基准测试(完整结果见 benchmarks/BENCHMARKS.md

基准

指标

分数

备注

LoCoMo(会话级,top-10,无重排)

R@10

60.3%

1,986 个问题

LoCoMo(混合 v5,top-10,无重排)

R@10

88.9%

同一数据集

ConvoMem(所有类别,250 项)

平均召回

92.9%

每类 50 项

MemBench(ACL 2025,8,500 项)

R@5

80.3%

全类别

我们没有刻意跟 Mem0、Mastra、Hindsight、Supermemory 或 Zep 做并列对比。那些项目在不同数据集上发不同指标,把检索召回率和端到端问答准确率放一起比,是不诚实的。他们自己的数字请去各自的研究页面看。

复现所有结果

1
2
3
4
5
`git clone https://github.com/MemPalace/mempalace.git
cd mempalace
uv sync --extra dev   # 或者 pip install -e ".[dev]"
# 看 benchmarks/README.md 里数据集下载命令
uv run python benchmarks/longmemeval_bench.py /path/to/longmemeval_s_cleaned.json`

知识图谱

MemPalace 自带一个时间维度的实体关系图——带有效窗口。支持添加、查询、失效、时间线回溯,基于本地 SQLite。用法和工具参考:mempalaceofficial.com/concepts/knowledge-graph

MCP 服务器

29 个 MCP 工具,覆盖 palace 读写、知识图谱操作、跨区导航、抽屉管理、代理日记。安装和完整工具列表:mempalaceofficial.com/reference/mcp-tools

代理

每个专门代理在 palace 里拥有自己的区和日记。运行时通过 mempalace_list_agents 可发现——不会在你的系统提示词里塞一堆废话。详情:mempalaceofficial.com/concepts/agents

自动保存钩子(Claude Code)

MemPalace 提供两个 Claude Code 钩子,一个定期保存,一个在上下文压缩前保存。参考:mempalaceofficial.com/guide/hooks

如果你时间紧,直接从 Claude Code 会话保留设置检查清单 开始:把钩子接上,备份现有的 JSONL 记录,然后用 mempalace mine ~/.claude/projects/ --mode convos 回填它们。

如果想在钩子产生的文件级 chunk 之上再做每条消息的召回,可以定期跑 mempalace sweep <transcript-dir>——它会为每条 user/assistant 消息存一个独立的原始抽屉,幂等且可恢复。

系统要求

  • Python 3.9+
  • 一个向量存储后端(默认 ChromaDB)
  • 约 300 MB 磁盘空间给 embedding 模型。首次运行时 python -m mempalace.onboarding 会提供两个选择:embeddinggemma-300m(多语言,100+ 语言,推荐)或 all-MiniLM-L6-v2(仅英语,~30 MB)。详细说明和迁移指南见 mempalace/embedding.py 的 docstring。
  • 核心 benchmark 路径不需要任何 API key。

文档

  • 入门指南:mempalaceofficial.com/guide/getting-started
  • CLI 参考:mempalaceofficial.com/reference/cli
  • Python API:mempalaceofficial.com/reference/python-api
  • 完整 benchmark 方法论:benchmarks/BENCHMARKS.md
  • 发布说明:CHANGELOG.md
  • 更正和公开声明:docs/HISTORY.md

本文转载自微信公众号,如有侵权请联系删除。

  • 标题: 本地优先的AI记忆:逐字存储,召回率96.6%,零API调用
  • 作者: lxiol
  • 创建于 : 2026-06-20 01:24:37
  • 更新于 : 2026-06-20 01:24:37
  • 链接: https://blog.lxiol.cn/2026/06/20/本地优先的AI记忆逐字存储召回率966零API调用/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。