乐于分享
好东西不私藏

深度解析 claude-mem:AI 编程助手的持久记忆引擎

深度解析 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 的完整生命周期中静默工作:

Hook
触发时机
核心动作
SessionStart
会话启动时
从数据库加载历史上下文注入到 system prompt
UserPromptSubmit
用户提交每条消息前
记录用户输入,关联到当前会话
PostToolUse
Claude 完成工具调用后
捕获工具观察结果

,这是最核心的数据来源
Stop
Claude 停止生成响应
调用 AI 对本轮对话生成语义摘要
SessionEnd
会话结束
持久化写入数据库,触发向量索引更新

关键设计亮点PostToolUse 是数据密度最高的 Hook。当 Claude 执行 ReadBashEdit 等工具时,实际上产生了大量有价值的上下文——文件内容、命令输出、错误信息——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 中。

依赖清单

依赖
版本要求
备注
Node.js
≥ 18.0.0
必须
Bun
最新稳定版
缺失时自动安装
SQLite 3
内置
无需单独安装
ChromaDB
自动管理
Worker 服务托管

查看记忆 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 编程助手从「无状态工具」升级为「有记忆的协作伙伴」。它的架构设计有几点值得反复学习:

  1. Hook 驱动的被动采集:不改变用户行为,数据在工作流中自然产生
  2. 三层渐进式检索:Token 效率优化的典范,用索引代替全量加载
  3. 双引擎存储:精确匹配与语义理解各司其职,互为补充
  4. 渐进式披露:用户可见每层操作的 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