☰
claude-mem:给Claude Code装上跨会话长期记忆
2026/10/26 7:37:52 网站建设 项目流程

如果你和我一样,把 Claude Code 当成日常主力开发助手,一定会遇到同一个尴尬场景:昨天刚和它讨论完某个模块的架构设计,今天打开新会话,它好像什么都不记得,你不得不把同样的背景重新解释一遍。这种“每次都是新朋友”的体验,在项目一复杂起来时真的让人抓狂。claude-mem 就是冲着这个问题来的——一个给 Claude Code 加长期记忆的开源工具,基于 MCP 协议把 PostgreSQL 变成 AI 助手的“第二大脑”,让对话摘要、你的偏好、项目的架构知识点都能跨会话保留下来。今天这篇不打算写成项目 README 的翻译,而是把我实际部署、配置、用下来的完整过程和踩过的坑都摊开讲,从原理到实操一次说清楚。

1. 项目解析:claude-mem 到底在解决什么问题

1.1 一个真实痛点:AI 助手的失忆症

Claude Code 这类 AI 编程助手虽然很强,但它的记忆基本局限在“当前会话上下文窗口”里。你在这个会话里喂给它的业务背景、技术决策、代码结构,关掉终端之后基本就归零了。短会话还好,一旦涉及一个持续几周甚至几个月的项目,你会发现自己像在和一个“金鱼脑”搭档:每次都要从头介绍项目,每次都要重申代码规范,每次都要重复你早就说过十遍的偏好。

我自己最崩溃的一次,是在一个中等规模的后端仓库里做重构,头一天晚上和 Claude Code 敲定了某个核心模块的迁移方案,还特意把决策原因、影响范围都交代清楚。第二天一开新会话,它给我提了一个完全相反的方案,理由是“没有上下文”。那一刻我意识到,靠人肉喂上下文不是长久之计,我需要一个能把记忆沉淀下来的机制。

这就是 claude-mem 出现的场景。它的英文全称其实就是“Claude Memory”,定位非常直接:给 Claude Code 补上跨会话的长期记忆。它不是去改 Claude Code 本身的代码,而是以 MCP Server 的方式挂在旁边,Claude Code 在需要的时候会主动调用它,把记忆写入数据库,也可以随时把记忆查出来当成上下文用。

1.2 为什么不用 CLAUDE.md 硬扛

可能有人会问:Claude Code 不是原生支持 CLAUDE.md 吗?把项目约定、代码架构写进去不就行了?

CLAUDE.md 确实有效,我至今仍然建议每个项目都维护一份,但它解决的是“静态知识”问题:项目说明、启动命令、目录结构、代码风格这些相对固定的信息。真正难搞的是“动态记忆”:昨天的对话结论、临时调研的结果、某次调试中发现的坑、你个人工作习惯的细微变化。这些东西的频率和变化速度,远不是一份手动维护的 Markdown 文件能跟上的。

还有一个更现实的问题:CLAUDE.md 只能靠人去写。你忘了,它就不知道;你没整理,它就空白。而 claude-mem 的思路是让 AI 自己积累记忆——每轮对话结束,它会自动判断哪些信息值得留存,像秘书一样帮你把聊天记录提炼成结构化记忆。这种“自动沉淀”的能力,本质上和 CLAUDE.md 是互补关系:静态规范用文档管,动态记忆交给 claude-mem 管。

1.3 设计思路:MCP 记忆层 + PostgreSQL 存储

claude-mem 的架构设计有一个很聪明的点:它老老实实当一个记忆层,不碰你代码仓库的逻辑,也不干预对话生成。它做的事只有两件:接收 Claude Code 传来的记忆写入请求,以及响应记忆查询请求。

底层存储直接用 PostgreSQL,而不是 SQLite 或本地 JSON 文件。我第一次看到这个选择时也愣了一下,一个 AI 记忆工具为什么要把存储搞得这么“重”?后来想明白了:PostgreSQL 的可靠性、并发能力、全文检索、扩展性都是本地文件方案没法比的。你不需要单独部署一套数据库服务,只要有一个能连的 Postgres 实例就行,自己本机装一个,或者用云数据库都行。

