📌 项目地址:MemPalace/mempalace | ⭐ 53,028 颗星 | 🔧 Python | 📜 MIT
为什么需要逐字存储
我和同事在 Slack 里讨论过三次“gRPC 超时配置”,每次场景不同。第一次是客户端调优,第二次是服务端兜底,第三次是双向流。三个月后我需要查第一次的具体参数值,AI 助手只给了我一段概括——“之前讨论过超时,建议根据网络状况设置……”。参数版本、代码行号、边界条件全丢了。
问题出在多数助手的记忆机制:把你的对话交给大模型生成摘要,检索时再让大模型“回想”。摘要是有损压缩,重建时有幻觉风险。你得到的是“听起来合理”的回答,而不是当时实际写下的内容。
MemPalace 的做法很简单:原文怎么说的,就怎么存。不总结、不提取、不改写。搜索时返回原始段落,而不是二次加工物。README 原话:“It does not summarize, extract, or paraphrase。”
96.6% 召回率是怎么来的
LongMemEval 测试的是“三个月前的旧内容是否能被准确找回”。MemPalace 在这个基准上 R@5 达到 96.6%(五次搜索里前五个结果包含正确答案的概率)。这个指标直接映射到你的真实需求——回溯几个月前的技术讨论。
我试了:把过去三个月的聊天记录(CSV 格式)导入 MemPalace,然后搜一个冷门参数名 grpc-keepalive-timeout。第一条结果就是我要的完整对话,包含当时写的代码片段。不需要推理,不需要回忆“我当时大概怎么描述的”,原文就在那。
全文检索和语义向量检索是同时做的。索引里同时存了原文的词频信息和向量嵌入,搜索时两者结合。这比纯向量检索更能处理精确的版本号或配置项。
Wing/Room/Drawer 不是花架子
当对话超过几十条,全局搜索就是噪音。MemPalace 用三层命名空间来组织:
- Wing:一个人或一个项目(比如
project-alpha) - Room:Wing 下的主题(比如
grpc-config) - Drawer:逐字对话原文
搜索时可以指定 Wing。比如你同时参与 A 项目和 B 项目,都聊过“超时配置”。不指定 Wing,两条混着返回;指定 --wing project-alpha,结果只来自该项目。实际最花时间的是前期分类决策——每条对话归到哪个 Wing。搜的时候很省事,一次 search --wing project-alpha --room grpc-config 就筛掉 90% 无关结果。
这个结构不是玩具。文档站 mempalaceofficial.com/concepts/the-palace 有完整说明,如果你想把现有聊天记录批量导入,也可以按 wing/room 结构组织数据文件。
零 API 调用的合规价值
嵌入模型和检索全部在本地跑。如果公司有“数据不能上传”的合规要求,MemPalace 直接满足。团队讨论敏感参数(比如数据库连接串、内部 API key)时,不需要担心数据被送去第三方 API。
检索后端可替换。接口定义在 mempalace/backends/base.py,默认是 ChromaDB。想换成其他向量数据库,自己实现那个接口就行,不用改其他代码。
安装后我马上做的几件事
安装推荐用 uv tool install mempalace(或 pipx install mempalace),这样 CLI 在隔离环境里,不污染系统 Python。然后初始化:
mempalace init ~/projects/myapp
这个命令会在目录下生成 .mempalace 文件夹和空索引。整个过程不联网、不注册、不需要 API key。
如果想在 Docker 里跑 MCP 服务器,先构建镜像:
docker build -t mempalace .
然后挂载数据卷运行(持久化在 /data):
docker run -v /my/data:/data mempalace mcp
可选功能如 extract(文本抽取)和 spellcheck 需要安装时加 extras:uv tool install mempalace --extras extract,spellcheck。
两个必须知道的坑
第一个:Claude Code 会话 30 天过期。
README 明确写了:“Claude Code sessions expire in 30 days without auto-save hooks wired。”如果你用 Claude Code 写代码、讨论架构,30 天后会话会被清除。MemPalace 提供自动保存 hooks 来解决,配置步骤在 mempalaceofficial.com/guide/claude-code-retention.html。我现在每次启动 Claude Code 前先跑 mempalace serve,保证对话被实时存档。不配这个 hooks,MemPalace 的“逐字存储”就没意义——会话都过期了,存什么?
第二个:有冒充网站。
MemPalace 只有三个官方来源:
- GitHub 仓库
MemPalace/mempalace - PyPI 包
mempalace - 文档站
mempalaceofficial.com
其他域名(.tech、.net、其他 .com 变体)都是假的,可能带恶意软件。安装前务必确认 URL。详情和事发时间线在 docs/HISTORY.md。
谁适合装
- 你手里有超过 50 条需要回看的技术讨论(少于这个数,AI 自带的历史可能够用)
- 数据不能上传,合规要求严格
- 愿意花一小时分类对话 Wing/Room/Drawer
前两条如果是否,没必要装。第三条可以短期克服——命名体系不难,但第一天的确需要做决定:“这条对话该放哪个 Wing?” 我第二天就习惯了,只执行 search 命令。
三周用下来,MemPalace 让我对“AI 记忆”的预期从“大概记得”变成了“原文在这”。值得试。