首页 › tutorials › 读懂Claude Code的三层记忆

读懂 Claude Code 的三层记忆:建立正确的心智模型

概述

很多新手装好 Claude Code 后,第一反应是"它怎么好像没记住我上次说的话?"——这往往不是 bug,而是没建立正确的心智模型。本教程面向第一次接触 Claude Code、已经完成安装与首次认证的零基础开发者,目标是让你在写第一行有效指令之前,先搞懂一件事:Claude Code 究竟是怎么"看懂"你的项目的。我们将围绕"会话上下文、项目记忆(CLAUDE.md)、用户配置(settings.json)"三层结构,配合一个可复现的实战案例,帮你避开 90% 新手都会踩的"它为什么不记得""它为什么乱改文件""为什么越聊越慢"三类坑。

前置条件


一、先打破一个错觉:Claude 默认没有跨会话记忆

理解 Claude Code 最关键的一句话来自官方文档:

Each Claude Code session begins with a fresh context window.(每一次会话都从一个全新的上下文窗口开始。)

换句话说,你昨天和它聊了三小时的项目背景、技术选型、命名约定,今天重开 claude 时,它一无所知——除非你把这些信息固化下来。这不是缺陷,而是设计:每次会话干净启动,能保证行为可预测、避免历史污染。

那么知识如何跨会话延续?官方给出两条主线,业界把它总结为三层记忆结构:

层级 载体 寿命 谁来写
第一层 会话上下文 当前对话 + 当前被读取的文件 单次会话 你 + Claude
第二层 项目记忆 CLAUDE.md、SKILL.md 跨会话、跨会话自动加载 你
第三层 用户配置 ~/.claude/settings.json 永久(跨所有项目) 你 + 企业策略

先记住这张表,后面每一步都是在具体操作它。


二、第一层记忆:会话上下文(Context Window)

它是什么

会话上下文是 Claude "此刻能看到的一切",容量上限是 200,000 tokens(约 20 万个 token,相当于十几万汉字或一个中型代码仓库的核心文件)。它是一个滑动容器:随着对话变长、文件被读取,容器被填满;满了之后,最早的内容会被"挤出"窗口,或触发自动压缩。

官方的上下文窗口模拟器透露了两个关键数字:

也就是说,你一句还没说,窗口已经有 20% 被占用了。理解这一点,你就能解释很多"奇怪现象"。

怎么操作

在会话中输入斜杠命令:

/clear      # 彻底清空当前会话,回到干净启动状态
/compact    # 把历史对话压缩成摘要,腾出空间继续聊

预期结果:执行 /clear 后,Claude 不再记得本轮之前的任何对话,但仍会重新读取 CLAUDE.md;执行 /compact 后,你会看到一段"压缩摘要",对话历史变短,窗口利用率回落。

常见问题与解决

现象 原因 解决
聊久了 Claude 开始"忘事"、答非所问 窗口接近满(默认约 92% 触发 auto-compact) 主动 /compact,或拆成新会话
让它读了一个超大文件后变慢/报错 单次文件读取吃掉大量 token 改为只读片段,或先让它 grep 定位再读
切换到完全不相关的任务后表现混乱 旧上下文干扰 /clear 后重新开场

新手心法:把会话当成"一次专注的工作时段",一个会话做一件事。任务切换 = /clear。


三、第二层记忆:项目记忆 CLAUDE.md(本教程的核心)

它是什么

CLAUDE.md 是放在项目里的一个普通 Markdown 文件,Claude Code 每次启动都会自动读取它。它就是你写给 Claude 的"项目说明书",让它在每个全新会话一开始就拥有项目背景、约定、禁忌。这是知识跨会话延续最主要、最可控的手段。

加载优先级(谁覆盖谁)

官方定义了清晰的层级,从全局到局部依次加载,更局部的规则覆盖更全局的:

  1. 企业策略(Enterprise policy,/etc/claude-code 等,管理员设定,最高优先级)
  2. 用户记忆(~/.claude/CLAUDE.md,跨所有项目)
  3. 项目记忆(项目根目录 ./CLAUDE.md,进版本库共享给团队)
  4. 本地记忆(./CLAUDE.local.md,个人覆盖,建议加入 .gitignore)
  5. 子目录记忆(嵌套子目录里的 CLAUDE.md,进入对应目录时追加)