所谓 MCP 记忆层,可以理解成一个标准化接口。Claude Code 通过 MCP 协议和 claude-mem 通信,claude-mem 再操作 Postgres。这种解耦让工具本身非常简单纯粹:作为用户,你只需要关心 Claude Code 是否接上了这个工具,记忆就自动开始沉淀了,不需要去改 Claude Code 内部任何东西。这也是我第一次用这类工具时最舒心的一点——接入过程极其轻量。

2. 安装部署与配置实操

2.1 前置条件与安装方式

在动手之前,确认一下你的环境:需要 Python 3.10 以上,一个能正常访问的 PostgreSQL 数据库,还要有 Claude Code 的可执行环境。它的安装方式非常简单,一条 pip 命令就能完成。

pip install claude-mem

安装完之后,我建议立刻跑一次它的体检命令,它会检查 Python 版本、数据库连接、MCP 注册状态等关键环节,省得后面排错时不知道从哪查起。

claude-mem doctor

如果体检没问题,就执行安装命令,把 claude-mem 注册成 Claude Code 的 MCP Server:

claude-mem install

这个命令本质上是帮你写好了 Claude Code 的 MCP 配置,不需要你手动去改 JSON。不过如果你想自己控制配置项,也可以走手动注册的方式,等会儿我会讲。

有个细节需要提醒:claude-mem 本身只是一个“接线员”,真正生成记忆摘要、理解上下文的工作,还会用到 Claude 模型的能力。所以你的环境里最好已经配置好 Claude Code 的正常使用环境,API 相关的密钥或者登录态要能正常工作,否则后面调用记忆代理的时候可能会报错。

2.2 初始化数据库与接入 Claude Code

先准备数据库。假设你本机已经装了 PostgreSQL,那我建议专门建一个库给记忆用,不要和业务库混在一起,方便以后备份和清理。

CREATE DATABASE claude_mem;

然后准备一个连接字符串,格式大约长这样:

postgresql://用户名:密码@localhost:5432/claude_mem

如果你执行claude-mem install成功,它会用环境变量或在交互提示中让你填这个连接串。也支持手动把 MCP 服务写进 Claude Code 的配置文件,你可以在项目根目录的.mcp.json里加一段:

{ "mcpServers": { "claude-mem": { "command": "claude-mem-mcp", "args": [], "env": { "DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/claude_mem" } } } }

配置好后重启 Claude Code,它就会自动发现 claude-mem 这个 MCP 工具。你不需要手动去调用它,Claude Code 在合适的时机(比如对话结束、长时间任务完成、用户明确要求记住某事)会自动调用记忆相关工具。第一次运行时,我建议先跑一次claude-mem refresh或者随便和 Claude Code 聊几句,让它产生一次“记忆沉淀”动作,确认没有报错。

2.3 常用的配置参数说明

用了一段时间后,你会发现 claude-mem 有几个很有用的调节旋钮。它们都是通过环境变量传递的,不同版本可能会有细微差异,但核心参数基本稳定。

环境变量作用我的推荐值
DATABASE_URLPostgreSQL 连接字符串,必填根据实际环境填写
MEMORY_MAX_TOKENS单条记忆摘要允许的最大 token 数,防止记忆体无限膨胀400~800
MEMORY_REMOVAL_THRESHOLD记忆老化或重复度达到阈值时,触发压缩或清理3~5
MEMORY_USE_FAST_LLM是否启用轻量模型处理记忆,节省成本true
MEMORY_FAST_LLM_MODEL指定轻量模型的名称参考官方文档当前推荐模型

这些参数不是越大越好。比如MEMORY_MAX_TOKENS我一开始设成 2000,想着记忆越详细越好,结果发现它会把很多无关紧要的聊天琐碎也存进来,查出来的东西反而像流水账。后来压到几百 token,强制它提炼核心结论,效果立刻好了很多。

还有一点要注意:这些环境变量在.mcp.json里配置时,是写在env字段里的。修改后需要重启 Claude Code 会话才会生效。别问我为什么会知道,我第一次改完参数没重启,对着配置检查了半天才发现是自己粗心。

3. 核心机制拆解与实用技巧

3.1 记忆代理:真正干活的“分拣员”

我第一次用的时候,单纯以为 claude-mem 就是把聊天记录原文丢进数据库,后来翻了它的实现才明白,中间有一个叫“记忆代理”(Memory Agent)的关键角色。这个代理不是独立进程,而是一套经过精心设计的提示词逻辑,配合 MCP 工具调用,让 Claude Code 在存储记忆前先做一次“分拣”。

