claude-mem:给 Claude 加装本地记忆层,告别新会话失忆

发布时间:2026/10/8 5:12:58
claude-mem:给 Claude 加装本地记忆层,告别新会话失忆 如果你和我一样每天都要用 Claude 处理几十个任务迟早会遇到一个让我抓狂的场景上一个会话里明明已经把项目背景、数据口径、甚至我的写作偏好都交代得清清楚楚新开会话之后它又像第一次见到我一样什么都不记得了。这种“每逢新会话就失忆”的状态让我决定给 Claude 配一个长期记忆层。今天想聊的 claude-mem就是我在这个方向上用得最顺手的开源方案一个跑在本地、基于 MCP 协议的记忆服务。它能让 Claude 在跨会话、跨项目时记住关键偏好和事实适合那些天天用 Claude 干活、对上下文连续性有硬需求的人。无论你是拿它写代码、做内容还是当研究助手装一个记忆层都能省下大量重复沟通成本。1. claude-mem 是什么为什么我决定给 Claude 补上长期记忆1.1 没有记忆的 Claude再聪明也像“金鱼脑”Claude 本身有上下文窗口可以一次塞进很长的文档和对话。但窗口一关或者会话一结束它对你的了解就归零了。你上次跟它约定的代码规范、你习惯的回复语气、你反复强调的术语定义全都烟消云散。实际工作中这意味着什么呢我举个例子我在写一个技术专栏第一周告诉它“我偏好短句、不用感叹号、专有名词首字母大写”它执行得很好。第二周再开一个新会话问它同样的问题它给出的回答风格又回到了默认状态。这不是模型能力的问题而是产品形态没有长期记忆。为了对抗这个“金鱼脑”过去我只能把偏好写成一段固定的提示词每次新建会话时手动粘贴。麻烦不说粘贴一长串规则还会挤占宝贵的上下文空间。后来我开始尝试各种第三方记忆方案最终稳定下来的就是 claude-mem 这一类 MCP 服务。它代替我做“记笔记”这件事而且记得比我自己用 Word 整理更结构化、更容易被 Claude 重新理解。1.2 claude-mem 的定位一个本地的 MCP 记忆层先解释一下 MCP。MCP 全称是 Model Context Protocol可以理解为 AI 应用连接外部工具的标准化接口。过去的 AI 工具生态里每个插件都要单独定制协议而 MCP 把“模型如何调用工具、工具如何返回结果”统一了。claude-mem 就是一个 MCP Server运行在你自己的电脑上Claude 通过 MCP 协议和它通信。它的核心工作有两部分。第一部分是“写入”在对话过程中claude-mem 会把值得长期记住的信息提取出来比如用户的个人偏好、项目的重要决策、已经敲定的事实。第二部分是“读取”新会话开始时它把与当前任务最相关的历史记忆检索出来注入到 Claude 的上下文里让 Claude “想起来”之前发生过什么。整个过程是自动的基本不需要人工介入。你可以把 claude-mem 理解成 Claude 的“外接硬盘”模型本身不保存记忆但需要的时候总能从硬盘里把资料调出来。1.3 哪些人适合用它我用了一段时间后发现 claude-mem 最适合这几类人。第一类是高频写作和内容运营的人因为写作风格、常用术语、审稿习惯都是可以长期沉淀的个人资产每次重写提示词非常浪费。第二类是开发者尤其是用 Claude 辅助写代码、维护项目文档的人项目架构决策、技术选型理由、代码风格约定都值得记住。第三类是重度研究型用户比如读论文、做市场调研过程中产生的关键结论和术语解释如果能自动留存后续所有新会话都能接着用。当然如果你的使用场景就是每次对话完全独立比如偶尔问个百科知识那 claude-mem 的价值不大。它解决的是“连续性”问题不是“单次智能”问题。一旦你发现自己开始频繁地在每个新会话开头重复背景说明就是时候考虑装一个了。2. 核心设计拆解claude-mem 是怎么记住和回忆的2.1 记忆写入从对话中自动沉淀关键信息claude-mem 的写入逻辑不是简单地把聊天记录全盘保存那样既浪费空间又会给后续检索带来大量噪音。它更像一个会做摘要的助手。当 Claude 和你对话时它通过 MCP 工具接口获得一段文本然后分析这段文本里哪些信息需要长期留存。比如你说“以后周报都用三段式结构本周进展、下周计划、风险点”这句话就会被识别成一条关于“工作习惯”的记忆。触发写入的方式通常有两种。一种是全自动模式只要对话中出现明确偏好、决策、事实就自行提取另一种是让 Claude 调用显式的记忆工具比如你在对话里说“请记住我的数据库密码不要写进文档”Claude 就会调用remember之类的工具把这条信息单独保存。自动模式方便显式模式可靠。我实际用下来的经验是自动模式适合广度显式模式适合精度。如果某个信息非常重要建议明确告诉 Claude“请记住”这样能大大降低丢失概率。2.2 记忆存储本地 SQLite 向量索引写入之后记忆会落到本地文件里。 claude-mem 的默认存储目录通常在用户目录下的隐藏文件夹中Windows 上大致对应C:\Users\你的用户名\.claude-mem\macOS/Linux 上则是~/.claude-mem/。数据主体是一份 SQLite 数据库里面记录了每条记忆的内容、创建时间、来源会话 ID、更新时间等基础信息同时还有一份向量索引专门用来做语义检索。为什么需要向量索引因为用户回忆一件事的时候表达方式往往和当初记录时不完全一样。比如你当时存的是“我喜欢用番茄工作法”过几天你问 Claude“我的时间管理偏好是什么”普通的关键字搜索很难把这两个句子关联起来但语义向量可以把它们映射到相近的位置。 claude-mem 在本地把记忆内容转换成向量并建立索引查询时计算相似度返回最相关的几条。这种做法有点像你的私人笔记本既有传统的目录标签又有一种“模糊联想”的能力即使你换了个说法也能找到当时的记录。存储完全在本地这件事很重要。Claude 对话过程中产生的原始聊天内容会上传至 Anthropic 的 API但 claude-mem 自己保存并索引的是“提取出的摘要”不是原始大段记录。而且它不依赖云端数据库不需要额外配置远程服务数据完全在自己手里。2.3 记忆读取通过 MCP 工具接口注入上下文新会话开始后Claude 并不是把记忆库里的所有内容都塞进上下文那样几万条记忆会把窗口直接撑爆。 claude-mem 采用的是按需检索。Claude 会先通过 MCP 工具发出一个查询大致意思是“针对当前用户的问题我有哪些历史记忆可以用”然后 claude-mem 根据当前对话的语义去向量索引里找相关片段只返回最相似的一小部分。返回的记忆会被格式化通常包含记忆内容、相关的时间、当时的会话背景。Claude 再把这些内容当作参考信息整合进自己的回答。正因为是按需加载哪怕你已经积累了上万条记忆每次真正读取的只有几条对性能和上下文空间的消耗都很小。我一般会控制单次检索返回的数量通常五条以内就够了。具体数量可以在 claude-mem 的配置项里调整这个后面部署部分会详细说。3. 部署实践从 Clone 到跑通 claude-mem3.1 环境准备Node.js、Git 与项目获取claude-mem 是 Node.js 生态的工具所以第一步先确认本机有 Node.js 运行时。我建议装 Node.js 18 或更高版本太老的版本容易出现兼容性问题。打开终端执行node -v能看到版本号就说明环境没问题。Git 用来拉取源码执行git --version确认是否安装。macOS 上通常自带 GitWindows 用户如果没装可以先装一个 Git for Windows。确认环境后把 claude-mem 的源码克隆到本地。因为开源项目更新很快我不喜欢在这里贴死某个仓库地址你可以直接在代码托管平台搜索项目名认准官方仓库再git clone。如果你更习惯用 npm 全局安装也可以看官方 README 是否提供了 npm 包不过为了看源码、方便改配置个人推荐 clone 方式。整个项目不大拉下来大概一两百兆里面包含依赖。命令大致是这样git clone claude-mem 项目地址 cd claude-mem npm install依赖装完之后一般还需要执行一次构建把 TypeScript 源码编译成可运行的 JavaScript。项目 README 里通常会写清楚构建命令常见的是npm run build或npm run dev。构建完不要急着关终端先确认dist或类似目录下有没有生成入口文件后面配置 MCP 时需要用到。3.2 安装依赖与首次启动首次启动前我会先跑一下初始化命令。有的版本支持类似npx claude-mem --init的用法它会帮你创建默认配置文件和本地数据库目录。如果没提供初始化命令也没关系直接启动一次服务它也会自动生成缺失的目录和配置。启动一个 MCP Server 的方式通常是直接执行入口文件比如node dist/server.js如果你看到终端里出现了类似“MCP server running on stdio”的日志说明服务本身就位了。不过正常使用不需要一直手动开着这个终端因为 Claude Desktop 或 Claude Code 会把它作为子进程自动拉起。手动先跑一次的唯一好处就是能提前暴露依赖缺失、端口冲突、配置文件路径错误这类低级问题。在建好的目录里你大概率会发现一个config.json或同名配置文件。里面比较值得关注的有几项记忆库文件路径、向量相似度阈值、单次召回条数、是否开启自动提取。不同版本字段名有差异建议打开看一眼注释不要上来就改。我第一次用的时候就因为阈值设太高导致 Claude 什么都“想不起来”后来调回默认值才好。3.3 对接 Claude Desktop / Claude Code 的配置方式要让 Claude 用上 claude-mem核心是把 MCP 服务注册到客户端里。如果你用的是 Claude Desktop配置文件在 macOS 上通常是~/Library/Application Support/Claude/claude_desktop_config.jsonWindows 上则是%APPDATA%\Claude\claude_desktop_config.json。打开这个 JSON 文件添加一段mcpServers配置{ mcpServers: { claude-mem: { command: node, args: [/absolute/path/to/claude-mem/dist/server.js] } } }填完需要重启 Claude Desktop之后在会话中就能看到 claude-mem 相关工具被加载。如果你用的是 Claude Code 命令行工具配置更简单直接执行claude mcp add claude-mem -e node /absolute/path/to/claude-mem/dist/server.js配置完成后用claude mcp list可以验证是否注册成功。我遇到过的最常见问题就是路径写错尤其是 Windows 下反斜杠和空格的处理。建议无论什么系统都把绝对路径放进双引号里不要手滑加空格。注册成功后你在对话里提到“记住”相关指令Claude 就会自动调用记忆工具。4. 实战操作让 claude-mem 真正“记住你”4.1 用会话演示长期记忆部署完成后的第一步当然是用最小场景验证它是否真的生效。我建议不要一上来就搞复杂规则先从最直观的个人信息开始。在 Claude Desktop 里创建第一个会话直接说“请记住我叫小林我的偏好是回复尽量简短、不需要客套开头。” 然后正常聊几句等对话结束。接着新建一个会话问 Claude“我叫什么平时你回我消息需要注意什么”如果 claude-mem 配置正常新会话里的 Claude 应该能答出来并且回复风格会向简短方向靠拢。这里有个容易误判的点Claude 官方聊天里可能自带一些短期记忆所以第一次验证时最好把测试信息做得具体一点比如“请记住我最喜欢的编程语言是 Rust编辑器中用空格缩进”这样能尽量确认这些信息确实来自记忆服务而不是模型内部的会话缓存。我实际跑下来从新会话提问到 Claude 成功取回记忆大概会有一两秒的延迟。如果等两三秒还答不上来检查是不是没有给 Claude 开启调用工具的权限。在 Claude Desktop 里有时需要你在设置里允许 MCP 工具自动执行否则它只会“看到”工具而不会主动调用。4.2 查看和管理记忆库命令行下的日常操作长期使用后记忆库会越来越臃肿。 claude-mem 通常会提供命令行管理工具常见的有列出所有记忆、搜索记忆、删除单条记忆和清空记忆库。比如我常用的几个命令格式类似claude-mem list claude-mem search 时间管理偏好 claude-mem delete 记忆ID claude-mem clear不同版本的命令名称可能不一样有些项目把它做成了交互式 TUI输入claude-mem就能进入图形菜单。如果你发现命令不存在直接看项目 README不要凭感觉猜。日常维护的关键是定期删除过时记忆。比如你之前让 Claude 记住“工作重心是 A 项目”三周后项目已经结束这条记忆还在那 Claude 每次回答都会掺入已经没用的背景反而干扰判断。我个人的节奏是每周抽五分钟过一遍记忆库把明显过期的条目删掉。记忆这种东西贵精不贵多。数据库里的记录不是越多越好越精简检索时召回的内容越准确。 claude-mem 的设计虽然已经用相关性排序来过滤噪音但源头上的垃圾越少输出自然越干净。4.3 高级玩法把 claude-mem 接进自动化流程如果你只把 claude-mem 当成聊天助手的小附件多少有点浪费。它还暴露了 MCP 接口这意味着任何支持 MCP 的客户端都能调用它。一个我用得很舒服的场景是让 Claude Code 自动记录项目决策。每次做完一个技术方案评审我都会在对话里补一句“请把最终选型和不选某方案的原因记录到记忆库”。这样一来新的开发会话一开始Claude 就能自己想起之前已经敲定的一些框架和技术栈不会再重复问“你准备用什么数据库”。更进一步我可以写一个很小的脚本在 CI/CD 流程里调用记忆服务的搜索接口把用户反馈里的高频关键词写入记忆库下次 Claude 在处理客服邮件时就能带上这些背景。实现这类联动的前提是 claude-mem 的 API 或命令行支持非交互模式调用。你需要仔细看文档里有没有--json这类参数方便脚本解析输出。当然自动化也意味着记忆写入门槛变低垃圾信息更容易混进来。我建议在自动化调用时加上过滤只记录结构化、带有明确动作或结论的文本不要记录临时状态。比如“当前服务器负载较高”这种话就不该写进长期记忆它属于瞬时状态写进去只会让 Claude 在很久以后还误以为系统处于高负载。5. 踩坑实录常见问题与排查技巧5.1 记忆没写入先查工具调用权限这是我遇到最多的情况配置好以后Claude 也能列出 claude-mem 的工具但聊了半天记忆库就是空。排查第一步看 Claude 是否真的调用了工具。有些客户端默认不会自动调用工具需要用户主动触发或者需要在设置里开启“允许 MCP 工具自动执行”的开关。你可以直接对 Claude 说“请查看一下你有哪些记忆相关工具并主动调用一次”看它的反应。如果它能回答出的工具列表就是空的说明 MCP 注册有问题回头查配置文件 JSON。排查第二步看 claude-mem 服务日志。很多版本把日志输出到终端或者写到指定目录的文件里。如果你发现写入时出现权限错误多半是数据库目录没有被正确创建或者目录只读。我用 Windows 时踩过一次坑用户目录路径里有中文和空格导致数据库文件路径解析失败改成纯英文目录后一切正常。如果确认工具调用正常日志也没报错那就是自动提取粒度的问题。你可能期望它记住的是“用户是前端开发”但自动提取可能觉得这句话太简单不值得记。这时候直接改用显式指令“请记住我是前端开发”。显式记忆的优先级通常高于自动提取稳定性好很多。5.2 检索不到相关内容向量阈值与内容颗粒度另一个高频问题是明明记忆库里已经存了某条信息可新会话里 Claude 就是“想不起来”。原因通常有两个。第一向量相似度阈值设得太高。 claude-mem 为了减少低质量召回会设置一个最低相似度分数低于这个值的记忆不会被返回。可是自然语言表达千变万化你说“我习惯用 TDD”后来问“我的开发流程偏好”这两句话的语义相似度未必特别高。这时适当把阈值调低一点比如从 0.8 调到 0.7召回率会明显上升。第二一条记忆里的内容太杂。比如有人把“用户喜欢简洁回复、项目名是 Alpha、前端用 Vue、后端用 Go”一口气塞进一条记忆里。检索时用户只问“后端的语言”向量匹配被“前端用 Vue”等无关内容拉低整条记忆的相似度不高就可能被排除。正确的做法是让每个记忆条目聚焦单一主题就像写代码时一个函数只做一件事。配合自动提取模式时你可以通过说法来控制把关键信息分句表达而不是堆在一段话里。如果调低阈值后Claude 开始频繁想起一些无关的旧记忆那就要考虑提高阈值或者增加每次召回条数的限制。这是个需要手动平衡的参数不同使用场景没有统一答案只能多测几轮。5.3 数据和隐私本地文件备份与清理claude-mem 的数据是本地文件听起来安全但也要防着硬盘损坏和误删。我会定期把~/.claude-mem/目录打包备份到外部存储或者使用网盘同步。不过要注意如果同步到云盘等于把记忆数据交给了第三方敏感信息就得自己想清楚。我建议对记忆库做至少一份异地备份同时设置好文件的访问权限不要让所有用户都能读。清理方面除了命令行删除还可以设置自动过期时间。有些版本的 claude-mem 支持给记忆设置 TTL比如临时性偏好保留三天长期偏好保留三个月。前期我为了省事把所有类型都设为永久结果半年来垃圾记忆太多检索质量肉眼可见地下降。后来改成了分级保存项目事实和关键决策设永久临时状态设七天自动清理。效果立竿见影。6. claude-mem 的安全与数据治理建议6.1 为什么本地存储更让人放心本地记忆服务最大的优势是数据主权和控制权完全在你手里。Claude 的对话过程需要经过大模型服务商的 API这是没法绕开的但 claude-mem 额外保存的“记忆摘要”不经过任何第三方API 传输也与你无关。它就像一个本地数据库所有读取和写入都发生在自己的机器上。相比把记忆放在云端笔记、云端数据库里的方案这种架构减少了一个数据泄露的中间环节。不过本地不代表绝对安全。如果你的电脑被入侵记忆数据库一样会泄露。所以我至少会做三件事一是给系统账号设置强密码并启用磁盘加密二是确保~/.claude-mem/目录的访问权限仅限当前用户其他人无法读取三是对包含敏感信息的记忆条目尽量含糊化。比如把“客户 A 的合同金额是 100 万”改成“客户 A 的合同金额在百万级别”既能让 Claude 理解背景又降低了泄露风险。6.2 敏感信息的过滤与清理机制claude-mem 一般会提供屏蔽词或过滤规则用来阻止某些类型的信息被写入记忆库。我建议一开始就配置好不要事后补救。例如我长期维护的项目里会把“密码”“密钥”“Token”这些词列入黑名单任何包含这些词的文本都不允许写入记忆。另外还有白名单模式只记录明确标记为“请记住”的信息其他一概不自动提取。这种模式牺牲了一些便利但隐私安全上限更高适合处理敏感业务的人。定期清理是另一个重要习惯。记忆库里可能残留一些当时看起来没什么后来却很敏感的内容。我每个月底会导出一份全部记忆条目快速浏览一遍把不合适的删掉。 claude-mem 如果支持导出功能这个流程会非常顺畅不支持的话直接备份数据库文件在本地打开查看也可以。总之记住一点记忆服务是一个有写入和删除能力的本地数据库不该让它无限制地累积所有对话信息。最后分享一点我自己的体会。 claude-mem 不会让 Claude 变得更聪明它只是把“长期上下文”这件事从你手里接管过来。刚开始我习惯每个新会话手动粘贴背景现在我的做法变成了新会话开始时先让 Claude 调用一次记忆检索把和当前任务相关的历史信息拉出来然后再正式讨论问题。这套流程跑顺之后Claude 给我的整体体验确实上了一个台阶。另外一个小建议别把所有东西都丢进记忆库记忆越精简召回越准。宁可多花几秒手动删除过时条目也不要让垃圾记忆持续污染后续所有对话。如果你也正在被“新会话失忆”折磨 claude-mem 值得花一个下午试试。