
如果你用过 Claude 一段时间大概都经历过这种尴尬前一天晚上聊得热火朝天把项目背景、技术栈、个人偏好、踩过的坑交代得清清楚楚第二天打开新会话Claude 彬彬有礼地问候“你好很高兴认识你”然后一切归零——之前那些对话细节全被模型机制清空了。刚开始我还能自我安慰这是上下文窗口的限制没办法。直到我在 GitHub 上翻到 claude-mem 这个开源项目才发现“给 Claude 装长期记忆”这件事其实早就有人给出了可落地的解法。简单说claude-mem 是一个基于 MCPModel Context Protocol的本地记忆服务端。它能把你的对话历史自动存到本地并在新一轮对话里按需把相关记忆重新“喂”给 Claude。装上之后Claude 会记得你的名字、你的项目进度、你讨厌哪种回答风格甚至能跨天、跨项目地保持上下文连贯。这篇文章我会从痛点背景、架构原理、安装配置、日常玩法、存储选型和踩坑避雷六个角度把 claude-mem 完整拆一遍希望能帮你省下那些反复自我介绍的时间。1. 为什么我迫切需要给 Claude 装上“记忆”——先说说痛点1.1 Claude 的“金鱼记忆”到底有多痛先说个最典型的场景。我平时用 Claude 写代码比较多经常是白天把某个模块的设计思路聊清楚晚上关电脑第二天早上想接着聊。结果新会话一开Claude 对昨天的讨论毫无印象。我甚至遇到过更崩溃的我明确说过“这个项目用 FastAPI不要引入 Django”结果第二天它依然是给出一个 Django 的目录结构。不是它不听话而是模型本身在每次新会话里就是一张白纸这也被大家调侃为“金鱼记忆”。这个问题在个人使用场景下只是浪费时间但在长期项目里简直是灾难。你想想如果每次开工都要把项目背景、代码风格、约定规范、技术选型重新打一遍那对话效率至少打了五折。我试着把这些资料写进系统提示词System Prompt但项目一多提示词越来越长上下文预算越占越狠真用到实际对话的时候系统反而变笨了。也试过把重要信息复制到自定义指令里但这是一个纯手动的方案只要忘了整理记忆就断了。1.2 claude-mem 是怎么解决这个问题的claude-mem 的思路和“把资料写进提示词”完全不同。它做了一层独立的记忆层所有对话内容在本地落盘存储成结构化的记忆条目然后在对话过程中通过 MCP 工具让 Claude 自己去检索、调取相关记忆。用一句大白话说它不是在后台帮你把历史记录偷偷塞给模型而是给模型提供了一个“查旧档案”的工具——模型自己决定什么时候翻档案、翻哪一份档案。MCP 这个名字听起来唬人但本质很好理解。你可以把它想成一个标准的 USB-C 接口以前每个外设都要接专用接口现在大家统一成一个协议鼠标、键盘、硬盘都能插同一个口。MCP 就是给 AI 应用定义了一个统一的“外设接口”claude-mem 就是其中一个“硬盘外设”。Claude 通过 MCP 接口访问 claude-mem就像电脑通过 USB 读取移动硬盘自然就能读到“上一轮对话写了什么”。这套设计有一个很大的好处记忆不是一股脑全塞进去而是按需读取。不会因为历史太长而把上下文撑爆也不用担心无关的旧话题干扰当前对话。我第一次跑通的时候最直观的感受是第二天再问 Claude“还记得我们昨天定的技术方案吗”它真的能回忆出准确的细节那一刻确实有点惊喜。2. claude-mem 的架构拆解记忆到底存在哪、怎么被想起来2.1 三个核心组件MCP Server、存储层、用户档案claude-mem 的架构不复杂拆开看就是三块各司其职MCP Server、存储层、用户档案User Profile。MCP Server 是入口负责和 Claude 通信。Claude 调用工具时它会收到请求、执行检索、把结果返回给 Claude。存储层是记忆的物理载体可以是 SQLite 数据库、JSON 文件也可以是你自己搭的 PostgreSQL。用户档案则是一份长期稳定的身份与偏好说明Claude 每次启动对话都会优先读取这份档案相当于给它一份“关于这个用户的基本人设”。这三者叠加以后的效果和我们人类的记忆模型很像短期记忆当前对话内容靠上下文窗口长期记忆历史事实、偏好靠 claude-mem而用户档案则是我们自我介绍时说的那句“我是谁、我在干嘛”。我一开始只顾着装记忆没细看用户档案的作用后来把个人背景写进 user.mdClaude 的回答质量明显上了一个台阶因为它从一开始就在用“了解你的口吻”而不是“初次见面的陌生人”口吻。2.2 记忆的写入、压缩和检索来看 claude-mem 处理记忆的完整流水线我按“写入 → 压缩 → 检索”三步拆解。写入是自动的。每次对话结束MCP Server 会把这段对话内容写入存储层。如果你用的是 SQLite记录就落在本地数据库里。这个过程不需要手动干预属于“闭眼自动记账”。但要注意它保存的是对话内容本身并不是只有摘要所以长时间使用以后数据库会越来越大。压缩是节流阀。记忆太大Claude 的上下文窗口吃不下也可能检索到一堆不相关的噪音。claude-mem 默认开了压缩compression机制会把长段记忆摘要化处理控制最终进入上下文的 token 数量。这个阈值是可以调的默认值相对保守就我之前实测500 到 1000 之间是比较平衡的区间。设太小记忆太笼统比如“我们讨论过项目”设太大又可能把无关细节也带进来。检索是灵魂。当你在对话里说“还记得我们上次聊的方案吗”Claude 会调用 claude-mem 的检索工具在本地存储里做相关度匹配把最相关的历史记录捞出来。检索是基于相似度计算的不是简单关键词匹配所以哪怕你的说法和原文不完全一致它也能找到对应内容。第一次实测的时候我说了一句“上次那个布丁的做法”而原对话里写的是“焦糖布丁配方”它依然准确捞出了记录当时我对这套机制的稳定性就有了底。2.3 和 Claude 原生功能、Artifacts 的区别有人可能会问Claude 新版本不是也支持记忆了吗为什么还要用第三方工具这个区别很关键。Claude 平台上的原生记忆更多是“账号级别”的偏好记忆它是跟着账号走的由官方服务端维护你看不到底层内容也很难主动控制哪些该记、哪些不该记。而 claude-mem 是本地、透明、可控的记忆存哪、怎么检索、哪些能进上下文、哪些该删都是你说了算。Artifacts代码/文档工件则是“产出物”的交互容器负责实时展示代码和文档跟“记住过去”完全是两码事。对我来说选 claude-mem 的核心理由是数据主权。我可以在自己机器上随时翻阅记忆库导出备份甚至迁移而不用依赖官方账号体系。这种感觉就像在本地写笔记和存在别人的云笔记里安全感完全不一样。3. 从零安装到接入 Claude Desktop完整配置过程3.1 环境准备与 npm 安装claude-mem 是 Node.js 写的所以第一步是确认 Node.js 环境。实测下来 Node.js 20 及以上版本最稳妥低于 18 会遇到模块解析问题。检查版本的方法node -v npm -v环境没问题后直接 npm 全局安装npm install -g claude-mem装完后验证一下claude-mem --help这一步如果提示“command not found”大概率是 npm 全局路径没进系统 PATH。可用npm config get prefix查全局安装路径比如返回/usr/local那命令就在/usr/local/bin/claude-mem把它补充进 PATH 再重开终端即可。3.2 初始化与首次记忆测试安装只是第一步之后要先初始化让 claude-mem 生成默认配置和目录结构claude-mem init初始化完成后默认会创建~/.claude-mem/目录里面包含配置文件、用户档案文件和存储数据。你可以直接编辑配置文件做个性化调整比如改存储后端、调压缩参数。第一次启动不用急着改设置先用默认配置跑一轮对话确认基础流程通顺再慢慢调优。想快速检验记忆是否生效最直接的方法是让 Claude 记住一句话然后在新会话里追问。我当时是让 Claude“记住我不吃香菜”然后新开一个会话问它“我吃香菜吗”。第一次测的时候它回答得有点犹豫我检查了下会话发现 MCP 配置生效但记忆检索没有在每轮自动触发需要在对话里显式提到“记住”相关语义才会触发回忆。这个细节我会在第 4 部分详细展开。3.3 接入 Claude Desktop 的 MCP 配置现在主流的接入方式是把 claude-mem 作为 MCP 服务器注册进 Claude Desktop。配置文件路径因系统而异macOS~/Library/Application Support/Claude/claude_desktop_config.jsonWindows%APPDATA%\Claude\claude_desktop_config.json在配置文件里的mcpServers字段下新增一项{ mcpServers: { claude-mem: { command: claude-mem, args: [--mcp] } } }保存后必须彻底退出 Claude Desktop 再重新打开不是关闭窗口那么简单是退出进程。这一步很多人踩坑——改完配置发现没生效就是因为只把窗口关了进程还在后台。重启后再确认对话界面里能看到 MCP 连接状态如果没出现优先检查 JSON 格式是否合法多余逗号都能害死人再看 command 路径是否正确。3.4 接入 Claude Code如果你用的是 Claude Code 命令行工具配置更简洁一条命令搞定claude mcp add claude-mem -- claude-mem --mcp这条命令的本质是把 claude-mem 注册为 Claude Code 的 MCP 服务端。接入后在 Claude Code 会话里也能用claude-mem触发记忆检索。我日常写代码更依赖 Claude Code所以这个通道我用得比 Desktop 还频繁。两种接入方式可以同时存在互不干扰记忆库也是共享的因为数据都落在同一台机器的同一存储后端。4. 日常使用心得claude-mem 的触发哲学与玩法4.1 显式触发“claude-mem”到底怎么用claude-mem 最常见的用法是在对话里写claude-mem然后跟上你的问题。比如claude-mem 我们上次讨论过的数据库选型结论是什么Claude 看到这个指令就会调用记忆检索工具把相关的历史记录翻出来回答。这种方式的好处是“按需调用”不会每轮对话都占用检索资源和上下文空间。我习惯在开启一个新话题、或者遇到明显需要旧上下文的问题时才会显式打上claude-mem。相当于你跟助手说“去翻一下档案再回答我。”有些版本支持给claude-mem加参数比如指定搜索范围、按时间过滤、按项目搜索。虽然不同版本的可用参数略有差异但核心逻辑是一致的给你一个可控的检索旋钮而不是让 Claude 盲目地满库搜索。4.2 自动回忆的触发时机除了显式触发claude-mem 还会在某些情况下自动触发回忆。比如你在新会话里提到了一个人名、一个项目代号、或者一句明显和过去相关的话MCP Server 会尝试做一次隐含检索。这个机制让体验连贯很多但也有个需要注意的地方自动触发不是每次都能命中。我踩过的一个典型情况是我在新对话里只说“那个 app 怎么样了”因为这句话太泛、没有足够关键词检索出来的结果可能完全和当前话题无关。后来我把项目代号说得更具体一些比如“记账 App”命中率就直线上升。经验是别指望 Claude 能像人一样从一句话里猜出全部意图给它一两个准确的实体词自动回忆的成功率会高很多。4.3 用户档案文件该怎么写user.md / user.yaml记忆库负责“发生过什么”而用户档案负责“我是谁、我的偏好是什么”。这是两个不同层次的东西别混在一起。初始化后~/.claude-mem/user.md也可能是 user.yaml取决于版本就是你的长期人设配置文件。我强烈建议认真写这份档案。我的写法参考如下# 关于我 - 职业独立开发者主要做 RAG 应用 - 技术栈Python、TypeScript、Supabase、FastAPI # 沟通偏好 - 回答要直接不要绕弯子 - 如果方案有更简单的替代先说简单方案 - 代码示例优先用 Python # 当前项目 - 正在做一个基于向量数据库的文档问答工具 - 主要关注检索质量和延迟写完后Claude 每次新会话都会把这些信息当作背景来用。实测下来回答风格真的会变得更贴合它知道我偏好 Python 后给代码示例时基本不会再默认用 Java 或 Go。如果看不上官方默认的提示模板你也可以完全自定义 user.md 的格式它就是一份纯文本档案Claude 只取内容不依赖固定结构。4.4 多项目隔离与多用户切换做多个项目的人要注意claude-mem 支持按项目/目录隔离记忆空间。在哪个目录下工作它就默认锁定哪个项目的记忆。这样 A 项目的上下文不会被 B 项目污染。我第一次用的时候没注意目录切换导致在两个项目之间混乱后来养成了“开工前确认当前目录”的习惯这个问题就再没出现过。如果你的电脑有多个人共用比如同事也登了同一台机器的 Claude这就需要给每个人分配独立的用户配置和存储空间。实现方式很简单用不同的系统用户目录来运行 claude-mem或者通过配置文件里的多用户开关切换。不过对我这种一人一机的场景默认单用户配置已经足够。5. 存储后端怎么选SQLite、JSON、PostgreSQL 的实际对比5.1 三种后端的核心差异claude-mem 从设计上就支持可插拔的存储后端目前最常用的是 SQLite、JSON 和 PostgreSQL。我分别跑过一段时间的实测它们的性格差异很明显。特性SQLiteJSONPostgreSQL性能高适合日常低适合调试高适合服务化数据可读性一般需工具极佳直接打开一般需客户端安装复杂度内置零配置内置零配置需自建服务多设备同步不方便可手动拷贝原生支持适用场景单机个人默认调试、开发团队协作、多机部署我最初的默认选择是 SQLite它的读写性能足够好而且不需要额外搭服务。JSON 后端更像是给人看的每个记忆条目都是独立 JSON 文件直接打开就能读你能很清楚地看到 Claude 记住了什么但文件多了以后查询速度会明显下降适合开发调试期不适合长期生产。至于 PostgreSQL如果你只有一台电脑、一个人用属实有点杀鸡用牛刀但如果你的工作流是家里台式机和笔记本都要访问同一份记忆那 Postgres 的远程访问能力就值回票价了。5.2 切换存储后端的实际操作切换后端不需要重新初始化只需要改配置文件。以 SQLite 切到 JSON 为例配置大致如下storage: backend: json json: path: ~/.claude-mem/memory/我建议改配置之前先备份。claude-mem 目前没有内置一键迁移工具所以从 SQLite 切到 JSON老数据不会自动跟着过去需要你手动导出/导入。我的做法是在旧后端里使用claude-mem view或导出功能把重要记忆批量拉出来再手动导入新后端。如果你只想“从今天开始用新后端”旧数据也可以直接放着不管新记忆会从零累积只是旧记忆在查询时会丢失。5.3 备份与迁移的防坑经验记忆数据说贵不贵但丢了真的会肉疼。我有一次清理磁盘时顺手把~/.claude-mem目录给删了结果整个对话记忆库清空之前积累的用户偏好、项目上下文全部归零。从那以后我养成了每周备份的习惯最简单的方式就是打包目录tar -czf claude-mem-backup.tar.gz ~/.claude-mem因为 claude-mem 的数据就是普通文件不做加密处理所以你有完全的控制权可以定期备份到移动硬盘可以同步到私有网盘甚至写个 cron 定时备份。我自己现在用 crontab 每天凌晨自动执行一次备份成本几乎为零但安全感提升了一个档。6. 踩坑记录与避坑建议把能踩的坑提前替你踩一遍6.1 Node 版本与 npm 全局路径最常见的问题有两个一是 Node 版本过低导致安装失败或命令异常二是全局安装后命令找不到。前者好解决升级 Node 即可后者本质是系统 PATH 配置问题这里给一个通用的排查命令组合npm config get prefix ls -l $(npm config get prefix)/bin/claude-mem如果第一条命令执行后返回的路径不在你的 PATH 中手动导出一下就好macOS/Linux 为例export PATH$(npm config get prefix)/bin:$PATH把这个写进~/.zshrc或~/.bashrc一劳永逸。涉及 Windows 的用户需要在系统环境变量里把 npm 的全局 bin 目录加到 PATH。6.2 记忆泛滥压缩阈值怎么调才不伤细节记忆库越积越大以后会出现一个奇怪的现象Claude 确实能回忆但回忆出来的内容特别“概括”细节全丢了。比如问“上次讨论的方案三个备选是什么”它回答“我们讨论过多个方案”但具体列不出来。这通常就是压缩参数设得太激进了。max_token和压缩开关都在配置文件里。我的调参经验是日常语聊、想法记录max_token可以设小一点300 左右因为不需要太精确的细节项目开发、写代码max_token至少 500否则代码思路、关键决策会被摘要抹平知识整理、精细回顾max_token设到 1000 以上牺牲一点上下文空间换取细节完整度另外别忘了压缩是对写入端生效的改完配置后老记忆不会自动重新压缩。所以如果之前用激进压缩存下了模糊的摘要新配置只能影响之后的记忆条目。真遇到特别关键的历史内容手动重存一遍才是最快的解决方式。6.3 隐私边界本地明文存储并不是绝对安全这个必须单独说。claude-mem 的所有记忆都是明文落盘。它不加密不混淆就是纯文本。这意味着任何能读取你硬盘的人、程序都能直接翻看你和 Claude 的对话记录。所以我的建议很明确不要在对话里透露密码、API Key、身份证信息、支付信息等真正敏感的内容。即便是本地存储防不住的是恶意软件和物理接触。如果你确实需要在对话里涉及机密信息建议不要开启记忆功能或者至少定期手动清理敏感对话记录。我现在的做法是把 claude-mem 当成“工作记忆”用只记录项目相关的非敏感信息涉及到真实凭证的部分全部走环境变量或密钥管理器绝不打进对话里。6.4 与 CLAUDE.md 的配合用法如果你既用 claude-mem又在项目里维护 CLAUDE.mdClaude Code 的项目指令文件这两者天然适合配合CLAUDE.md 放的是“稳定、通用、需要每次载入”的项目规则claude-mem 放的是“动态、按需、跨会话”的历史记忆。规则放前者事实射后者各司其职。举个例子CLAUDE.md 里写下“本项目的代码风格遵循 PEP8函数必须有 docstring”这是框架性的claude-mem 里则记住“上周我们把登录模块重构为 JWT 认证Kevin 负责前端部分”这是按需检索的动态事实。如果全塞进 CLAUDE.md文件会越来越臃肿甚至触发上下文截断分散到两处后静态规则稳定存在动态记忆按需加载整体体验会从容很多。我在实际使用中还发现一个有意思的交互我习惯在 CLAUDE.md 里写一行“如果对话需要回忆历史请主动调用 claude-mem”相当于给 Claude 一个明确的指令信号。这样做之后它在新会话遇到跨天话题时会更主动地去翻档案而不是等我自己想起来才触发。最后分享一个小技巧。很多人以为 claude-mem 只能靠claude-mem这一个入口其实它自带命令行交互能力。直接在终端里运行claude-mem可以快速浏览记忆库、搜索关键词、查看统计信息甚至手动删除某些记忆条目。我每周会抽几分钟用命令行过一遍记忆库把过时、错误或者不想保留的片段清掉保持记忆的新鲜度。Claude 再怎么聪明也是“垃圾进垃圾出”记忆质量高回答质量才会稳。这套工具我已经用了大半年不敢说它让我的工作流脱胎换骨但至少从“每天重新认识一遍”变成了“老朋友接着聊”这个体验差距用过的人都知道。