1. Claude Code 记忆系统到底解决了什么问题
Claude Code 的记忆系统,简单说就是让 AI 编程助手在会话结束后还能"记得"你的项目背景、技术偏好和历史决策。它由短期记忆(会话内的上下文窗口和实时对话流)和长期记忆(跨会话的文件式记忆、观察者记录、知识图谱、会话桥接)两部分组成,适合所有用 Claude Code 做长期项目的开发者,尤其是那些每次重开对话都要重新解释一遍项目背景的人。
我刚开始用 Claude Code 的时候,最头疼的就是每次新开会话,它就像失忆一样。昨天刚跟它说清楚项目用的是 FastAPI + PostgreSQL,今天再问它写个接口,它又默认给你生成 Flask 的代码。你跟它解释了半天架构决策,关掉终端再打开,全部归零。这不是模型能力问题,是记忆机制没配置好。
Claude Code 本身内置了一套自主记忆系统,但很多人只用了最基础的部分,甚至完全没意识到长期记忆机制的存在。结果就是每次对话都从零开始,效率极低。这篇文章会把短期记忆和长期记忆的协作机制拆开讲清楚,然后给出可以直接复制的配置片段和验证步骤,让你在真实项目里把短期记忆到长期记忆的转化跑通。
核心要解决的问题有三个:第一,会话内的上下文窗口有限,超出部分会被截断,AI 看不到;第二,会话结束后,上下文窗口清空,所有信息丢失;第三,新会话启动时,AI 不知道你是谁、在做什么项目、之前做了什么决策。Claude Code 的记忆系统就是围绕这三个问题设计的,而且整个过程尽量做到自动化,不需要你手动说"记住这个"。
理解这套机制的关键在于搞清楚一个转化链路:短期记忆怎么变成长期记忆,谁来决定"该记住什么",新会话怎么把长期记忆重新注入上下文。下面按这个链路逐步拆解。
2. TaoToken 前置配置与 Claude Code 接入准备
在深入记忆系统之前,需要先把 Claude Code 的运行环境搭好。Claude Code 需要对接模型服务,这里用 TaoToken 来做接入,它提供了兼容 Anthropic 接口的 API 端点,配置起来比较直接。
TaoToken 的官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=,API 端点是 https://taotoken.net/api。你需要先在控制台创建一个 API Key,然后配置到 Claude Code 的环境变量里。
具体操作路径:打开 https://taotoken.net/api-keys 创建密钥,然后在终端里设置环境变量。Claude Code 读取的是ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY这两个变量。
# 设置 TaoToken 的 API 端点和密钥 export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="你的TaoToken密钥" # 验证环境变量是否生效 echo $ANTHROPIC_BASE_URL echo $ANTHROPIC_API_KEY如果你用的是 Windows PowerShell,设置方式略有不同:
$env:ANTHROPIC_BASE_URL = "https://taotoken.net/api" $env:ANTHROPIC_API_KEY = "你的TaoToken密钥"设置完之后,安装 Claude Code:
npm install -g @anthropic-ai/claude-code安装完成后,进入你的项目目录,直接运行claude就能启动。第一次启动时它会读取环境变量里的 API 配置,如果配置正确,你就能正常对话了。
这里有个容易踩的坑:环境变量只在当前终端会话有效,关掉终端就没了。如果你希望永久生效,需要写进 shell 配置文件。比如 bash 用户写进~/.bashrc,zsh 用户写进~/.zshrc:
# 追加到 ~/.zshrc 或 ~/.bashrc echo 'export ANTHROPIC_BASE_URL="https://taotoken.net/api"' >> ~/.zshrc echo 'export ANTHROPIC_API_KEY="你的TaoToken密钥"' >> ~/.zshrc source ~/.zshrc配置好之后,Claude Code 的短期记忆机制(上下文窗口 + Transcript 实时流)会自动生效,不需要额外配置。长期记忆的五个机制里,Auto Memory 和 Transcript 归档也是零配置自动运行的,另外三个(claude-mem、memory MCP、session-bridge)需要手动安装和配置。
如果你还没创建 API Key,可以先到 https://taotoken.net/api-keys 生成一个。模型选择方面,Claude Code 默认会调用 Claude 系列模型,TaoToken 的接口兼容这套调用方式,不需要额外改模型 ID。
3. 可复制的记忆系统配置片段
这一节给出完整的配置文件片段,包括 Claude Code 的 settings 配置、claude-mem 的安装、memory MCP 的注册、以及 session-bridge 的 hooks 配置。你可以直接复制到对应路径。
3.1 Claude Code settings.json 配置
Claude Code 的全局配置文件在~/.claude/settings.json,项目级配置在项目根目录的.claude/settings.json。记忆系统相关的配置主要涉及 hooks 和 MCP 服务注册。
{ "hooks": { "SessionStart": [ { "matcher": "", "hooks": [ { "type": "command", "command": "python3 ~/.claude/scripts/session-bridge.py start" } ] } ], "SessionEnd": [ { "matcher": "", "hooks": [ { "type": "command", "command": "python3 ~/.claude/scripts/session-bridge.py end" } ] } ] }, "mcpServers": { "memory": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-memory"] } } }这个配置做了两件事:注册了 SessionStart 和 SessionEnd 两个 hook,分别调用 session-bridge 脚本的 start 和 end 子命令;注册了 memory MCP 服务,让 AI 可以在对话中主动构建知识图谱。
3.2 claude-mem 安装配置
claude-mem 是一个通过 hooks 自动拦截工具调用并记录观察的插件。安装方式:
# 添加插件源 claude plugins add thedotmack/claude-mem # 安装 claude-mem 运行时 npx claude-mem install安装完成后,claude-mem 会自动注册 UserPromptSubmit、PostToolUse、SessionEnd 三个 hook。你可以在~/.claude/settings.json里看到它追加的配置。claude-mem 的数据存在 SQLite 和 ChromaDB 里,路径默认在~/.claude-mem/下。
3.3 session-bridge.py 脚本
session-bridge 的核心逻辑是一个 Python 脚本,负责在会话结束时保存指针,在会话启动时读取上次的 transcript 并提取摘要注入上下文。把下面的脚本保存到~/.claude/scripts/session-bridge.py:
#!/usr/bin/env python3 import json import sys import os from datetime import datetime, timezone from pathlib import Path CLAUDE_DIR = Path.home() / ".claude" LAST_SESSION_FILE = CLAUDE_DIR / "last-session.json" def handle_session_end(): data = json.load(sys.stdin) info = { "session_id": data.get("session_id"), "cwd": data.get("cwd"), "transcript_path": data.get("transcript_path"), "ended_at": datetime.now(timezone.utc).isoformat(), } CLAUDE_DIR.mkdir(parents=True, exist_ok=True) with open(LAST_SESSION_FILE, "w") as f: json.dump(info, f, indent=2) def handle_session_start(): if not LAST_SESSION_FILE.exists(): return with open(LAST_SESSION_FILE) as f: last = json.load(f) transcript_path = last.get("transcript_path") if not transcript_path or not os.path.exists(transcript_path): return messages = [] with open(transcript_path) as f: for line in f: try: entry = json.loads(line) except json.JSONDecodeError: continue if entry.get("type") == "user": content = entry.get("message", {}).get("content", "") if isinstance(content, str) and content.strip(): messages.append(("user", content[:250])) elif entry.get("type") == "assistant": content = entry.get("message", {}).get("content", []) if isinstance(content, list): for block in content: if block.get("type") == "text": messages.append(("assistant", block["text"][:250])) recent = messages[-16:] if recent: print("=== 上次会话摘要 ===") for role, text in recent: print(f"[{role}] {text}") print("=== 摘要结束 ===") if __name__ == "__main__": cmd = sys.argv[1] if len(sys.argv) > 1 else "" if cmd == "end": handle_session_end() elif cmd == "start": handle_session_start()保存后给执行权限:
chmod +x ~/.claude/scripts/session-bridge.py3.4 Auto Memory 文件结构
Auto Memory 是 Claude Code 内置的机制,不需要额外配置,但你需要知道它的文件结构,方便排查问题。记忆文件存在项目路径编码对应的目录下:
~/.claude/projects/ └── C--Users-Administrator--myproject/ └── memory/ ├── MEMORY.md ├── user_tech_stack.md ├── feedback_code_style.md ├── project_architecture.md └── reference_jira.md每个记忆文件的格式是带 frontmatter 的 Markdown:
--- name: project-architecture description: 项目使用 FastAPI + PostgreSQL + Redis metadata: type: project --- 后端框架是 FastAPI,数据库用 PostgreSQL,缓存用 Redis。 **Why:** 团队技术栈统一,新成员需要快速了解。 **How to apply:** 生成后端代码时默认用 FastAPI 风格,数据库操作走 SQLAlchemy。MEMORY.md 是索引文件,每次会话启动时 Claude Code 会自动加载它,然后根据当前问题判断哪些记忆文件需要读取。
4. 验证记忆系统是否生效
配置完成后,需要验证短期记忆和长期记忆是否真的在工作。下面给出具体的验证步骤和预期结果。
4.1 验证短期记忆(上下文窗口 + Transcript)
启动 Claude Code,随便聊几句,然后检查 transcript 文件是否在实时写入:
# 找到当前项目的 transcript 目录 ls ~/.claude/projects/ # 进入对应项目目录,查看最新的 jsonl 文件 ls -lt ~/.claude/projects/C--Users-Administrator--myproject/*.jsonl | head -5 # 实时查看写入内容 tail -f ~/.claude/projects/C--Users-Administrator--myproject/<session-id>.jsonl如果配置正确,你在 Claude Code 里每发一条消息,jsonl 文件就会追加一行 JSON。每行的结构类似:
{"type":"user","message":{"content":"帮我写一个用户登录接口"}} {"type":"assistant","message":{"content":[{"type":"text","text":"好的,我来写..."}]}}这说明 Transcript 实时流在工作。这是短期记忆的底层保障,即使其他机制都失灵,原始记录还在。
4.2 验证 Auto Memory
在 Claude Code 里告诉它一个项目背景信息,比如:
这个项目用的是 FastAPI 框架,数据库是 PostgreSQL,缓存用 Redis。然后检查记忆目录是否生成了文件:
ls ~/.claude/projects/C--Users-Administrator--myproject/memory/ cat ~/.claude/projects/C--Users-Administrator--myproject/memory/MEMORY.md如果 Auto Memory 生效,你应该能看到新生成的记忆文件和更新后的索引。注意,Auto Memory 是 AI 自主判断的,不是所有信息都会写入。如果你说的信息它认为不值得长期保存,可能不会生成文件。这是设计如此,避免记忆被垃圾信息污染。
4.3 验证 session-bridge
退出 Claude Code,然后重新启动。如果 session-bridge 配置正确,新会话启动时你应该能看到上次会话的摘要被注入。验证方式:
# 检查 last-session.json 是否生成 cat ~/.claude/last-session.json # 手动运行 bridge 脚本的 start 命令,看输出 python3 ~/.claude/scripts/session-bridge.py start如果输出里有"上次会话摘要"和几条对话记录,说明 bridge 在工作。新会话启动时,这些摘要会通过 SessionStart hook 注入到 Claude 的上下文里。
4.4 验证 memory MCP
在 Claude Code 里让它创建一个知识图谱实体:
请用 memory MCP 创建一个项目实体,名字叫"用户中心",类型是 project。然后查询:
请用 memory MCP 读取整个知识图谱。如果 MCP 配置正确,你应该能看到刚才创建的实体。memory MCP 的数据默认存在内存里,进程重启会丢失,如果需要持久化,需要在 MCP 配置里指定存储路径。
4.5 验证 claude-mem
claude-mem 是自动拦截的,验证方式是检查它的数据库:
# 查看 claude-mem 数据目录 ls ~/.claude-mem/ # 查询 SQLite 里的观察记录 sqlite3 ~/.claude-mem/observations.db "SELECT COUNT(*) FROM observations;"如果计数在增长,说明 claude-mem 在自动记录工具调用。你不需要手动触发,它通过 PostToolUse hook 自动捕获。
5. 常见报错与排查
配置记忆系统时容易遇到几类报错,下面按真实错误信息给出排查路径。
5.1 401 错误:API Key 无效
Error: 401 Unauthorized {"error":{"type":"authentication_error","message":"invalid x-api-key"}}这个错误说明 TaoToken 的 API Key 没配置对。排查步骤:第一,确认ANTHROPIC_API_KEY环境变量已经设置,用echo $ANTHROPIC_API_KEY检查;第二,确认 Key 没有多余空格或换行;第三,到 https://taotoken.net/api-keys 确认 Key 还在有效期内。如果用的是项目级配置,检查.claude/settings.json里有没有覆盖全局环境变量。
5.2 local proxy failed:本地代理连接失败
Error: local proxy failed to connect这个错误通常出现在 Claude Code 尝试连接 API 端点时。排查:确认ANTHROPIC_BASE_URL设置的是https://taotoken.net/api,注意末尾不要多加斜杠。另外检查网络是否能正常访问该地址:
curl -I https://taotoken.net/api如果返回 200 或 401,说明网络通,问题在 Key 配置。如果超时,检查本地网络设置。
5.3 reading choices:响应解析失败
Error: reading 'choices' field failed这个错误说明返回的响应格式不符合预期。Claude Code 期望的是 Anthropic 格式的响应,如果 API 端点返回的是 OpenAI 格式,就会报这个错。确认ANTHROPIC_BASE_URL指向的是兼容 Anthropic 接口的端点。TaoToken 的/api端点兼容 Anthropic 调用方式,如果配置正确不会出现这个问题。
5.4 OAuth 相关报错
Error: OAuth token expiredClaude Code 某些版本会尝试 OAuth 登录流程。如果你用的是 API Key 方式接入,不需要 OAuth。排查:确认没有设置CLAUDE_CODE_USE_OAUTH之类的环境变量,如果有就取消掉。另外检查~/.claude/下有没有残留的 OAuth token 文件,有的话删掉。
5.5 session-bridge 脚本不执行
如果 SessionStart hook 没触发,检查:第一,~/.claude/settings.json里的 hooks 配置路径是否正确;第二,脚本是否有执行权限(chmod +x);第三,Python 路径是否正确,有些系统用python而不是python3。可以手动运行脚本看报错:
python3 ~/.claude/scripts/session-bridge.py start如果报FileNotFoundError,说明last-session.json还没生成,先正常退出一次 Claude Code 让它生成。
5.6 claude-mem 数据库锁定
Error: database is lockedclaude-mem 用 SQLite 存储,多个进程同时写入会锁库。排查:确认没有多个 Claude Code 实例同时运行;检查~/.claude-mem/下有没有残留的.db-journal文件,有的话删掉。claude-mem 的设计原则是写入失败静默降级,不影响主流程,所以这个错误一般不会阻塞你使用。
5.7 记忆文件不生成
如果 Auto Memory 一直不生成文件,检查:第一,项目路径编码目录是否存在;第二,memory/子目录是否有写权限;第三,跟 AI 说的信息是否属于它认为值得保存的类型。代码模式、git 历史、bug 修复方案这些它不会存,因为可以直接从代码里读。项目背景、技术栈偏好、外部系统地址这些才会存。
6. 把记忆系统用起来的几个实操建议
配置跑通之后,怎么让它真正在项目里发挥作用,有几个实操层面的建议。
第一,项目启动时主动给 AI 喂一次背景信息。虽然 Auto Memory 会自动判断,但你在项目初期明确告诉它技术栈、架构决策、团队约定,能大幅提高记忆的命中率。比如新项目开始时说一句"这个项目用 FastAPI + PostgreSQL,代码风格遵循 PEP8,测试用 pytest",它大概率会写入 project 类型记忆。
第二,定期检查 MEMORY.md 的内容。Auto Memory 是 AI 自主判断的,有时候它会记一些你不需要的东西,或者漏记关键信息。每隔一段时间打开~/.claude/projects/<项目>/memory/MEMORY.md看看,手动补充或删除条目。这个文件是纯 Markdown,你可以直接编辑。
第三,session-bridge 的摘要长度可以调。默认脚本截取最后 8 轮对话,每条截断到 250 字符。如果你的项目对话轮次多,可以调大这个值,但注意别把上下文窗口撑爆。改脚本里的messages[-16:]和[:250]这两个参数即可。
第四,claude-mem 的语义搜索在项目大了之后特别有用。它会把你之前的工具调用和观察记录做向量化,新会话时通过 UserPromptSubmit hook 注入相关历史。你不需要手动查,但知道它在工作能让你更放心地把重复性操作交给它。
第五,memory MCP 适合用来维护项目级的实体关系。比如你有多个微服务,可以用它建实体和关系,AI 在需要了解服务依赖时能直接查图谱。这个机制需要 AI 主动调用,你可以在对话里明确说"用 memory MCP 记录一下这个服务的依赖关系"。
第六,如果发现记忆系统没生效,按这个顺序排查:先看 Transcript 有没有写入(最底层保障),再看 Auto Memory 目录有没有文件,然后看 session-bridge 的 last-session.json 有没有生成,最后看 claude-mem 的数据库有没有记录。从底层往上层查,能快速定位是哪一层出了问题。
第七,长期编码项目建议配合 Coding Plan 使用,这样记忆系统的效果能持续累积。你可以到 https://taotoken.net/coding-plan 了解具体的方案,把 API 调用和记忆机制结合起来,减少每次重新解释项目背景的时间。
记忆系统的价值在于累积效应。单次会话可能感觉不明显,但用了一两周之后,你会发现新开会话时 AI 已经知道你的项目结构、代码风格、常用命令,不需要你重复解释。这个体验的提升是实打实的。配置一次,后面都是收益。