你可以把记忆代理想象成一个图书管理员。你不可能把每张废纸都收藏起来,管理员会扫一眼交上来的材料,判断哪些是值得进档案馆的、哪些该放哪个分类、哪些已经过时该撤掉、哪些信息需要合并更新。这正好解决了“记忆污染”问题:如果每次都粗暴地存原文,数据库里很快就会堆满重复和矛盾的信息,查出来的东西根本没法用。

在实际对话中,这个分拣过程是自动发生的。Claude Code 把当前对话的上下文打包给记忆代理,记忆代理通过工具调用决定执行哪个操作。不同的操作对应不同的 MCP 工具,常见的有这几类:添加记忆、查询记忆、更新已有记忆、删除过期记忆、记录脚本使用情况、读取用户偏好。这些工具名在 MCP 配置里都能看到,形如claude_mem_add_memories、claude_mem_query_memories这一串。

3.2 六类记忆分别是啥

claude-mem 不是把记忆一锅烩,它把记忆分成了几种明确的类型。我整理了一个表,方便你理解它到底在存什么。

记忆类型典型内容变化频率
对话摘要最近几轮对话的结论、待办事项、问题状态高
用户偏好代码风格、命名习惯、常用工具链、测试偏好低
用户行为模式常用命令、脚本调用习惯、工作流程中
脚本使用记录哪些脚本被调用了、执行结果如何中
代码库与架构知识模块职责、目录结构、技术选型、关键设计决策低
环境事实开发环境配置、依赖版本、部署目标低

记忆类型分得清,后面查询质量就会好很多。比如说,问“我们上个星期为什么决定不用 Redis 做队列”,它会去翻对话摘要和架构知识;问“我习惯用 pytest 还是 unittest”,它会优先读用户偏好。不同类型的记忆更新频率不一样,存储和检索策略也不一样,这种设计比把所有文本混在一起存要科学得多。

3.3 查询、更新、删除:让记忆保持新鲜

很多人在刚上手时有个误区:用完就把工具晾在那,以为它是“全自动”的,其实 claude-mem 更准确的说法是“半自动记忆助手”。它确实会自动沉淀记忆,但如果你完全不闻不问,就像从不整理衣柜的收纳盒,时间长了里面可能堆满了过时信息。

所以我会定期用对话的方式向 Claude Code 查询记忆:“我们之前对用户认证模块的架构讨论,结论是什么?”“按照我这个项目的代码规范,新增接口文件应该放在哪个目录?”你会发现它现在能秒回这些答案,因为 claude-mem 已经把相关记忆检索出来放进了上下文。

遇到记忆错误或过时,也不用让 Clauude Code 干等着。可以直接说“这个信息不对,帮我更新成 XX”或者“把之前那条关于 XX 的记忆删掉”。它会调用对应的 update 或 delete 工具,把数据库里的数据改掉。我自己的习惯是每隔两三天做一次“记忆体检”,让它列出当前记得的主要结论,有不一致的地方顺手修正。这点非常重要——记忆是活的,不维护就会腐化。

3.4 提升记忆质量的实测技巧

经过一段时间的折腾,我总结出几个能明显提升记忆质量的技巧,每一条都是查过文档、踩过坑之后验证过的。

第一,重要结论要说清楚因果,别只丢结论。比如你告诉它“现在用户服务改用 gRPC”,它就只记得这个事实;如果你补一句“因为原来的 HTTP 接口在高峰期超时率过高”,记忆代理就有足够上下文把因果关系也存进去,下次你问“为什么用 gRPC”时它能完整回答。

第二,主动标记“请记住”关键词。虽然 claude-mem 会自动判断哪些信息值得存,但自动判断偶尔会漏掉你真正关心的点。当你在对话里说“请记住这个决定”或“这个一定要记下来”,它通常会以更高的优先级写入记忆。这个操作成本很低,收益却很实在。

第三,不要老换专有名词。如果同一个模块你在对话里一会儿叫“认证服务”,一会儿叫“auth-server”,一会儿又叫“用户中心”,就算记忆代理再聪明也容易出现重复记忆。保持术语一致,查询准确率会高很多。

第四,给它配置一个质量更好的处理模型。如果你的账号支持,可以考虑把记忆代理用的模型调成更强的那种,或者反过来,日常测试时用MEMORY_USE_FAST_LLM加快速度,等真正要整理重要项目结论时再切换成更精细的模型。