快速上手

在项目根目录执行:

cd your-project
claude

进入会话后输入:

/init

预期结果:Claude 会自动扫描项目结构、读取关键文件,并为你生成一份初版 CLAUDE.md,内容通常包括项目概览、构建/测试命令、代码风格、目录约定。你可以直接采纳或编辑。

管理记忆的另一个入口是:

/memory

它会用可视化菜单让你编辑各层级记忆文件,比手动找路径更省心。

用 @ 引用:把长文档拆出去

当项目记忆变长,全部塞进根 CLAUDE.md 会拖慢启动(还记得那 20% 启动开销吗)。官方支持 @路径 递归引用:

# CLAUDE.md
本项目是一个 Go 微服务网关。

详见:
@docs/architecture.md
@docs/coding-style.md
@.claude/conventions/testing.md

引用的内容按需加载,不会一次性占满启动窗口——这是渐进式披露的关键。

写一份"高信噪比"的 CLAUDE.md

新手最常犯的错是写成散文小说。记住:CLAUDE.md 是指令清单,不是 README。好用的写法是命令式、可执行的短句:

# 项目:payment-gateway

## 构建
- 跑测试:`make test`
- 单个包:`go test ./pkg/xxx -run TestYyy`

## 约定
- 错误处理统一用 errors.Wrap,禁止裸 panic
- 新增 HTTP 接口必须先写表驱动测试
- 提交前跑 `golangci-lint run`,0 warning 才可提交

