☰
claude-mem 配 TaoToken:关掉终端再打开,AI 还记得上次聊到哪
2026/9/28 19:11:29 网站建设 项目流程

1. 关掉终端就失忆,这事到底卡在哪

如果你用 Claude Code 写过稍微长一点的项目,大概率遇到过这种场面:昨天跟它聊了两个小时,从目录结构到接口命名都定好了,今天新开一个终端窗口,它像第一次见到这个仓库一样,重新 ls、重新读文件、重新问你「这个项目是做什么的」。你只能把昨天的结论再复述一遍,聊到一半的 TODO 也得重新交代。

这不是模型变笨了,是会话上下文本身不跨进程。Claude Code 每次启动都是一个新 session,历史对话留在上一个进程里,进程一退,上下文就没了。项目文件还在磁盘上,但「我们上次决定用方案 B」「这个 TODO 先别动」这类决策信息,没有任何地方存。

claude-mem 要解决的就是这一段:把会话里值得留下的信息提炼出来,落到本地 SQLite,下次启动时再检索回来注入上下文。它不是一个新模型,也不是云端服务,本质是「会话结束写库、会话开始读库」的一层记忆中间件。适合谁?适合那种一个项目要跨好几天、多个 session 推进的开发者。如果你只是跑一次性脚本,它反而多余。

这篇不聊概念,直接给你能跑的东西:claude-mem 的 config.toml 骨架、SQLite 存储路径怎么配、以及关掉终端再打开验证记忆恢复的完整步骤。中间会用到 TaoToken 作为模型接入层,因为 claude-mem 提炼摘要、生成记忆这些动作都要调模型,走一个稳定的 API 入口会省掉很多环境折腾。

2. 前置:TaoToken 接入与 claude-mem 安装

先说清楚分工。claude-mem 负责「记忆的存取逻辑」,它自己不提供模型能力;真正做摘要提炼、检索相关性判断的,还是背后的 Claude 模型。所以你需要一个能稳定调用 Claude 的入口,这里用 TaoToken。

TaoToken 的定位是模型 API 接入层,官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api 。你需要先去控制台拿一个 API Key,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,Key 的创建和管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,遇到参数不确定就翻这里。

拿到 Key 之后,先把它写进环境变量,别硬编码进配置文件:

export TAOTOKEN_API_KEY="sk-你的key" export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="$TAOTOKEN_API_KEY"

Claude Code 和 claude-mem 都认ANTHROPIC_BASE_URL这个变量,指向 TaoToken 的 API 端点后,模型请求就走这里出去。如果你用的是 Claude Code 的 coding 场景,也可以直接参考 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 里的配置方式,思路一致。

接着装 claude-mem。它是 Claude Code 的插件,在 Claude Code 里执行:

/plugin install claude-mem@claude-plugins-official

装完确认一下插件目录里有没有生成默认配置。不同版本路径略有差异,一般在~/.claude/plugins/claude-mem/下。如果没看到 config.toml,下一步我们手动建。

3. 可复制配置:config.toml 骨架与 SQLite 路径

claude-mem 的核心配置就一个文件,我把它拆成三段看:模型接入、存储、检索行为。

先建目录和配置文件:

mkdir -p ~/.claude/plugins/claude-mem mkdir -p ~/.local/share/claude-mem touch ~/.claude/plugins/claude-mem/config.toml

然后写入下面这份骨架。注意db_path指向你刚建的目录,别放在项目仓库里,否则 git 会一直提示未跟踪文件。

# ~/.claude/plugins/claude-mem/config.toml [model] # 走 TaoToken 的 API 端点 base_url = "https://taotoken.net/api" api_key_env = "TAOTOKEN_API_KEY" model = "claude-sonnet-4-20250514" max_tokens = 2048 temperature = 0.2 [storage] # SQLite 数据库位置,建议放用户数据目录 db_path = "/Users/你的用户名/.local/share/claude-mem/memory.db" # 是否开启全文搜索索引 fts_enabled = true # 单条记忆最大字符数,超长会被截断 max_memory_chars = 4000 [retrieval] # 每次启动注入的最大记忆条数 top_k = 8 # 相关性阈值,低于此值不注入 min_score = 0.35 # 是否按项目路径过滤记忆 scope_by_project = true [extraction] # 会话结束时自动提炼 auto_extract = true # 提炼触发的最小对话轮数,太短的会话不存 min_turns = 4

几个参数值得单独说。scope_by_project = true是关键,它让记忆按项目路径隔离,你在 A 项目的决策不会污染 B 项目。min_turns = 4防止你只是问了一句「这个函数干嘛的」也被存成记忆,那种碎片没有检索价值。top_k别设太大,8 条左右够用,设到 20 会把上下文塞满,反而稀释了当前任务。

