乐于分享
好东西不私藏

深度解析 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 执行 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 中。

依赖清单

依赖
版本要求
备注
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