## 禁忌(IMPORTANT)
- 不要修改 pkg/legacy/* 目录,那是冻结的遗留代码
- 数据库迁移文件只增不改,绝不回写已发布的版本

几个要点: - 用 IMPORTANT 标记硬约束,Claude 对这个词更敏感 - 写"怎么做"而不是"为什么":make test 远胜于"我们重视测试" - 明确边界与禁忌:告诉它别动什么,比告诉它做什么更能防止事故 - 控制在 150–300 行以内,长内容用 @ 拆出去

常见问题与解决

现象 原因 解决
改了 CLAUDE.md 但没生效 当前会话已缓存 /clear 重新启动会话
Claude 仍不遵守某条规则 规则太模糊或与全局冲突 改成命令式短句,加 IMPORTANT
启动变慢 根 CLAUDE.md 过长 用 @引用 把长文档拆出去
团队成员各自规则打架 都写进了共享的根文件 个人偏好放 CLAUDE.local.md 并 gitignore

四、第三层记忆:用户配置 settings.json

这一层解决"我所有项目都希望 Claude 这样做"的问题,载体是 ~/.claude/settings.json。常见配置包括:默认权限(允许哪些命令免确认)、默认模型、环境变量、主题等。

它和 CLAUDE.md 的分工很清晰:

本层细节涉及权限模式,已有专题教程展开。新手阶段你只需知道:跨项目的个人偏好放 settings.json,项目专属知识放 CLAUDE.md。


五、被忽略的一层:工具(Tools)连接上下文与世界

心智模型最后一块拼图是"工具"。Claude 本身只会读字、写字;它能看你的代码、能跑命令,是因为 Claude Code 给它配了一批工具:Read(读文件)、Edit(改文件)、Bash(执行命令)、Grep(搜索)等。

理解工具能解释一个关键事实:Claude 不会魔法般知道你的全部代码——它只看到它"主动读取"过的部分。所以:

flowchart TD
    A[启动 claude] --> B[加载系统提示<br/>占用 ~20% 窗口]
    B --> C[读取 CLAUDE.md 各层级<br/>+ settings.json]
    C --> D[进入交互<br/>窗口剩余 ~80%]
    D --> E{用户指令}
    E -->|读文件/跑命令| F[调用工具<br/>消耗窗口]
    F --> E
    E -->|窗口接近满| G[/compact 自动压缩]
    G --> E
    E -->|切换任务| H[/clear 干净重启]
    H --> C

实战案例:给一个真实项目配三层记忆

下面用一个最小可复现的 Node.js 项目演示完整闭环。

步骤 1:准备项目

mkdir demo-api && cd demo-api
npm init -y
npm install express

新建 index.js:

const express = require('express');
const app = express();
app.get('/', (req, res) => res.json({ ok: true }));
app.listen(3000);

步骤 2:生成初版项目记忆

claude

进入会话后输入 /init。预期输出(节选):

# CLAUDE.md(Claude 自动生成,可编辑)

## 项目概览
demo-api 是一个基于 Express 的 Node.js 服务。

## 常用命令
- 安装依赖:`npm install`
- 启动:`node index.js`
- (如果配置了 test 脚本会列出测试命令)

步骤 3:把 CLAUDE.md 改成"高信噪比"指令

把自动生成的文件改写成下面这样(核心是命令式 + 禁忌):

# demo-api

## 命令
- 装依赖:`npm install`
- 启动开发:`node index.js`(监听 3000)

## 约定
- 所有路由处理必须 try/catch,错误统一走 `next(err)`
- 新增接口必须返回 JSON

## IMPORTANT
- 不要升级 express 主版本号
- 不要删除 app.listen,否则服务无法启动

保存后,在会话里输入 /clear 让新规则生效。

步骤 4:验证记忆是否真的被记住

输入一个新指令测试:

帮我加一个 /health 接口,返回当前时间和进程 pid

预期结果:Claude 会生成一个符合"返回 JSON""有 try/catch"约定的接口,且不会去碰 express 版本号——因为这三层记忆在它动手前就加载进了上下文。

步骤 5:观察上下文消耗

在会话中输入 /context(或观察界面状态栏),你会看到当前窗口占用百分比。如果你让它连续读取多个大文件,能看到百分比攀升;执行 /compact 后回落。这正是第一层"会话上下文"的可视化。

步骤 6:固化跨项目偏好

假设你希望在所有项目里都默认允许 npm、node 命令免确认,编辑 ~/.claude/settings.json:

{
  "permissions": {
    "allow": ["Bash(npm install)", "Bash(npm test)", "Bash(node *)"]
  }
}

保存后新开会话即生效。这就是第三层"用户配置"。

至此,你已亲手搭建并验证了三层记忆:会话上下文(/clear//compact)、项目记忆(CLAUDE.md)、用户配置(settings.json)。


心智模型总览图

flowchart LR
    subgraph 第三层["第三层:用户配置(永久·跨项目)"]
        S["~/.claude/settings.json<br/>权限 / 模型 / 偏好"]
    end
    subgraph 第二层["第二层:项目记忆(跨会话·进版本库)"]
        E["企业策略"] --> U["~/.claude/CLAUDE.md"] --> P["./CLAUDE.md"] --> L["./CLAUDE.local.md"]
        P -.引用.-> D["@docs/architecture.md<br/>按需加载"]
    end
    subgraph 第一层["第一层:会话上下文(单次会话·200K token)"]
        C["对话历史 + 被读取的文件<br/>/clear /compact 管理"]
    end
    S --> C
    P --> C
    C -->|调用工具<br/>Read/Bash/Grep| W["真实代码世界"]

新手避坑速查

  1. "它不记得我上次说的" → 不是 bug,把要点写进 CLAUDE.md。
  2. "改了 CLAUDE.md 没生效" → 当前会话要 /clear。
  3. "越聊越慢/越蠢" → 上下文快满了,/compact 或换新会话。
  4. "它乱改/删文件" → 在 CLAUDE.md 用 IMPORTANT 写明禁忌目录。
  5. "团队规则被个人改动污染" → 个人偏好放 CLAUDE.local.md 并 gitignore。
  6. "启动变慢" → 根 CLAUDE.md 过长,用 @引用 拆分。

延伸阅读


训练营适用性评估


参考来源

  1. How Claude remembers your project — Claude Code Docs — 官方对 CLAUDE.md 与 auto memory 的权威说明,明确"每次会话干净启动、CLAUDE.md + 自动记忆两条跨会话主线"
  2. Explore the context window — Claude Code Docs — 官方上下文窗口交互模拟器,给出 200K 上限与启动约占 20% 的关键数据
  3. Claude Code Memory: How Context and History Work (2026) — agensi.io — 将记忆总结为"会话上下文 / 项目知识 / 用户偏好"三层结构的实践指南
  4. Claude Code & Agent Memory: Best Practices for 2026 — orchestrator.dev — 分层记忆架构与高信噪比 CLAUDE.md 写法的深度实践
  5. The Complete Guide to CLAUDE.md — Medium — CLAUDE.md 设计、加载优先级与跨工具压缩的综合教程

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入