db_path里的用户名要换成你自己的。macOS 和 Linux 用~/.local/share/claude-mem/,Windows 建议换成C:\Users\你的用户名\AppData\Local\claude-mem\memory.db,路径分隔符用正斜杠或双反斜杠都行。

配好之后验证文件能被解析:

python3 -c "import tomllib; print(tomllib.load(open('/Users/你的用户名/.claude/plugins/claude-mem/config.toml','rb')))"

能打印出字典结构就说明 TOML 语法没问题。报错通常是引号或路径写错,对着上面骨架逐行核。

4. 验证:关掉终端再打开,记忆是否恢复

配置对不对,光看文件没用,得跑一遍完整闭环。下面这套步骤我实测过,你照着做能直接看到记忆恢复。

第一步,进项目目录,启动 Claude Code,做一次有决策含量的对话。比如:

cd ~/projects/docklog claude

然后在会话里明确说一个决策,比如「日志格式化用 rich.table,不用纯文本,因为要按严重级别上色」。聊够 4 轮以上,让min_turns触发。

第二步,正常退出 Claude Code,然后彻底关掉终端窗口。这一步是重点,不是切个 tab,是真的关掉,模拟第二天重开。

第三步,重新打开终端,进同一个项目目录,再启动:

cd ~/projects/docklog claude

第四步,什么都不解释,直接问:

上次我们定的日志格式化方案是什么?

如果配置生效,它应该能答出 rich.table 和上色这个决策,而不是反问你「什么日志方案」。这时候你可以去看数据库确认记忆真的落盘了:

sqlite3 ~/.local/share/claude-mem/memory.db "SELECT substr(content,1,120), created_at FROM memories ORDER BY created_at DESC LIMIT 5;"

能看到刚才那条决策的记录,说明写入链路通了。再验证检索链路:

sqlite3 ~/.local/share/claude-mem/memory.db "SELECT COUNT(*) FROM memories WHERE content MATCH 'rich';"

返回大于 0,说明全文索引也在工作。这两条 SQL 一条验证写、一条验证读,比只看 UI 提示靠谱。

如果你还想单独测模型对话链路是否通,可以用 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 里的对话入口发一条消息,确认 API Key 和端点没问题,排除是接入层而不是 claude-mem 的锅。

5. 本篇常见错排查

报错一:启动时提示no such table: memories。数据库文件建了但表没初始化。删掉空的 db 文件重启 Claude Code,让插件重新建表:

rm ~/.local/share/claude-mem/memory.db

别手动建表,schema 版本对不上会更麻烦。

报错二:记忆一直不写入。先看min_turns,对话太短不会触发提炼。再看auto_extract是不是被设成 false。最后确认模型调用没失败——如果 TaoToken 的 Key 过期或额度不足,提炼这一步会静默失败,日志里能看到 401 或 429。去 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 检查 Key 状态。

报错三:换了项目还能看到上个项目的记忆。scope_by_project没开,或者你两个项目路径被识别成同一个。确认配置里是true,并且启动 Claude Code 时确实在项目根目录,不是在父目录。

报错四:注入的记忆太多,回答变慢变糊。top_k调小,min_score调高。记忆不是越多越好,检索回来一堆弱相关的旧决策,会干扰当前任务。我一般把top_k压在 6 到 8。

报错五:SQLite 报database is locked。同时开了多个 Claude Code 实例写同一个 db。要么错开用,要么给每个项目配独立的db_path。多实例并发写 SQLite 本来就不是它的强项。

报错六:中文记忆检索不到。SQLite 默认的 FTS 分词对中文支持有限。如果fts_enabled开了还是搜不到,检查是不是用了MATCH语法但索引没建在中文列上。这种情况可以先用LIKE '%关键词%'兜底,虽然慢但能出结果。

6. 长期编码场景,把接入层固定下来

claude-mem 这类记忆插件,价值不在单次会话,而在你连续几天、十几个 session 推进同一个项目时,它帮你把「上次聊到哪」这件事从脑子里卸载出去。但它的前提是模型调用得稳——提炼失败一次,那段记忆就丢了,而且丢得无声无息。

所以如果你打算长期用 Claude Code 做项目,建议把 TaoToken 的接入配置固化到 shell 启动文件里,而不是每次手动 export。写进~/.zshrc或~/.bashrc:

# TaoToken 接入 export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的key"

这样每次开终端自动生效,claude-mem 的提炼和检索都不会因为环境变量缺失而断掉。Key 的轮换和额度管理在控制台处理,接入参数有疑问就查文档,长期编码和 Agent 编排的场景可以直接看 coding plan 那套配置。记忆能不能跨会话,最终取决于这条调用链每一环都不掉链子。

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

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

立即咨询