资讯详情

claude-mem:给 AI 编程助手永不丢失的记忆

📅 2026/10/4 12:05:36 | 华诺云谱 👁 阅读
claude-mem:给 AI 编程助手永不丢失的记忆
1. 为什么 AI 编程助手总在“失忆”从 claude-mem 的持久记忆说起如果你用过 Claude Code、Gemini CLI 或者 OpenClaw 这类 AI 编程工具大概率经历过这种场景昨天花了两个小时让助手理清了项目结构、技术栈和正在改的模块今天新开一个 session它又像刚入职一样问你“这个项目是做什么的”。你得重新喂一遍目录树、依赖版本、当前任务甚至要再解释一次“上次那个 bug 修到哪了”。这种重复劳动本质上是因为大多数 AI 编程助手的工作记忆只存在于单次会话里会话一断上下文就归零。claude-mem 想解决的就是这件事。它是一个面向 AI 编程助手的持久化记忆压缩系统核心思路是在后台自动捕获 agent 在 session 中的关键操作——执行的命令、读写的文件、tool call 的输入输出——然后用模型把这些信息压缩成结构化的语义摘要存进本地 SQLite 数据库。下次新开 session 时它再把最相关的上下文注入回去让助手看起来“记得”之前发生过什么。它适合谁个人开发者如果同时维护多个项目切换时不用反复交代背景团队里如果多人共用一套 AI 辅助流程可以把项目知识沉淀下来减少重复沟通。技术实现上底层用 SQLite FTS5 做全文检索配合向量检索做语义搜索形成混合检索能力。更关键的是它采用渐进式披露策略不会一次性把所有历史记忆塞进上下文而是先给最相关的摘要需要时再展开细节并且每个记忆注入都附带 token 消耗估算避免把上下文窗口烧光。安装方式也比较直接一行npx claude-mem install就能跑起来。它通过生命周期钩子嵌入 agent 工作流覆盖 SessionStart、UserPromptSubmit、PreToolUse、PostToolUse、SessionEnd 这几个关键节点全程自动化不需要你手写复杂配置。目前支持 Claude Code、OpenClaw、Gemini CLI、Codex、OpenCode 等主流平台。数据默认存在本地 SQLite 文件里不上传云端还可以通过标签排除不想被记录的敏感内容。项目自带 Web Viewer 界面默认在localhost:37777可以实时查看记忆流、按 observation ID 追溯历史操作。下面我会从记忆目录初始化、会话读写测试、重启后记忆回读确认这几个环节把 claude-mem 的接入和验证过程拆开讲清楚。如果你正在用 AI 编程助手做长期项目这套流程可以直接跟做。2. 接入前的准备TaoToken 与 claude-mem 的配合方式在正式配置 claude-mem 之前需要先明确一件事claude-mem 本身负责记忆的捕获、压缩和检索但它压缩记忆、生成语义摘要时仍然需要调用一个可用的模型服务。也就是说你需要一个稳定的 API 入口来支撑记忆压缩和检索时的模型调用。这里我用 TaoToken 作为模型服务入口来演示它的 API 地址是https://taotoken.net/api官网是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。为什么要把这两者放在一起讲因为 claude-mem 的工作流里记忆写入和检索并不是纯本地的字符串匹配它需要模型把原始操作日志压缩成结构化摘要也需要模型在检索时判断哪些记忆和当前任务相关。如果模型服务不稳定记忆压缩就会失败表现为 session 结束时没有新记忆写入或者新 session 启动时检索不到历史上下文。所以先把模型服务这一层配好再去装 claude-mem排障会清晰很多。你需要准备的东西不多一个 TaoToken 的 API Key以及确认你要接入的 AI 编程助手平台。claude-mem 支持 Claude Code、OpenClaw、Gemini CLI、Codex、OpenCode 等不同平台的配置入口不一样。以 Claude Code 为例它读取的是 settings 文件里的环境变量Codex 则可能涉及auth.json或类似的认证配置。不管哪个平台核心三件套都是Base URL、API Key、Model ID。Base URL 填https://taotoken.net/apiAPI Key 用你在控制台生成的 keyModel ID 根据你实际要用的模型填写。这里要提醒一点claude-mem 的记忆数据库默认存在本地路径通常在用户目录下的.claude-mem或项目内的.claude-mem目录中。初始化之前先确认这个目录有写权限否则会出现记忆写入失败但界面不报错的情况。你可以先手动创建目录并检查权限mkdir -p ~/.claude-mem ls -ld ~/.claude-mem如果输出里显示你的当前用户有rwx权限就可以继续。接下来安装 claude-memnpx claude-mem install安装完成后它会提示你选择要接入的平台或者自动检测当前环境。如果你用的是 Claude Code安装脚本会尝试把钩子写入对应的配置文件。此时不要急着开新 session先确认模型服务的环境变量已经生效。你可以在终端里临时导出变量做测试export TAOTOKEN_API_KEY你的_API_Key export TAOTOKEN_BASE_URLhttps://taotoken.net/api然后在同一个终端里启动 Claude Code让它执行一个简单任务比如读取当前目录下的package.json并总结依赖。如果模型调用正常说明 Base URL 和 Key 没问题。这一步看起来简单但后面记忆压缩失败时很多情况都是因为模型服务这一层没通而不是 claude-mem 本身的问题。另外claude-mem 的 Web Viewer 默认监听localhost:37777安装后可以通过浏览器打开这个地址查看记忆流和 observation 列表。如果打不开先检查端口是否被占用或者安装脚本是否成功启动了 viewer 进程。这个界面在后面验证记忆回读时很有用建议提前确认能正常访问。3. 可复制配置记忆目录初始化与 settings 片段这一节直接给可复制的配置片段。不同平台的配置文件路径和格式不一样我按 Claude Code 和 Codex 两种常见情况分别写。你只需要对照自己用的平台把对应片段放进配置文件即可。核心原则是Base URL 用https://taotoken.net/apiAPI Key 用你自己的Model ID 按实际模型填。先看 Claude Code 的 settings 配置。Claude Code 通常读取项目根目录或用户目录下的.claude/settings.json你也可以在~/.claude/settings.json里做全局配置。下面是一个可复制的 JSON 片段把模型服务指向 TaoToken同时保留 claude-mem 的钩子配置{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的_TaoToken_API_Key, ANTHROPIC_MODEL: 你的_Model_ID }, hooks: { SessionStart: [ { command: npx claude-mem hook session-start } ], UserPromptSubmit: [ { command: npx claude-mem hook user-prompt-submit } ], PreToolUse: [ { command: npx claude-mem hook pre-tool-use } ], PostToolUse: [ { command: npx claude-mem hook post-tool-use } ], SessionEnd: [ { command: npx claude-mem hook session-end } ] } }注意上面的ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY是 Claude Code 读取的环境变量名如果你用的平台不同变量名可能不一样。比如 Codex 可能读取OPENAI_BASE_URL和OPENAI_API_KEY或者通过auth.json配置。关键是 Base URL 必须指向https://taotoken.net/api不要多加路径后缀也不要带 UTM 参数。如果你用的是 Codex并且它通过auth.json管理认证可以这样写{ base_url: https://taotoken.net/api, api_key: 你的_TaoToken_API_Key, model: 你的_Model_ID }这个文件通常放在~/.codex/auth.json或项目内的.codex/auth.json具体路径以你本地 Codex 的文档为准。写完后用cat确认文件内容没有多余逗号或引号错误cat ~/.codex/auth.json | python -m json.tool如果 JSON 解析通过说明格式没问题。接下来初始化 claude-mem 的记忆目录。虽然安装脚本会自动创建但手动确认一次更稳妥npx claude-mem init --data-dir ~/.claude-mem执行后检查目录结构find ~/.claude-mem -maxdepth 2 -type f你应该能看到类似memory.db或observations.db的 SQLite 文件以及可能的config.json。如果目录是空的说明初始化没成功可以加--verbose看详细日志npx claude-mem init --data-dir ~/.claude-mem --verbose还有一个容易忽略的点claude-mem 的 Web Viewer 端口和数据库路径可以在配置里指定。如果你不想用默认的37777端口可以在~/.claude-mem/config.json里改{ dataDir: /Users/你的用户名/.claude-mem, viewerPort: 37777, model: { baseUrl: https://taotoken.net/api, apiKey: 你的_TaoToken_API_Key, modelId: 你的_Model_ID } }这个片段把记忆目录、Viewer 端口和模型服务三件事都写在一起方便统一管理。改完后重启 claude-mem 相关进程或者重新开一个 session 让钩子重新加载配置。如果你用的是 Cline MCP 或 CC Switch 这类工具配置入口可能在它们的设置界面里但核心三件套不变Base URL、Key、Model ID。把这三项填对记忆写入和检索才有模型可用。4. 验证请求会话读写测试与重启后记忆回读配置写完后必须做一次完整的读写验证否则你无法确认记忆是真的写进去了还是只是界面显示好看。验证分三步第一次 session 写入记忆、查看记忆流、重启后新 session 回读。第一步开一个 Claude Code session让它做一个有明确痕迹的任务。比如让它读取当前项目的README.md然后总结项目用途并修改一个临时文件。你可以直接输入请读取当前目录的 README.md总结这个项目是做什么的然后在 /tmp/claude-mem-test.txt 里写入一句话claude-mem 记忆测试。等它执行完退出 session。此时 claude-mem 的 SessionEnd 钩子应该已经触发把这次操作压缩成记忆并写入 SQLite。你可以打开 Web Viewer 确认open http://localhost:37777在界面里找 observations 或 memory stream应该能看到刚才那次 session 的记录包括读取的文件、执行的命令、生成的摘要。如果界面是空的先检查钩子是否真的执行了。可以在终端里手动跑一次 session-end 钩子看输出npx claude-mem hook session-end --verbose如果报错提到模型调用失败大概率是 Base URL 或 API Key 不对。如果报错提到数据库写入失败检查~/.claude-mem目录权限。第二步直接查 SQLite 数据库确认记忆落盘。claude-mem 用 SQLite FTS5你可以用sqlite3命令查看sqlite3 ~/.claude-mem/memory.db SELECT id, summary, created_at FROM observations ORDER BY created_at DESC LIMIT 5;如果表名不是observations可以先列出所有表sqlite3 ~/.claude-mem/memory.db .tables找到存记忆的表后再查最近几条记录。你能看到摘要文本和时间戳说明写入成功。这一步比看 Web Viewer 更可靠因为界面可能有缓存。第三步重启后回读。完全退出 Claude Code重新开一个新 session然后问它你还记得我上次让你在 /tmp/claude-mem-test.txt 里写了什么吗如果 claude-mem 正常工作助手应该能回答出“claude-mem 记忆测试”这句话或者至少提到上次 session 里操作过这个文件。如果它完全不知道说明 SessionStart 钩子没有把相关记忆注入上下文。此时可以手动触发检索npx claude-mem search claude-mem-test.txt --limit 5这个命令会走混合检索先全文匹配再语义匹配。如果返回结果里有上次的记忆摘要但新 session 里助手还是不知道那问题出在注入环节而不是检索环节。检查 SessionStart 钩子的配置是否正确以及注入的 token 估算是否超限。claude-mem 的渐进式披露策略会在 token 预算内优先注入最相关的摘要如果预算设得太小可能刚好没注入到你需要的那条。另外你可以用 observation ID 做精准引用。在 Web Viewer 里找到那条记忆的 ID然后在对话里写请引用 observation ID 123 的内容告诉我上次测试写了什么。如果助手能准确调取说明引用机制也通了。走到这一步记忆的写入、检索、跨会话恢复三个环节就都验证过了。5. 常见报错排查401、local proxy failed 与 reading choices即使配置看起来没问题实际跑的时候还是会遇到一些典型报错。这一节列几个我遇到过的以及对应的排查方向。第一个是 401 未授权。报错通常长这样Error: 401 Unauthorized - invalid api key这几乎都是 API Key 的问题。先确认你复制的是完整的 key没有多余空格或换行。然后检查环境变量是否真的被读取到了echo $ANTHROPIC_API_KEY如果输出为空说明变量没导出或者配置文件路径不对。Claude Code 读取的是.claude/settings.json里的env字段如果你改的是~/.bashrc但没重启终端也不会生效。最稳妥的方式是在 settings.json 里直接写 key而不是依赖 shell 环境变量。另外确认 Base URL 是https://taotoken.net/api不要写成https://taotoken.net/api/v1或其他路径多余的路径可能导致鉴权失败。第二个是 local proxy failed。这个报错在 claude-mem 的钩子日志里比较常见Error: local proxy failed to connect它通常意味着 claude-mem 的本地 viewer 或代理进程没起来。先检查端口lsof -i :37777如果没有输出说明 viewer 没启动。可以手动启动npx claude-mem viewer --port 37777如果端口被其他进程占用换一个端口并同步更新 config.json 里的viewerPort。还有一种情况是钩子执行时找不到 claude-mem 的可执行文件尤其是在全局安装和 npx 混用时。建议统一用npx claude-mem避免路径问题。第三个是 reading choices 相关报错。这个通常出现在模型返回格式不符合预期时Error: failed to parse response, reading choices fieldclaude-mem 在压缩记忆时期望模型返回结构化的 JSON 或特定格式的文本。如果模型返回了非预期格式解析就会失败。排查方向有两个一是确认 Model ID 是否正确有些模型不支持结构化输出二是检查 Base URL 是否指向了兼容的接口。你可以先用一个简单的 curl 测试模型服务curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer 你的_API_Key \ -H Content-Type: application/json \ -d {model:你的_Model_ID,messages:[{role:user,content:回复 OK}]}如果这个请求返回正常说明模型服务本身没问题问题在 claude-mem 的解析逻辑或模型输出格式上。可以尝试换一个支持 JSON mode 的模型或者在 claude-mem 配置里调整输出格式相关的参数。第四个是 OAuth 相关报错。如果你用的是 Claude Code 的 OAuth 登录方式而不是 API Key可能会看到Error: OAuth token expired or invalid这种情况下claude-mem 的钩子可能无法拿到有效的认证信息。建议在接入 claude-mem 时统一用 API Key 方式而不是 OAuth。把ANTHROPIC_API_KEY配好避免 OAuth token 过期导致记忆写入中断。如果你同时用了 CC Switch 或 Cline MCP确认这些工具没有覆盖掉你的 Base URL 和 Key。三件套必须一致Base URL 是https://taotoken.net/apiKey 是同一个Model ID 也是同一个。最后提醒一点claude-mem 的记忆数据库是本地文件如果你在多个项目间切换确认每个项目用的 dataDir 是独立的还是共享的。共享的话检索时可能混入其他项目的记忆独立的话跨项目上下文就不会自动带过去。根据你的实际需求选择。6. 让记忆真正可用长期编码场景下的接入建议验证通过之后claude-mem 就可以进入日常使用了。但要让它在长期编码场景里真正发挥作用还有几个细节值得注意。第一记忆目录的备份和清理。claude-mem 的数据存在本地 SQLite 里时间久了文件会变大。你可以定期备份~/.claude-mem/memory.db尤其是在换机器或重装系统前。清理的话不建议直接删库而是用 claude-mem 提供的命令按时间或标签清理npx claude-mem prune --older-than 90d这样可以保留最近三个月的记忆避免检索时被太旧的信息干扰。第二标签排除敏感内容。如果你在 session 里处理了包含密钥、内部地址或个人信息的内容可以通过标签让 claude-mem 跳过记录。在配置里加排除规则{ excludeTags: [secret, internal, pii] }然后在对话里给敏感内容打上对应标签claude-mem 就不会把它写入记忆库。这个机制在团队共用记忆库时尤其重要。第三结合 Coding Plan 做长期 Agent。如果你打算让 AI 编程助手长期跟进一个项目建议把 claude-mem 和 Coding Plan 配合使用。Coding Plan 适合长期编码和 Agent 场景claude-mem 负责记忆持久化两者结合可以让助手在多个 session 之间保持任务连续性。接入入口在https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content配置方式同样是 Base URL Key Model ID 三件套。第四验证模型对话是否正常。如果你不确定当前模型服务是否可用可以先用模型对话做一次简单测试入口在https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。确认模型能正常回复后再去跑 claude-mem 的钩子排障会少走弯路。如果你在配置过程中遇到鉴权或接入问题可以直接查接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。需要生成或管理 API Key 的话入口在https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。控制台在https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content可以查看用量和调用情况。最后说一个实际经验claude-mem 的记忆注入不是越多越好。渐进式披露的意义在于控制 token 消耗如果你发现新 session 启动后助手还是“记不住”先别急着调大注入上限而是检查检索是否命中了正确的记忆。用npx claude-mem search 关键词手动搜一下确认记忆库里有这条记录再去看注入环节。很多时候问题不在记忆本身而在检索关键词和当前任务的语义匹配度上。把 observation ID 引用用起来比模糊检索更可靠。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