深度解析 claude-mem:AI 编程助手的持久记忆引擎
claude-mem 是目前 Claude Code 生态中最受关注的插件之一,GitHub 已积累超过 63.8k ⭐。它解决了 AI 编程助手最痛的痛点:每次重启会话,AI 就「失忆」了。本文从架构设计和工程实践两个维度深度解析它的工作原理。
项目地址:thedotmack/claude-mem[1] · 文档:docs.claude-mem.ai[2] · 协议:AGPL-3.0
1. 问题背景:AI 会话的「失忆症」
使用过 Claude Code 的开发者都遇到过这个场景:
-
上午花了两小时和 AI 一起梳理清楚了项目架构 -
下午重新打开会话,AI 对之前的结论一无所知 -
你不得不再次解释:「我们用的是 PostgreSQL,不是 MySQL」「这个模块已经重构过了」……
这不是 Claude 的问题,而是 大模型上下文窗口的天然局限:会话结束,上下文消失。
claude-mem 的核心思路是:不依赖上下文窗口,用外部存储来模拟人类的长期记忆。
2. 整体架构:五层协作
┌─────────────────────────────────────────────┐│ Claude Code 会话 │├─────────────────────────────────────────────┤│ 5 个生命周期 Hooks(事件捕获层) │├──────────────────┬──────────────────────────┤│ Worker Service │ mem-search Skill ││ (端口 37777) │ (自然语言查询接口) │├──────────────────┴──────────────────────────┤│ SQLite(结构化存储 + FTS5 全文检索) │├─────────────────────────────────────────────┤│ ChromaDB(向量数据库,混合语义检索) │└─────────────────────────────────────────────┘
每一层职责清晰,互不耦合,是典型的分层架构设计。
3. 生命周期 Hooks:无感介入的数据采集
claude-mem 通过 5 个精心设计的 Hook 在 Claude Code 的完整生命周期中静默工作:
|
|
|
|
|---|---|---|
SessionStart |
|
|
UserPromptSubmit |
|
|
PostToolUse |
|
捕获工具观察结果
|
Stop |
|
|
SessionEnd |
|
|
关键设计亮点:PostToolUse 是数据密度最高的 Hook。当 Claude 执行 Read、Bash、Edit 等工具时,实际上产生了大量有价值的上下文——文件内容、命令输出、错误信息——claude-mem 将这些「观察结果」结构化存储,而不仅仅是记录对话文本。
这意味着:即使你没说过「我们项目用了 Redis」,只要 Claude 曾经读取过相关配置文件,这个信息就被记录了下来。
4. 三层渐进式搜索:10 倍 Token 节省
这是 claude-mem 最值得深入学习的工程设计。传统做法是直接返回完整记忆,导致巨量 Token 消耗。claude-mem 设计了三层渐进式检索:
第一层:search(获取索引)
约 50-100 tokens/条结果
返回轻量索引:观察 ID、时间戳、简短摘要、token 成本预估。Claude 通过这一层判断哪些记忆值得深入查看,无需加载完整内容。
第二层:timeline(获取上下文)
围绕感兴趣的 ID,展开时间线上的前后文
当发现某条记录可能相关时,获取其时间线上下文——前后发生了什么,帮助 Claude 理解这段记忆的背景。
第三层:get_observations(获取完整内容)
只针对最终筛选出的 ID 加载完整细节
仅对真正需要的记录加载完整原始内容。
效果:避免了「把所有记忆都塞进上下文」的暴力做法,实现约 10 倍的 Token 节省。这个设计体现了一个重要原则:检索精度比检索召回率更重要。
5. 混合检索引擎:SQLite + ChromaDB
存储层采用双引擎设计:
SQLite + FTS5(全文检索)
-
适合精确匹配:函数名、文件路径、错误代码 -
延迟极低,无需启动额外服务 -
最新版本(v12.3.2)新增 FTS5 关键词回退机制——当 ChromaDB 不可用时自动降级
ChromaDB(向量数据库)
-
适合语义搜索:「上次我们讨论的认证方案」「那个关于性能优化的决定」 -
混合检索模式:关键词 + 向量相似度联合排序 -
支持概念标签索引
两个引擎互补:你既可以精确查找特定文件的修改历史,也可以用自然语言找回某个模糊的技术决策。
6. 实际安装与使用
安装(一行命令)
npx claude-mem install
或通过 Claude Code 插件市场:
/plugin marketplace add thedotmack/claude-mem/plugin install claude-mem
重启 Claude Code 后,上次会话的上下文会自动出现在 system prompt 中。
依赖清单
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
查看记忆 Web 界面
服务启动后,访问 http://localhost:37777 可以实时查看记忆流——所有被捕获的观察、摘要和检索历史一目了然,方便调试和验证记忆质量。
隐私控制
在对话中用 <private> 标签包裹不希望被记录的内容:
<private>这段是我的 API Key 配置,不要存储</private>
7. 近期重要更新(v12.x)
截至 2026-04-20,项目已迭代至 v12.3.2,近期值得关注的更新:
-
Docker 支持:提供开箱即用的容器,无需本地配置即可测试 -
Git Worktree 集成:当多个 worktree 合并时,观察记录自动合并到父项目 -
子 Agent 标注:记录每条观察来自哪个子 Agent,便于多 Agent 场景的溯源 -
数据库健康管理:定期清理过期消息、checkpoint 调度,防止数据库无限增长 -
SWE-bench 评测集成:可量化 Agent 在记忆辅助下的代码解决能力提升
8. 局限性与注意事项
-
存储持续增长:长期使用后数据库体积可观,需要定期清理策略(v12.x 已加入自动清理) -
初始冷启动:第一次使用无历史记忆,需要几次会话才能积累有效上下文 -
Token 注入成本:SessionStart 时注入历史上下文会消耗 Token,项目通过渐进式披露来控制,但重度用户仍需关注 -
ChromaDB 依赖:语义搜索依赖 ChromaDB 服务正常运行,最新版已加 FTS5 回退保障
9. 总结
claude-mem 的核心价值在于将 AI 编程助手从「无状态工具」升级为「有记忆的协作伙伴」。它的架构设计有几点值得反复学习:
-
Hook 驱动的被动采集:不改变用户行为,数据在工作流中自然产生 -
三层渐进式检索:Token 效率优化的典范,用索引代替全量加载 -
双引擎存储:精确匹配与语义理解各司其职,互为补充 -
渐进式披露:用户可见每层操作的 Token 成本,透明可控
对于每天重度使用 Claude Code 的开发者来说,这个插件几乎是必装项。
参考资料
-
thedotmack/claude-mem GitHub[3] -
官方文档 docs.claude-mem.ai[4] -
发布历史 Releases[5] -
中文 README[6]
引用链接
[1]thedotmack/claude-mem: https://github.com/thedotmack/claude-mem
[2]docs.claude-mem.ai: https://docs.claude-mem.ai/
[3]thedotmack/claude-mem GitHub: https://github.com/thedotmack/claude-mem
[4]官方文档 docs.claude-mem.ai: https://docs.claude-mem.ai/
[5]发布历史 Releases: https://github.com/thedotmack/claude-mem/releases
[6]中文 README: https://github.com/thedotmack/claude-mem/blob/main/docs/i18n/README.zh.md
夜雨聆风