claude-mem:给Claude装长期记忆,让AI记住你的项目偏好与决策 1. 项目概览claude-mem 是什么解决什么问题1.1 一句话理解 claude-memclaude-mem 是一个开源项目我给它的定义是给 Claude 装上长期记忆的外挂工具。它专门解决 Claude特别是 Claude Code、Claude Desktop 这类交互场景每次对话都“失忆”、不记得你之前说过什么、偏好的表达方式、踩过的坑、已经敲定的技术决策等问题。简单说你日常跟 Claude 聊天或让它写代码聊完关掉窗口之后下次再打开它对你的了解基本清零。claude-mem 就是把这个记忆曲线断掉让 Claude 能记住你的项目背景、个人风格、常用命令、既定结论并在后续对话里自动把相关记忆塞回上下文让 AI 看起来像真的“记得你”。我最早接触 claude-mem 是在一次持续开发多模块服务的场景里。第一天跟 Claude 敲定了目录结构、命名规范、数据库表字段风格第二天接着开发时它居然问我要不要新建一个我昨天明确说过“不要新建、沿用现有模式”的目录气得我当场搜有没有工具能跨会话保存记忆。当时试过手写一个脚本把关键对话追加到一个 notes.md然后再用 Claude Code 的 CLAUDE.md 手动粘贴但因为操作太繁琐坚持了不到一周就放弃。claude-mem 吸引我的地方在于它不只是简单存对话原文而是先做“记忆抽取”把真正有长期价值的事实、决策、偏好从对话流里捞出来再统一存储后续按需检索。这里要提前说明claude-mem 与 Anthropic 官方提供的 Memory 功能不是一回事。官方内置功能多数情况下是最基础的会话笔记保存而 claude-mem 给了你更大的自主权记忆存在哪、用什么模型抽取、检索时注入多少条、哪些项目隔离记忆你都能自己配置。对于有定制需求、注重数据隐私、或者想深度掌控 AI 记忆质量的开发者它比官方默认方案灵活得多。1.2 它解决的核心痛点我梳理了一下claude-mem 实际解决了三个层面的问题。第一层跨会话身份连续性。和大模型对话本质上是一场“无状态请求”Claude 本身并没有跨会话记忆。它看到的是你这次传入的全部文字上一次聊了什么在上一次请求结束后就随系统释放掉了。这导致每次新对话AI 需要重新认识你的角色、偏好、项目情况。claude-mem 通过本地持久化记忆 自动注入把“无状态”变成了“有状态”让 AI 第一次回复就显得懂行。第二层上下文浪费。如果你不想让 AI 失忆一个常见做法是每次都粘贴背景说明甚至把上次几十上百条消息全塞进去但这非常浪费 token而且越往后成本越高。claude-mem 的思路是抽取最核心的记忆片段按需检索只注入与当前问题相关的几条用最小化的 token 达到“我记得你”的效果同时能腾出更多上下文空间给真正需要处理的任务。第三层知识沉淀。不少开发团队把对话中的技术决策只留在聊天窗口里时间一长就再也找不回来。claude-mem 把重要的决策、偏好、注意事项沉淀成一个可持续查询的记忆库相当于给团队或给个人建立了一份和 AI 协作的“知识资产”。后面无论换不换会话窗这些沉淀都在你甚至可以把它当轻量级 wiki 用。1.3 适合谁用如果你想直接用官方桌面客户端闲聊不一定需要 claude-mem但如果你符合下面任一条它就值得实验主力用 Claude Code / Claude API 做开发希望 AI 记住项目结构、技术栈偏好、代码风格常用 Claude 做长周期写作、研究、内容运营希望它延续你的口吻和已确定的素材有数据隐私顾虑希望记忆完全存本地而不是放在某个云服务商的服务器上对现有记忆功能不满意想要手动编辑、导入导出、或按项目拆分记忆的高级控制权。我用下来的体感是claude-mem 不会让 AI 一夜之间变神奇但长期积累后它会让协作少很多“重新解释”的环节省下的是实打实的时间和上下文空间。2. 记忆原理与数据流拆解claude-mem 整体设计可以拆成四段监听 → 抽取 → 存储 → 注入。这四段是它的核心数据流理解了这一段后面配置起来就不会一头雾水。2.1 记忆是怎么来的会话记录 关键事实抽取监听环节在 Claude Code 场景里主要通过 hook 机制实现。Claude Code 支持在会话事件发生时触发外部脚本claude-mem 就在 PostToolUse、UserPromptSubmit 这类事件里挂上钩子把每次用户输入和 Claude 的回复文本抓下来。抓到的原始对话不会直接存进记忆库而是先送进抽取阶段。抽取阶段是由一个“记忆模型”来完成的默认走 Mem0 的引擎一个开源个性化记忆框架按语义把用户表述拆解成可复用的事实片段。你可以把抽取模型想象成一个自动化的文秘它阅读完整会话把“用户叫小林、项目用的是 React 18、后端接口遵循 RESTful 风格、数据库表统一用 snake_case”这类事实单独拎出来同时丢掉“今天天气还不错”“你能不能帮我看看这段报错”这些临时性内容。这里有个取舍值得注意抽取是异步的一般是在会话结束后或空闲时才运行不会阻塞你当前的对话。所以哪怕抽取模型调用了几百毫秒或几秒你也不会感知到延迟。我实际用下来它更像一个在后台默默做笔记的助手你继续跟 Claude 聊你的它自己抽自己的。2.2 记忆存到哪里SQLite 与 Markdown 双轨claude-mem 的记忆存储走的是双轨制。第一轨是 SQLite 数据库保存结构化记忆条目每条记忆会带元数据比如事实内容、创建时间、来源对话 id、所属项目、向量嵌入。这个结构化的库主要给后续检索用。第二轨是 Markdown 文件按时间或主题组织直接给人读、给人手改。我第一次用的时候没细看以为 Markdown 只是“导出展示”后来才发现它比想象中更重要。因为模型抽取记忆再聪明也会有偏差比如把一条结论性的对话截断得语义不全或把两个相似但不同的事实合并成了一个。这时候 Markdown 文件是可以直接打开改的。改完之后重新导入或等下一次运行时再读取记忆库就会按你修正后的版本走。SQLite 和 Markdown 双轨并行还有一个好处容灾。如果其中一个文件被误删或数据库损坏你有另一个来源可以恢复。我自己因为写脚本误删过 memory 文件夹当时 Markdown 那头还留着大部分文本内容重新同步一下损失没多大。2.3 记忆怎么用上下文注入机制到了注入阶段claude-mem 会在每次新的对话发起前把当前提问题文本和记忆库中的内容做相关性匹配。匹配方式不是单纯的关键词匹配而是经过向量相似度排序。每条记忆提前用嵌入模型生成向量新问题进来后同样转成向量计算余弦相似度找出最相关的 Top-N 条。找到之后它会把这些记忆按固定模板拼接到系统提示词或对话开头。我给一个具体示例它注入的内容大概是这种格式关于“用户”的记忆 - 用户偏好简洁回复优先给结论再给过程。 - 项目文档统一放在 docs/命名风格为 YYYY-MM-DD-主题。 - 之前讨论过使用 pnpm 而不是 npm理由节省磁盘空间、安装速度快。 关于“当前项目”的记忆 - 项目为电商微服务核心服务有 order-service、product-service。 - 数据库使用 PostgreSQL 16表名统一 snake_case。 - 鉴权方案确定为 JWT RBAC不引入额外框架。这段内容会被视为“已知信息”带入上下文。Claude 看到后回答自然会更贴合你之前的既定偏好。注入数量是可以配置的。默认 Top-K 的值通常取 5 到 10 条。我之前图省心设成 20很快发现上下文被大量记忆占满回复质量反而下降后来又调回 8。这里经验是记忆不是越多越好够用就好。2.4 隐私设计本地优先隐私方面claude-mem 默认是本地运行的。存储的 SQLite、Markdown、日志都在你自己机器或你自己服务器上。不像某些云服务它会偷偷把对话内容传回服务端去做“记忆分析”claude-mem 唯一的远程调用点是抽取和生成向量时的模型 API——这个取决于你配置用哪家模型默认走 Mem0 平台的 API也可以换成本地嵌入模型那几乎就是完全离线了。如果你有保密要求比如开发的是公司内部项目对话里带着客户名、业务数据建议直接把抽取和嵌入模型全改成本地模型。虽然效果可能略逊于云端大模型但敏感数据不离开你的机器这是很多企业采用它的最重要原因。我之前在配置里选过 OpenAI 的 embedding 接口它会把对话内容发往 OpenAI 做向量化。考虑到对话中可能提到内部系统代号这踩过隐私红线。后来换成 local embedding 方案所有计算都在本机隐私上才踏实。配置里对应的几个环境变量下文会提到。3. 实操30分钟部署一套可用的 claude-mem下面是我的实际部署流程。我尽量按最小可用路径来写每一步都标了为什么这么做避免你装完却不知道怎么配。先说明环境我用的 macOS终端是 zshNode.js v18Python 3.11主项目是 Claude Code 场景。3.1 环境准备与安装claude-mem 依赖 Node.js 环境和 Python 环境建议在动手前先确认这两个基础环境可用node -v python3 --version如果版本过低先升级到 Node 18、Python 3.10。接下来创建专门给 claude-mem 用的目录我习惯放在~/.claude-mem下和项目本身解耦mkdir -p ~/.claude-mem cd ~/.claude-mem git clone https://github.com/your-repo/claude-mem.git cd claude-mem npm install pip install -r requirements.txt这里的your-repo建议你替换成实际从 GitHub 上查到的 claude-mem 仓库地址。因为项目迭代快我不确定你现在看到的默认分支名称和依赖清单是否一致建议以仓库 README 为准。安装过程一般 3 到 5 分钟主要耗在 npm 和 pip 拉依赖上。如果你所在网络环境拉不下来注意配好 npm 和 pip 的镜像源。3.2 初始化 Mem0 引擎运行 claude-mem 前先初始化配置。它默认使用 Mem0 做记忆抽取所以需要先获取 Mem0 API Key。去 Mem0 平台注册一个账号生成 API Key然后写进环境变量export MEM0_API_KEYm0-xxxxxx export MEM0_API_BASE_URLhttps://api.mem0.ai如果你团队的模型调用走内网代理或中转需要把MEM0_API_BASE_URL改成你实际的网关地址。注意这里不是让你随便改而是提醒你它支持自定义。初始化命令通常是一键生成配置文件和目录结构的claude-mem init初始化后在~/.claude-mem下会多出几个文件最关键的有settings.json记忆模型的 API 配置、抽取频率、注入条数等参数persona.md描述“你想让 AI 记住什么角色定位”的提示词模板memory/目录后续存放 Markdown 记忆文件claude-mem.dbSQLite 数据库文件刚开始是空的。我建议初始化后先打开settings.json把默认的api_model改成你实际可用的模型标识。比如你用的是claude-3-5-sonnet或gpt-4o-mini就填对应名字。改名之后抽取质量会有直观差异。3.3 开启 Claude Code 钩子claude-mem 要能自动记录对话依赖 Claude Code 的 hooks 机制。Claude Code 支持通过settings.json来挂靠事件钩子claude-mem 初始化后会生成一个示例配置你需要合并进项目的.claude-code或者用户级别配置。关键的 hooks 配置示意如下{ hooks: { UserPromptSubmit: [ { matcher: , hooks: [ { type: command, command: claude-mem capture } ] } ], PostToolUse: [ { matcher: Bash, hooks: [ { type: command, command: claude-mem parse } ] } ] } }这段配置的作用是当用户提交提示词时claude-mem capture先把原文捕获当 Claude 执行完 Bash 工具后claude-mem parse再做事实抽取。前期测试时建议先只开 capture不开 parse避免每次工具调用都触发抽取影响响应速度。等确认 capture 正常记录后再把 parse 开启。触发之后会话窗口会有一个手动命令可用/claude-mem输入它能看到当前会话的摘要、记忆状态、已捕获条数。这条命令很重要它帮你在不查日志的情况下快速确认 claude-mem 有没有实际工作。3.4 配置记忆检索参数安装钩子后下一步是配置注入检索。主要参数有三个检索条数、相似度阈值、注入位置。检索条数在settings.json里对应字段通常是top_k。我给你的建议是第一次设 5跑几天看看回复质量再调。因为设太少了 AI 记不住关键信息设太多会挤占上下文窗口也可能把不相关的记忆也注入进来干扰判断。相似度阈值则是一个 0 到 1 之间的分数只有超过阈值的记忆才会被注入。默认一般在 0.2 到 0.3。我实际经验是阈值太低容易被噪声记忆干扰阈值太高则可能过滤掉有用信息。先按默认值跑再根据检索到的记忆是否准确来微调。注入位置可以选择放进系统提示词也可以放在用户消息前面。我偏好放系统提示词因为它会让 Claude 把记忆当作“背景事实”而不是“用户当前请求”这样它不会过度引用记忆中的原文而是自然地用记忆辅助回答。如果你希望它更直白地承认“我记得你之前说过”就放用户消息前。两种方式我都试过最终选了系统提示词方式。完成上面四步一个最小闭环已经通了Claude Code 会话发生时claude-mem 自动捕获对话会话结束后评估抽取记忆下一次对话开始前将相关记忆注入。剩下的就是让时间产生价值——用得越久记忆库越厚AI 的回复越合你心意。4. 关键配置参数与自定义技巧4.1 MEM0_API_KEY 与模型选择不少新手上来的第一个坑就是把MEM0_API_KEY配成一个无效值然后就怪程序不工作。这里必须强调MEM0_API_KEY是 Mem0 平台的密钥不是 Anthropic 或 OpenAI 的密钥。它是一个独立服务负责抽取记忆和生成嵌入。如果你公司愿意使用 OpenAI 单独做嵌入也可以让 claude-mem 改用 OpenAI Embedding API但这个 API Key 要配在另一个字段里。模型选择上我建议根据你的场景取个平衡如果你用 Claude Code抽取模型建议用该模型对应的主力版本这样对代码术语的理解更好如果你主要用 claude-mem 做长文写作记忆可以选gpt-4o-mini这类性价比高的选项抽取速度更快如果重视隐私且机器性能够可以换本地模型比如用 Ollama 跑llama3.1、qwen2.5等。我的个人配置是云端 API 用于提取摘要本地 embedding 模型用于向量化。这个“混合”组合在隐私和效果之间取了一个中间值。云模型只接收文本并返回结构化事实不碰嵌入过程本地模型不联网纯算向量。虽然配置起来多了一步但风险小很多。4.2 角色提示词persona.md与记忆风格persona.md是 claude-mem 抽取记忆时使用的“三观”设定。它决定了什么信息值得记为长期记忆什么信息该被丢弃。默认模板大致长这样“你是我的长期记忆助手从对话中抽取用户偏好、重要事实、已确定决策忽略闲聊和临时性话题。每个输出要点用第二人称描述用户。”这个模板建议按你的需求改。比如我是做技术开发的我加的设定是重点关注 - 用户对技术栈的明确选择及理由。 - 项目目录结构、命名规范的变更决定。 - 用户强调过不止一次的工作方式。 - 踩过的重大坑和对应的解决方案。 忽略 - 具体报错日志的完整内容。 - 与大方向无关的临时讨论。 - 用户随口吐槽但未形成结论的内容。改好之后重启 claude-mem 才生效。我第一版没改模板结果它把我闲聊“今晚吃火锅”和“这个库不错”都当成记忆存了注入的时候占用大量 token。加了限定词之后抽取质量明显收敛。还有一个经验persona 文件不要写太多条目的负面清单写太多反而让模型犹豫什么该存。我更推荐用正面描述“希望存什么”最多加两三条例外。4.3 存储路径与日志清理策略claude-mem 的默认存储路径在初始化生成的settings.json里可以改。我一般把它移到项目外部的专用目录比如~/.claude-mem避免误把记忆库提交到仓库也避免项目路径变化导致记忆路径失效。这个目录内存放三个东西SQLite 数据库、Markdown 记忆文件、日志文件。日志是最容易膨胀的因为它会把每次请求的记录和错误都写下来。我在运行两周后发现日志文件已经到 60 多 MB相当占磁盘。建议配置一个定时任务每月清理一次超过 30 天的日志find ~/.claude-mem/logs -name *.log -mtime 30 -delete如果你用的 Linux 或 macOS直接把这条加进 crontab 或者 launchd 即可。我是在 mac 上配了launchd每个月 1 号凌晨执行。这个清理不会影响记忆数据只删日志放心用。SQLite 数据库如果在长期运行后变得太大可以手动做一次 vaccumsqlite3 ~/.claude-mem/claude-mem.db VACUUM;它能压缩数据库释放碎片空间如果有很多记忆被删除、更新文件体积会明显变小。4.4 多项目隔离方案如果你跟我一样同时维护多个项目比如一个电商项目、一个博客、一个数据分析脚本库让所有项目共用同一个记忆库会互相干扰。电商项目的内存注入到博客写作任务里AI 会频繁跑偏。claude-mem 支持按工作目录来隔离项目关键就是在启动 hook 时给每个项目指定不同的--project或者通过目录名自动判断。我的做法是在 Claude Code 配置里把 claude-mem 的命令带上项目标识command: claude-mem capture --project ecommerce另一个项目就填claude-mem capture --project blog。这样 SQLite 数据库虽然只有一个文件但每条记录带上了project字段检索注入时会按当前项目过滤。相应地Markdown 记忆文件也会按项目分目录存放比如memory/ecommerce/2026-02-18.md。有两点要提醒。第一这个项目名一旦定下来就不要经常改否则历史记忆会像无家可归的孩子一样检索不到。第二如果你自己开新项目忘记加--project它会归到默认项目下之后在新项目里就找不到。我建议把配置模板复制一份到每个项目的.claude-code里而不是手动每次敲命令。5. 常见问题与排查记录5.1 钩子不触发/不记录对话钩子装了但没有任何反应这是出现频率最高的问题。第一步检查配置时看你的 Claude Code 配置文件放在哪个层级。如果放在项目的.claude-code/settings.json里那你必须在那个项目目录下运行claude-code才会触发在别的地方开会话配置根本没有被加载。第二步用命令行手动测试钩子能不能执行claude-mem capture如果命令本身有问题比如找不到 claude-mem那大概率是 PATH 没配置对。npm 全局安装的包一般能正常进 PATH如果是本地源码方式启动建议用绝对路径写进 hook 命令。我在全局安装后把命令写成了$HOME/.npm-global/bin/claude-mem保证即使 zsh 环境加载异常也能执行。第三步看日志。claude-mem 会在日志里记录每次 hook 触发时间和结果只要触发过这里必然有痕迹。如果日志里连一行都没有那就是没触发有报错则按报错信息拆。最典型的报错是MEM0_API_KEY not set说明环境变量没传给 hook 进程。记得检查你的环境变量是不是写进了 shell 配置文件并且在 claude-code 启动前就已经加载。5.2 记忆注入导致上下文拥塞有时候配置没问题但回复中充斥着大量记忆片段AI 回答变得啰嗦或前后不一致这是上下文拥塞的信号。原因通常是top_k设置过大把足够多的记忆全塞进去了再加上原本的对话和指令模型注意力被分散。我的处理方式是分三步降级先把top_k降回 5然后调整相似度阈值把 0.2 提到 0.35过滤掉不那么相关的边缘匹配最后如果还不行就清掉一批低质量的旧记忆。低质量记忆常见于早期用默认 persona 抽取的闲聊内容手动删除对应 Markdown 文件后再重建记忆索引即可。这里再补充一个细节某些版本的 claude-mem 会把注入的记忆放在一个固定 block 里你可以在系统提示词模板中加一行“上述记忆仅作背景若与当前问题无关忽略即可”能有效抑制它硬扯记忆。这属于很实用的 prompt 工程技巧值得试一次。5.3 记忆检索不到相关内容如果明明聊过某个话题后面再问时 AI 却像没听过一样多半是抽取阶段出了问题。先检查对话有没有被正常捕获。捕获正常但检索不到那就是向量化或存储环节的问题。一个常见原因是嵌入模型不统一。比如抽取时用本地模型生成向量检索时又改成云端模型两种模型生成的向量空间不同相似度计算就会失真。解决办法是把嵌入模型设定为一个固定值并确保抽取和检索共用同一个模型。另一个原因是你改过 persona 后旧的记忆还在库中但新问题检索时那些旧记忆虽然存在却排序太低没被选中。这时候可以用 debug 命令查看检索到的 top-k 条记忆及其相似度分数判断是不是分数低。如果是调低阈值即可。还有一个小概率问题是项目隔离当前会话的 project 和旧记忆的 project 不匹配导致检索时过滤掉了。这个问题最容易排查只要你开启过多项目隔离建议第一时间检查。5.4 隐私与成本控制claude-mem 使用云端 API 时成本消耗跟抽取频率、对话长度直接挂钩。默认设置下每次会话都会调用模型做抽取如果会话多成本堆积很快。我的建议是把抽取频率改成手动或间隔抽取比如只在会话结束时触发一次而不是每次工具调用后都 parse一遍。这样成本差不多能减少一半以上。隐私层面最重要的是意识到“哪些数据见了外网”。我有个简单办法在配置里把 API base 指向本地代理然后观察 claude-mem 日志中的请求 URL 和目标 host确认它到底连的是哪台服务器。如果发现某个 host 不在你的预期清单里立刻关掉对应开关。对于完全保密的项目直接用本地模型跑抽取和嵌入这一步一劳永逸。6. 扩展玩法与后续方向6.1 把记忆接入自动化工作流claude-mem 不只能给 Claude Code 用。因为它的核心是“记忆抽取 存储 检索”你完全可以把它的 CLI 集成到更多工作流里。比如写一个脚本每次 git commit 后让 claude-mem 把 commit 的动机和结论追加到记忆中之后再让 Claude 写周报时自动带上这些背景。或者用定时任务每天早晨自动抽取前一天所有会话的打结内容生成一份“昨日决策摘要”配合邮件或 Slack 发送。我自己做的一个例子是把 claude-mem 的记忆库和 Obsidian 笔记联动。因为记忆文件是 Markdown可以直接让 Obsidian 作为仓库打开这样你不仅能查 AI 记忆还能用 Obsidian 的图谱、链接、搜索来整理它。跨工具的打通很顺等于免费获得了一个半自动的“AI 协作知识库”。6.2 用 claude-mem 做知识库雏形如果使用时间超过几个月记忆库中的事实量积累到几百上千条它其实已经变成了一个轻量知识库。你可以基于记忆库做一些更上层的事情比如训练一个小的分类器识别哪些记忆是决策类、哪些是偏好类或者写一个检索界面按项目、时间、主题筛选记忆做人工复核。我的建议是定期清理和复核记忆库。每周花十分钟翻一翻新增的 Markdown 记忆有误删误存就手动改掉这个习惯能让记忆库质量长期维持在可用线之上避免时间一长变成垃圾堆。如果你发现某类记忆经常是错的就去调整 persona从源头纠正抽取方向。我至今仍在用 claude-mem但它对我来说早已不像一个“外挂工具”更像一个“协作习惯”开新会话前不用再啰嗦地介绍项目背景AI 能从记忆库中知道自己是谁、在做什么、你有哪些不可让步的原则。这种感觉是普通聊天窗口给不了的。如果你也是在长期项目和 AI 之间反复来回切换的人我建议花一个下午把这个工具跑通然后让它陪你跑上两星期你会回来感谢现在动手的自己。