LLM_知识库_02_记忆宫殿
1 引言
看 basic-memory 的时候就想:这个也挺好用的。但大模型应用到现在,似乎不应该没有特别高星的数据存储类开源项目。难道正解还是 RAG?刚好就看到了 MemPalace。
MemPalace 也是一个给 AI 提供外挂记忆的本地知识库系统。
https://github.com/milla-jovovich/mempalace 目前已经有 37.9K Star
2 与其它工具对比
MemPalace 和 basic-memory 属于同一类工具,核心目的都是把 Agent 的“大脑(推理模型)”和“记忆(上下文)”解耦,且都通过 MCP 协议接入,让 Cursor、Claude 等不同工具能共享同一份记忆。
2.1 优点
- 直接存原文(Verbatim Storage):它强制保留对话和文档的原始上下文,不依赖 AI 去盲目总结压缩。
- 建立“记忆宫殿”层级:引入翼(Wing,大型独立区域,配楼)、厅(Hall)、房(Room)三级结构。自带归类关系,大幅提升了查询准确度。
- 极低的上下文占用:平时唤醒 AI 时,只塞入约 170 Token 的核心事实。需要具体细节时,模型会自己调用 MCP 工具去对应的“房间”里找。
- 完全本地化:底层用 ChromaDB 跑在本地(类似SQLite,以本地文件存储,不需要另启服务),无云端调用。提供一键挖掘功能,能直接把项目代码或历史对话全量导入。
2.2 与 basic-memory 的路线差异
- basic-memory 偏向“主动笔记法”:强调克制存储。依赖 Agent 整理出结构化笔记并定期反思合并,像一个帮你梳理读书笔记的助手。
- MemPalace 偏向“全量外脑”:主张把聊天记录和历史文件全存下来。它不完全信任大模型压缩记忆的能力,把优化重点放在了结构化目录和检索上。它甚至实验性地开发了一种叫 AAAK 的机器简写方言,用来压低长文本的 Token 消耗。
3 原理
MemPalace 把“记忆宫殿”的概念用在了 AI 记忆上。用户的对话和文档被组织成不同层级,通过结构化的房间地图导航搜索,而不是平铺式的索引。
它内置了带有时间有效期的实体关系图谱(类似 Zep 的 Graphiti)。基于本地 SQLite 构建,免费且不依赖云端。在接口方面,它向 AI 提供 19 个 MCP 工具,涵盖状态总览、知识库读写、图谱导航以及 Agent 专属日记读写等操作。
3.1 概念
- 翼(Wing):代表一个人或一个项目。
- 房(Room):翼内的特定主题。例如项目翼下的“授权”、“计费”等房间。
- 柜(Closet):指向原始内容的摘要(未来计划引入 AAAK 语言深度压缩)。
- 抽屉(Drawer):存放原始逐字文件(原话、原文档)的地方。
- 厅(Hall):连接同一翼内相关房间的分类走廊。代表记忆的类型(如事实、事件、发现、偏好、建议)。
- 隧道(Tunnel):连接不同翼的同一个房间。当不同项目都在讨论“授权”时,隧道会自动交叉引用。
3.2 挖掘模式
提供三种挖掘(Mine)模式处理历史数据:
- 项目(projects):处理代码和官方文档。
- 对话(convos):处理导出的聊天记录(如 Claude、ChatGPT、Slack)。
- 通用(general):自动将文本分类提取为决策、偏好、里程碑和问题。
3.3 存储在哪
具体对话和内容明文存储在本地的 ChromaDB
中;实体知识图谱关系存放在本地 SQLite 里。配置文件和数据默认保存在
~/.mempalace,独立的 Agent 配置保存在
~/.mempalace/agents/。
它本质上是将本地文件抽取、切分后,向 ChromaDB 向量数据库做的单向同步。
3.4 什么时候存
主要通过 AI 的 MCP 工具在需要时写入。对于使用 Claude Code 等环境,还支持配置 Hook 自动保存: - Save Hook:每 15 条消息触发一次结构化存档(包含主题、决策、代码变更)。 - PreCompact Hook:在上下文窗口被压缩前触发紧急保存。
4 使用方法
4.1 安装底层工具
1 | pip install mempalace |
4.2 设置 MCP
根据vscode版本修改 settings.json 1
2
3
4
5
6
7
8
9
10"github.copilot.chat.mcpServers": {
"mempalace": {
"command": "python",
"args": [
"-m",
"mempalace.mcp_server"
]
}
}1
2
3
4
5
6
7
8
9
10
11
12{
"servers": {
"mempalace": {
"command": "python",
"args": [
"-m",
"mempalace.mcp_server"
]
}
}
}
如果用 venv 安装,将 command 替换成 venv 中的 python
路径,例如:"$HOME/.venvs/mempalace/bin/python"。
设置后重启 VSCode 窗口(Ctrl + Shift + P 执行 Developer: Reload Window),Copilot 才能将 MemPalace 的接口注册到工具列表中。 注意:Copilot 需要新开一个对话,才能把新的 MCP 工具用起来。
4.3 使用
通过 MemPalace 的 MCP 工具进行交互。例如:
直接在对话中要求 ‘AI 搜索关于“venv”的记录’ (如果配置了多个记忆工具,建议在提问时指明使用 MemPalace 搜索)。
5 问题和解答
5.1 问题一
问:在其它Agent,如 Claude Code 或者 Copilot
里面,可以使用它吗?又在何时触发记忆和检索? 答:可以使用。在这类支持
MCP 的工具里配置好后,AI 会在判断需要背景知识时主动调用
mempalace_search 来检索记忆。如果是端侧工具(如 Claude
Code),还能配置触发器(Hook),实现每 15
轮对话或上下文即将压缩前,自动提取并保存新记忆。
5.2 问题二
问:它的主要存储在 ChromaDB 和 SQLite 里,相对其它存储明文内容来说,对普通用户它是不可见的?在 Agent 里和它的对话并没有明文存储? 答:其实它存的就是明文(Raw verbatim storage)。MemPalace 坚持原汁原味地把你的对话和文档直接丢进本地的 ChromaDB 向量数据库里。只不过这些明文数据打包存放在数据库文件中,不像普通 Markdown 笔记那样可以直接用文本编辑器打开预览。可以定期把文本从数据库里导出成明文备份。
5.3 问题三
问:如果一个目录已经挖掘(mine)过,后续修改文件或追加对话,再次 mine
会增量更新吗? 答:从当前源码看,取决于挖掘模式,且处理机制并不完美。 -
对话模式(--mode convos)完全不支持更新。只要文件曾被处理过,引擎会直接跳过。新增对话必须存为独立的新文件才能被录入。
- 项目模式(普通
mine)能根据文件的修改时间差进行覆盖更新,但会产生残留数据。它依靠覆写新的文本块(Chunk)来更新;但代码里没有删除逻辑。如果你删减了内容导致文本块变少,或者改动很大导致文件被系统重新分配到其它“房间(Room)”,原有的旧切片就会作为孤立数据永远残留在库里。遇到大规模重构,建议设法清理旧条目后再重新录入。
5.4 问题四
问:处理目录为什么要分 init 和 mine
两个命令? 答: - init
负责生成图纸:它只快速扫描你的项目目录结构,猜测应该设立哪几个“房间”(比如
src、docs、api),并生成一个默认的 JSON
配置文件。这一步不做任何入库操作。 - mine
负责实际搬砖:它根据上一步定义好的配置文件,有目的地去读取文件、做切片并分类入库。
拆分是为了让你有干预的机会。与其让它全自动瞎建类别,不如让你在
init 之后看一眼配置,调整一下分房逻辑,然后再执行
mine 开始干活。
6 使用感受
MemPalace 胜在数据存储的逻辑分层设计,现有数据的挖掘功能很实用。从星标来看,MemPalace 受到了更多认可。使用上这些工具都是本地优先,都通过 CLI 加 MCP 的方式接入。另外,MemPalace 已经具备了不错的产品感。特别是用它管理不同项目,各自划定不同的 Wing,更稳。
对于习惯记笔记的人,可以用它挖掘过去的数据生成专属知识库。不爱整理的人,也能直接把以前的聊天记录一键灌入,它自己就能把对话积累全部存下来。
