首页 / 资讯中心 / 文章详情

省Token利器-Claude-mem:用SQLite+Chroma给Claude Code做本地记忆层

省Token利器-Claude-mem:用SQLite+Chroma给Claude Code做本地记忆层 ★ FEATURED ARTICLE
1. Claude Code 长会话为什么越聊越贵从上下文重复理解说起如果你用 Claude Code 做过稍微大一点的项目大概率遇到过这种情况一个会话聊到几十轮之后响应开始变慢账单也开始变得不太好看。明明只是让它改一个函数它却先把整个项目结构扫一遍再读几个相关文件然后才动手。这些动作本身没错但问题是——下一个会话里它还会把这些事再做一遍。这就是 Claude Code 长会话下 Token 消耗快的核心原因Agent 在理解上下文的过程中会不停地 tool_call去读文件、找依赖、理解项目结构。虽然大模型的 API 计费大头在输出但输入侧的上下文累积和重复探索轮次一多就是一笔不小的开销。更麻烦的是Claude Code 自带的项目级 Memory 只能存一些术语、约束、易错点这类轻量信息它没法回答这个项目还有哪些没做昨天我改了什么最近几次提交有没有遗漏功能这种带时间线和检索需求的问题。Claude-mem 就是冲着这个痛点来的。它给 Claude Code 加了一层本地记忆用 SQLite 存结构化记忆谁在什么时候做了什么、项目进度、事实抽取用 Chroma 做向量检索按语义召回相关历史再通过一个 mem-search MCP 把按需召回接进 Agent 的工作流。简单说它把重复的上下文理解压缩成一次写入、多次召回让 Agent 不用每次都从零开始探索。它适合谁我的判断是项目会持续迭代的人。如果你做完一个项目就再也不碰用 Claude-mem 反而多了一层写入开销省不了多少。但如果你的项目要反复迭代、跨天跨周地推进那它越用越省——因为记忆是累积的召回是精准的。这篇就按装好、配好、验证召回、对比 Token的顺序把可复制的步骤走一遍。2. 前置准备TaoToken 统一 Key 与 Claude Code 环境在装 Claude-mem 之前先把模型接入这一层理顺。我自己的做法是用 TaoToken 做统一入口这样 Claude Code、Codex、Cline 这些工具共用一个 Key切换模型不用改一堆配置排查问题时也少一层变量。TaoToken 在这里的角色是模型 API 的统一网关你拿到一个 Key配好 Base URL就能在 Claude Code 里正常调用模型。它不是什么绕过限制的东西就是一个正常的 API 接入服务官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 。你需要准备三样东西第一一个可用的 API Key。去控制台创建地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 创建完在 API Keys 页面能看到页面是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。Key 只显示一次记得存好。第二确认 Claude Code 已经装好并能跑起来。终端里执行claude --version能看到版本号就行。第三Node.js 环境。Claude-mem 的安装依赖 npm建议 Node 18 以上。执行node -v确认。关于模型 IDClaude Code 场景下常用的就是 Anthropic 系列的模型标识具体以你控制台里可选的为准。配置的时候 Base URL、Key、Model ID 这三件套要一起对上缺一个都会报错。这里有个我踩过的坑很多人配 Claude Code 的时候只改了 Key忘了 Base URL 还指向默认地址结果请求发出去一直 401。所以下面配置片段里我把三件套都写全你照着填就行。另外提醒一句Claude-mem 本身是本地记忆层它不替代编辑器也不替代 Claude Code它是在 Claude Code 的工作流里加了一个 MCP 服务。理解这一点后面的配置就不会乱。3. 可复制配置Claude-mem 安装、SQLite/Chroma 初始化与 MCP 接入这一节是核心我把安装、配置、MCP 接入拆成可复制的片段。你按顺序执行遇到报错对照第 5 节。3.1 安装 Claude-memClaude-mem 通过 npm 全局安装。终端执行npm install -g claude-mem装完之后验证claude-mem --version能输出版本号就说明装好了。如果提示 command not found检查 npm 全局 bin 目录有没有加到 PATH 里执行npm config get prefix看看路径。3.2 初始化本地记忆库Claude-mem 会在本地建两个存储SQLite 存结构化记忆Chroma 存向量。初始化命令claude-mem init执行后它会在你的用户目录下创建数据文件夹默认路径类似~/.claude-mem/里面会有memory.dbSQLite和chroma/向量库目录。你可以用下面的命令确认ls -la ~/.claude-mem/看到memory.db和chroma目录就对了。SQLite 文件是结构化记忆的落盘位置Chroma 目录是向量索引的落盘位置两者配合完成结构化查询 语义召回。3.3 配置 Claude Code 接入 TaoTokenClaude Code 的配置走 settings 文件。在项目根目录或用户目录下创建/编辑.claude/settings.json写入{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的_TaoToken_Key, ANTHROPIC_MODEL: 你的模型ID } }三件套对应关系Base URL 填https://taotoken.net/apiKey 填你在控制台创建的那串Model ID 填你控制台里可选的模型标识。如果你用的是 Codex配置在~/.codex/auth.json结构类似把 base_url 和 api_key 对上即可。3.4 把 mem-search MCP 接进 Claude CodeClaude-mem 自带一个 mem-search MCP 服务需要注册到 Claude Code 的 MCP 配置里。编辑 MCP 配置文件通常在~/.claude/mcp.json或项目级.mcp.json加入{ mcpServers: { claude-mem: { command: claude-mem, args: [mcp, serve], env: { CLAUDE_MEM_HOME: ~/.claude-mem } } } }保存后重启 Claude Code让它重新加载 MCP。你可以在 Claude Code 里执行/mcp查看已注册的服务看到 claude-mem 处于 connected 状态就成功了。如果你用的是 Cline 或 CC Switch 这类工具MCP 配置的字段名可能略有差异但核心三件套不变command 指向 claude-memargs 是mcp serveenv 里指定记忆库路径。CC Switch 场景下同样要把 Base URL、Key、Model ID 三件套配全否则 MCP 连上了但模型请求还是失败。3.5 记忆写入与召回的配置项Claude-mem 的行为可以通过环境变量微调。在 settings 的 env 里可以加{ env: { CLAUDE_MEM_AUTO_CAPTURE: true, CLAUDE_MEM_RECALL_TOP_K: 5 } }AUTO_CAPTURE控制是否在会话中自动捕获记忆RECALL_TOP_K控制每次召回返回几条相关记忆。Top K 设太大召回噪音多设太小可能漏掉关键上下文5 是个比较稳的起点你可以按项目复杂度调。配置到这一步安装和接入就完成了。下一节验证请求和召回是否真的工作。4. 验证请求与召回确认记忆写入、mem-search 命中与 Token 对比配置完不验证等于没配。这一节用几条命令确认记忆层真的在工作。4.1 验证模型请求通路先在 Claude Code 里发一条最简单的请求确认 TaoToken 这条链路是通的claude -p 回复 ok如果返回ok说明 Base URL、Key、Model ID 三件套没问题。如果报 401回到 3.3 检查 Key 和 Base URL如果报 model not found检查 Model ID 拼写。4.2 验证记忆写入在 Claude Code 里做一次有实际内容的操作比如让它读一个文件并总结claude -p 读取 README.md 并总结这个项目的用途执行完后查 SQLite 里有没有写入记录sqlite3 ~/.claude-mem/memory.db SELECT id, substr(content,1,80), created_at FROM memories ORDER BY created_at DESC LIMIT 5;能看到刚才那次操作的记忆条目说明结构化写入成功。表名和字段可能因版本略有差异如果报 no such table先执行.tables看看实际表名。4.3 验证向量召回再开一个新会话问一个需要历史上下文的问题claude -p 这个项目之前总结过什么观察 Claude Code 的 tool_call 日志应该能看到它调用了 claude-mem 的 mem-search。你也可以直接测 MCP 的召回claude-mem search 项目用途返回结果里应该包含 4.2 里写入的那条记忆。这一步成功说明 Chroma 向量检索和 SQLite 结构化查询都在正常工作。4.4 Token 用量对比这是最关键的一步。找一个你熟悉的、有一定复杂度的任务比如给某个模块加一个参数校验并更新测试。分两次跑第一次关掉 Claude-mem把 MCP 配置里的 claude-mem 注释掉重启 Claude Code执行任务记录 Claude Code 显示的 token 用量。第二次开启 Claude-mem在已经积累了一些记忆的前提下执行同类任务记录用量。我的实测是在项目已经跑过几轮、记忆库里有相关上下文的情况下第二次的输入 token 明显下降因为 Agent 不用再从头探索项目结构直接召回相关记忆就够了。但要注意如果记忆库是空的第一次开启 Claude-mem 反而会多一点写入开销。所以对比要在记忆已积累的前提下做才反映真实收益。你可以用下面的方式粗略统计claude -p 任务描述 --output-format json | jq .usage把两次的 usage 字段拉出来对比 input_tokens 和 output_tokens差异一目了然。5. 常见报错排查401、local proxy failed、reading choices、OAuth 逐条对照这一节把我遇到过和社区里高频的报错列出来对照处理。401 Unauthorized最常见。原因通常是 Key 不对、Base URL 没改、或者 Key 过期。检查.claude/settings.json里的ANTHROPIC_API_KEY和ANTHROPIC_BASE_URL是否都填了。特别注意 Base URL 结尾不要多加斜杠https://taotoken.net/api就是完整地址。如果用的是 Codex检查~/.codex/auth.json里的字段名是否匹配。local proxy failed这个报错通常出现在 MCP 服务启动失败时。先确认claude-mem命令能单独跑起来执行claude-mem mcp serve看有没有报错。如果提示端口占用或路径不存在检查CLAUDE_MEM_HOME指向的目录是否存在。另外确认 Node 版本够高低版本 Node 会导致 MCP 进程起不来。reading choices 相关报错这类错误一般出现在模型返回结构不符合预期时常见于 Model ID 填错或模型不支持当前调用格式。回到 3.3 确认 Model ID 是控制台里实际可用的标识。如果换了模型还是报检查是不是 MCP 返回的记忆格式和当前 Claude Code 版本不兼容升级 Claude-mem 到最新版试试。OAuth 相关报错如果你之前用 OAuth 方式登录过 Claude Code配置里可能残留了 OAuth 的凭据和 API Key 方式冲突。解决方法是清理旧的 OAuth 缓存确保 settings 里走的是 API Key 模式。具体就是检查有没有ANTHROPIC_AUTH_TOKEN之类的残留字段删掉只保留ANTHROPIC_API_KEY。MCP 显示 connected 但召回为空说明 MCP 通了但记忆库是空的或者召回 Top K 太小。先确认 4.2 的写入步骤成功再调大CLAUDE_MEM_RECALL_TOP_K。SQLite 报 database is locked多个 Claude Code 实例同时写同一个记忆库会锁。确保同一时间只有一个实例在写或者给不同项目配不同的CLAUDE_MEM_HOME。排查的核心思路是分层先确认模型请求通401 类再确认 MCP 服务起local proxy 类最后确认记忆读写正常召回为空类。一层一层来别跳步。6. 把记忆层用成长期资产接入文档、模型对话与 Coding Plan 的选择Claude-mem 这类工具的价值不在装的那一下而在用起来之后。我的经验是项目迭代越频繁记忆库越厚召回越准省下的 Token 越多。反过来一次性项目用它就是纯开销。所以先想清楚你的项目是不是会持续迭代再决定要不要长期挂着。如果你在配置过程中卡在接入环节TaoToken 的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有 Base URL、Key、Model ID 的完整说明。想先验证某个模型的行为再决定用哪个可以去模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 直接试。如果你是要长期做编码和 Agent 任务Coding Plan 页面 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 里有适合持续迭代场景的方案说明。最后给一个实用技巧定期清理记忆库。SQLite 里的记忆条目会随时间累积太久远的、和当前项目无关的记忆会稀释召回质量。可以每隔一段时间执行一次清理把超过一定天数的低价值记忆删掉保持召回精准。命令类似sqlite3 ~/.claude-mem/memory.db DELETE FROM memories WHERE created_at date(now,-60 days) AND importance 3;具体字段名按你的版本调整。清理完记得让 Chroma 重建索引否则向量库里还留着已删条目的残影。这一步做完你的记忆层就是一个持续增值的资产而不是越堆越乱的仓库。
阅读完成 · 觉得有帮助?
咨询建站