4. 常见问题与排查实录

4.1 接入后助手还是“失忆”

最常遇到的问题,也是我自己第一次接入时的困惑:明明装好了 claude-mem,聊了半天,新开会话问它“我们刚才聊了什么”,它还是一脸懵。

排查思路很简单:先确认 MCP 工具是否真的被加载了。在 Claude Code 里直接问它“你现在有哪些 MCP 工具可用”,如果工具列表里没有 claude-mem 相关工具,那说明 MCP 注册没生效,多半是配置路径错了或者没有重启会话。如果工具在,但还是不记忆,那就要看是不是记忆代理没有触发写入。让它执行一次“请把刚才的讨论结论保存下来”,如果这条执行成功,后续应该就能查到。

还有一个容易忽略的点:claude-mem doctor检查时会给出很多状态信息,我发现很多人装好后根本不跑这一步。遇到问题第一件事就是把 doctor 的输出贴出来,很多问题其实系统已经告诉你答案了。

4.2 数据库连接与权限问题

数据库相关的报错很典型。最常见的是连接被拒绝,原因通常是 PostgreSQL 没启动、端口写错、或者密码不对。我的建议是先在命令行里直接拿 DATABASE_URL 测一下:

psql "postgresql://postgres:postgres@localhost:5432/claude_mem"

能连上,你再怀疑 claude-mem;连不上,问题根本不在 claude-mem 身上。

另一个坑是权限不足。有些同学图省事,直接用业务库的只读账号来连 claude-mem,结果写入记忆时报错。claude-mem 需要建表、写数据、查数据,所以那个账号至少要有对应的读写权限。第一次启动时它会尝试创建或更新表结构,如果你用的是权限过窄的账号,就会卡在这一步。我之前就是因为给了个只读账号,导致表面上装好了,一写入就报错,排查了很久才意识到是权限问题。

还要提醒一点:数据备份别忽略。claude-mem 里的记忆虽然不像代码那样不可再生,但积累几个月后也是一笔宝贵资产。用 PostgreSQL 自带的 pg_dump 定期备份,成本极低,真遇到重装系统或者误删数据时能少掉不少眼泪。

4.3 记忆膨胀与隐私边界

用久了你会发现,记忆会像滚雪球一样越滚越大。如果你发现查询响应变慢,或者 Claude Code 经常把一堆不相关的历史记忆塞进来干扰判断,大概率是记忆库里积累了太多低质量或过时的东西。

这时候就该动用清理手段了。你可以用对话方式让 Claude Code 删除某一类旧记忆,也可以直接删掉数据库里的表重建,再配合MEMORY_REMOVAL_THRESHOLD参数,让它在日常运行中自动压缩重复内容。我个人的习惯是每个月做一次大扫除,把那些已经完成的临时任务、不再相关的旧结论删掉,只保留项目级和长期偏好级的记忆。

关于隐私边界也得说两句。claude-mem 会把对话内容提炼后存到你的 PostgreSQL 里,所以数据库的安全等级和访问控制要自己把控。如果项目代码涉及敏感信息,一定别把包含密钥、口令的内容原样丢在对话里。记忆代理再智能,它也没有“替你保密”的义务,存储在本地意味着你对自己数据安全负全责。

4.4 配置写错时的三条避坑清单

最后把配置阶段容易出错的点统一整理成清单,照着检查比什么都管用。

  • 环境变量写在.mcp.json的 env 字段里,改完必须重启 Claude Code 会话才能生效。
  • 不要用项目根目录和全局配置互相覆盖。如果你两个地方都配置了 claude-mem,最终生效的是谁取决于 Claude Code 的合并规则,最容易出现“我明明改了配置却不生效”的诡异问题。
  • 数据库连接串里的特殊字符记得编码,比如密码里带 @ 符号,一定要转成%40,否则解析连接串时会出错。这个错误很隐蔽,报错信息还不一定直接指向它。

我在实际使用中的体会是:claude-mem 不是那种装上就能一劳永逸的神器,它更像一个需要定期互动的“私人档案管理员”。你和它配合得越好,它给你的价值就越大。最关键的是养成一个习惯——重要对话收尾时,顺手说一句“请记住这个结论”,每周抽几分钟检查一下记忆库。这样坚持下来,你会发现 Claude Code 从一个有点健忘的搭档,变成了真正懂你、懂项目的长期协作者。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询