<!-- title: Claude Code上下文工程：从CLAUDE.md到记忆管理 -->

# Claude Code上下文工程：从CLAUDE.md到记忆管理全实战

## 概述

本教程面向已安装Claude Code但希望大幅提升协作效率的开发者。你将学会上下文工程（Context Engineering）的核心原理——不是写更好的Prompt，而是设计整个信息环境。教程覆盖CLAUDE.md三级配置体系、自动记忆系统、上下文压缩策略，以及一套完整的项目级上下文管理工作流。

**适用人群**：有1-3个月编程基础、已完成Claude Code安装的初学者和中级用户。

---

## 第一章 为什么上下文工程比提示工程更重要

### 1.1 从Prompt到Context：思维方式的根本转变

2025年9月，Anthropic发布了一篇里程碑式的工程博客《Effective Context Engineering for AI Agents》，核心观点非常明确：**上下文的质量决定Agent的质量**。

传统的提示工程（Prompt Engineering）关注的是"如何写好一条指令"。但在Claude Code这样的Agent式编码工具中，模型接收到的不仅是你的当前输入，还包括：

- 项目结构信息（文件树、代码内容）
- CLAUDE.md中的持久化指令
- 对话历史（之前所有轮次的问答）
- 工具调用结果（文件读取、命令输出）
- 自动记忆文件（之前会话积累的学习笔记）
- 系统提示（模型版本、安全规则等）

这些信息共同构成了"上下文窗口"（Context Window）。Claude Code当前支持200K标准Token和1M扩展Token的上下文窗口。**上下文工程就是系统地管理所有这些信息源**，确保模型在每一轮交互中都能看到最相关的信息。

```mermaid
graph TD
    A[用户输入] --> G[上下文窗口]
    B[CLAUDE.md指令] --> G
    C[对话历史] --> G
    D[工具调用结果] --> G
    E[自动记忆文件] --> G
    F[系统提示] --> G
    G --> H[Claude模型推理]
    H --> I[代码修改/回复]

    style G fill:#f9f,stroke:#333,stroke-width:2px
    style H fill:#bbf,stroke:#333,stroke-width:2px
```

### 1.2 上下文管理不当的三大症状

如果你遇到过以下情况，说明需要学习上下文工程：

**症状一：Claude"忘记"了之前的约定**
你在对话开始时说"用TypeScript严格模式"，过了20轮对话后Claude开始写纯JavaScript。原因是：对话太长触发了自动压缩（Compaction），约定被丢弃了。

**症状二：Claude给出的回答越来越"泛"**
前几轮回答非常精准，后面开始给出模板化、通用化的建议。原因是：上下文窗口被无关信息填充，关键信号被稀释。

**症状三：Token消耗快速增长**
一个简单的bug修复消耗了数万Token。原因是：上下文中堆积了大量已经不相关的历史对话和工具输出。

### 1.3 上下文工程的三大核心原则

Anthropic官方总结的核心原则，可以简化为三个词：

| 原则 | 含义 | 对应策略 |
|------|------|----------|
| **精准** | 只提供必要信息 | CLAUDE.md分层、精简指令 |
| **持久** | 关键信息不丢失 | 持久化文件、记忆系统 |
| **动态** | 随任务进展调整 | 压缩、清除、会话切换 |

---

## 第二章 CLAUDE.md三级配置体系

### 2.1 三级层次结构

Claude Code的CLAUDE.md系统采用三级层次结构，每一级有不同的作用域：

```mermaid
graph TB
    subgraph 全局级
        A["~/.claude/CLAUDE.md<br/>所有项目共享"]
    end
    subgraph 项目级
        B["项目根目录/CLAUDE.md<br/>当前项目所有成员共享"]
        C["项目根目录/.claude/CLAUDE.md<br/>（推荐位置，同上）"]
    end
    subgraph 目录级
        D["src/CLAUDE.md<br/>仅特定子目录生效"]
        E["tests/CLAUDE.md<br/>仅测试目录生效"]
    end
    A --> B
    B --> D
    B --> E
    A -.->|加载优先级从上到下| B
    B -.-> D

    style A fill:#e1f5fe
    style B fill:#fff3e0
    style C fill:#fff3e0
    style D fill:#e8f5e9
    style E fill:#e8f5e9
```

**加载规则**：
- 所有层级的CLAUDE.md都会被**合并加载**，不会互相覆盖
- 当指令冲突时，**更具体的层级优先**（目录级 > 项目级 > 全局级）
- 每次会话启动时自动加载，无需手动操作

### 2.2 全局级CLAUDE.md：个人偏好配置

位置：`~/.claude/CLAUDE.md`

这是你的个人编码偏好，适用于所有项目。内容应该是跨项目通用的风格偏好：

```markdown
# 全局编码偏好

## 语言
- 默认使用中文回复
- 代码注释使用英文

## 编码风格
- 使用2空格缩进
- 变量名使用camelCase，组件名使用PascalCase
- 优先使用函数式编程风格
- 避免使用any类型（TypeScript）

## Git规范
- 不要自动commit
- commit message使用英文
- 不要提交.env文件

## 通用规则
- 始终先读取文件再编辑
- 优先编辑现有文件而非创建新文件
- 修改代码后主动运行测试
```

**创建命令**：

```bash
# 方法一：直接创建
mkdir -p ~/.claude
cat > ~/.claude/CLAUDE.md << 'EOF'
# 全局编码偏好
- 默认使用中文回复
- 代码注释使用英文
- 使用2空格缩进
- 不要自动commit
- 始终先读取文件再编辑
EOF

# 方法二：在Claude Code会话中使用斜杠命令
# 直接在对话中输入：
# /memory
# 然后选择编辑全局指令
```

### 2.3 项目级CLAUDE.md：项目规范配置

位置：`项目根目录/CLAUDE.md` 或 `项目根目录/.claude/CLAUDE.md`

这是团队共享的项目配置，应该提交到Git仓库中。它定义了项目特定的架构、技术栈和规范：

```markdown
# 项目：电商平台后端

## 技术栈
- 运行时：Node.js 20 LTS
- 框架：Fastify 4.x（注意不是Express）
- 数据库：PostgreSQL 16 + Prisma ORM
- 缓存：Redis 7
- 测试：Vitest + Supertest

## 项目架构
```
src/
├── routes/          # API路由定义
├── services/        # 业务逻辑层
├── repositories/    # 数据访问层
├── middleware/       # 中间件
├── utils/           # 工具函数
└── types/           # TypeScript类型定义
```

## 编码规范
- 每个API路由必须有对应的Schema验证（使用TypeBox）
- 错误处理使用自定义AppError类
- 数据库操作必须放在repository层
- 新增API必须编写集成测试

## 常用命令
- `npm run dev` — 启动开发服务器（端口3001）
- `npm test` — 运行所有测试
- `npm run test:watch` — 监听模式运行测试
- `npx prisma migrate dev` — 运行数据库迁移
- `npx prisma studio` — 打开数据库GUI

## 关键约定
- 不要直接修改prisma/schema.prisma，先讨论变更方案
- 所有时间使用UTC，前端负责时区转换
- API响应格式统一：{ success: boolean, data?: any, error?: string }
```

**最佳实践**：
- 项目级CLAUDE.md控制在**200行以内**，过长会稀释关键信息
- 使用明确的标题和列表结构
- 包含具体的命令和路径，不要模糊描述
- 随项目演进持续更新

### 2.4 目录级CLAUDE.md：领域特定配置

位置：项目子目录中的`CLAUDE.md`

这是最精细的配置级别，只在Claude Code操作该目录下的文件时生效。特别适合以下场景：

**场景一：测试目录的特殊规则**

```markdown
# tests/ 目录规则

- 测试文件命名：`*.test.ts`
- 每个测试文件对应一个源文件
- 使用describe/it结构组织测试
- Mock外部依赖，不要调用真实API
- 测试数据库使用独立的test数据库
```

**场景二：特定模块的复杂逻辑说明**

```markdown
# src/services/payment/ 目录规则

## 支付流程架构
本模块处理支付核心逻辑，涉及三个阶段：
1. 创建订单 → 验证库存 → 冻结金额
2. 调用支付网关 → 处理回调
3. 确认支付 → 更新库存 → 发送通知

## 重要约束
- 支付金额计算使用decimal.js，绝不用浮点数
- 所有金额单位为分（整数），前端转换为元
- 支付回调必须验证签名
- 不要修改订单状态机以外的状态转换逻辑
```

### 2.5 CLAUDE.md编写黄金法则

| 法则 | 说明 | 反面例子 | 正面例子 |
|------|------|----------|----------|
| 具体而非抽象 | 给出明确指令 | "写好代码" | "所有函数必须有单元测试" |
| 正面+负面 | 告诉Claude该做什么和不该做什么 | "注意性能" | "使用连接池，不要每次请求创建新连接" |
| 包含原因 | 解释为什么，帮助Claude理解上下文 | "用PostgreSQL" | "使用PostgreSQL因为需要JSON查询能力" |
| 分层组织 | 用标题分组，便于Claude定位 | 平铺所有规则 | 按技术栈/架构/规范/命令分组 |
| 保持精简 | 删除过时内容，避免信息噪音 | 1000行CLAUDE.md | 100行精炼的CLAUDE.md |

---

## 第三章 记忆系统：让Claude自动学习你的项目

### 3.1 双记忆系统架构

Claude Code有两套互补的记忆系统：

```mermaid
graph LR
    subgraph 持久记忆
        A["CLAUDE.md<br/>手动编写<br/>提交到Git"]
    end
    subgraph 自动记忆
        B[".claude/memory/<br/>自动生成<br/>不提交到Git"]
    end
    A --> C[会话启动时加载]
    B --> C
    C --> D[Claude Code运行]

    style A fill:#e1f5fe
    style B fill:#fff9c4
```

| 特性 | CLAUDE.md | 自动记忆（Auto Memory） |
|------|-----------|------------------------|
| 创建方式 | 手动编写 | Claude自动生成 |
| 位置 | 项目根目录 | `.claude/memory/` 目录 |
| 版本控制 | 提交到Git | 加入.gitignore |
| 作用 | 主动指令和规范 | 被动学习的经验笔记 |
| 内容类型 | "你应该这样做" | "上次我学会了..." |

### 3.2 自动记忆的工作机制

当你在对话中说了类似以下内容时，Claude Code会将信息存入记忆文件：

- "记住：这个项目的数据库密码在环境变量DB_PASSWORD中"
- "下次不要修改config.ts，那个文件是自动生成的"
- "记住我们团队约定API路径用kebab-case"

Claude Code会将这些学习内容保存到 `.claude/memory/` 目录下的Markdown文件中。下次启动会话时自动加载。

**查看当前记忆内容**：

```bash
# 在Claude Code对话中使用斜杠命令
/memory

# 或直接查看文件
ls .claude/memory/
cat .claude/memory/*.md
```

### 3.3 记忆文件的最佳管理实践

**实践一：定期审查记忆文件**

```bash
# 每周检查一次记忆文件是否有冲突或过时内容
cat .claude/memory/*.md | less
```

如果发现过时或不准确的记忆，直接编辑对应文件即可。Claude Code会在下次会话中加载更新后的内容。

**实践二：将重要记忆提升到CLAUDE.md**

自动记忆是Claude自己写的笔记，格式可能不够规范。如果某条记忆非常重要，应该将其整理后写入项目级CLAUDE.md：

```markdown
<!-- 从自动记忆提升到CLAUDE.md的示例 -->

## API设计规范
- RESTful路径使用kebab-case: `/user-profile`, `/order-history`
- 响应状态码严格遵循HTTP语义
- 分页参数统一使用 `?page=1&limit=20`
```

**实践三：配置.gitignore**

```bash
# 将自动记忆加入.gitignore（因为它是个人化的）
echo ".claude/memory/" >> .gitignore

# 但保留CLAUDE.md（它是团队共享的）
git add CLAUDE.md
```

### 3.4 /memory命令详解

`/memory` 是Claude Code内置的斜杠命令，用于管理记忆系统：

| 操作 | 命令 | 说明 |
|------|------|------|
| 查看记忆 | `/memory` | 显示所有已加载的记忆文件内容 |
| 添加记忆 | 对话中说"记住..." | Claude自动保存到记忆文件 |
| 编辑记忆 | 手动编辑 `.claude/memory/*.md` | 直接修改Markdown文件 |
| 全局记忆 | 编辑 `~/.claude/CLAUDE.md` | 跨项目生效 |

---

## 第四章 上下文压缩与生命周期管理

### 4.1 上下文窗口的生命周期

每次Claude Code会话，上下文窗口经历以下阶段：

```mermaid
graph LR
    A[会话启动<br/>加载CLAUDE.md] --> B[任务执行<br/>上下文增长]
    B --> C{上下文使用率}
    C -->|< 60%| B
    C -->|60-80%| D["建议手动/compact"]
    C -->|> 80%| E["自动压缩触发"]
    D --> F[压缩后继续]
    E --> F
    F --> B

    style C fill:#fff9c4
    style D fill:#ffe0b2
    style E fill:#ffcdd2
```

### 4.2 三大上下文管理命令

Claude Code提供三个核心命令来管理上下文：

#### `/compact` — 智能压缩

**作用**：对对话历史进行摘要压缩，保留关键信息，丢弃冗余细节。

**最佳使用时机**：上下文使用率达到**60%**时主动执行，不要等到90%以上。

```bash
# 在Claude Code对话中输入
/compact

# 带自定义压缩指令
/compact 请保留关于支付模块的所有讨论，丢弃CSS样式相关的对话
```

**压缩后你会看到**：
- Claude输出一段摘要，说明保留了什么、丢弃了什么
- 上下文使用率显著下降
- CLAUDE.md中的指令不会被压缩（它们始终存在）
- 自动记忆文件的内容也不会被压缩

#### `/clear` — 完全清除

**作用**：清空整个对话历史，但保留CLAUDE.md和记忆文件。

**最佳使用时机**：
- 切换到完全不同的任务
- 对话出现了严重错误需要"重启"
- 上下文已经被无关信息严重污染

```bash
# 在Claude Code对话中输入
/clear

# 清除后开始新对话，CLAUDE.md中的指令仍然生效
```

#### `/rewind` — 回退对话

**作用**：将对话回退到之前的某个状态，撤销后续的所有操作。

**最佳使用时机**：
- Claude走错了方向，想回到决策点重新开始
- 之前的代码修改需要撤销

```bash
# 在Claude Code对话中输入
/rewind

# Claude会显示对话历史，让你选择回退到哪一步
```

### 4.3 上下文压缩的五层策略

Claude Code的压缩机制实际上包含五层策略，了解这些有助于你更好地管理上下文：

| 层级 | 策略 | 说明 | 你能控制的 |
|------|------|------|-----------|
| 第一层 | 对话摘要 | 将长对话压缩为关键要点 | 用 `/compact` 触发 |
| 第二层 | 工具输出裁剪 | 大文件只保留相关片段 | 在指令中明确需要哪些行 |
| 第三层 | 历史轮次合并 | 相邻轮次的相似内容合并 | 无法直接控制 |
| 第四层 | 早期对话丢弃 | 丢弃最早的不相关对话 | 用 `/compact` 带提示词 |
| 第五层 | 强制截断 | 最后手段，可能丢失重要信息 | 在80%前主动压缩避免 |

### 4.4 会话管理策略矩阵

不同场景下应该使用不同的会话管理策略：

```mermaid
graph TD
    A[开始新任务] --> B{任务复杂度}
    B -->|简单<br/>修bug/小改动| C[单个会话<br/>完成后/clear]
    B -->|中等<br/>新功能开发| D[单个会话<br/>定期/compact]
    B -->|复杂<br/>架构重构| E[多会话策略<br/>分阶段/clear]

    D --> F{上下文>60%}
    F -->|是| G["/compact<br/>带保留提示"]
    F -->|否| H[继续工作]
    G --> H

    E --> I[阶段1: 分析规划]
    I --> J["/clear"]
    J --> K[阶段2: 实现代码]
    K --> L["/clear"]
    L --> M[阶段3: 测试修复]

    style C fill:#c8e6c9
    style D fill:#fff9c4
    style E fill:#ffccbc
```

**复杂任务的多会话策略**是一个关键技巧。以"重构用户认证系统"为例：

**会话一（分析规划）**：
```
请分析当前认证系统的架构，列出所有需要修改的文件。
不要修改任何代码，只做分析。
```
完成后执行 `/clear`。

**会话二（核心实现）**：
```
基于以下计划重构认证系统：
[粘贴会话一的分析结果]

请先修改核心认证模块 src/services/auth.ts
```
完成后执行 `/clear`。

**会话三（测试修复）**：
```
认证系统重构已完成，现在需要：
1. 运行所有测试
2. 修复失败的测试
3. 补充新的集成测试
```

这样每个会话都保持紧凑的上下文，避免历史信息互相干扰。

---

## 第五章 提升上下文效率的实战技巧

### 5.1 技巧一：精准的文件引用

不要让Claude自己搜索文件，直接告诉它看哪里：

```bash
# 低效方式（消耗大量上下文Token）
"帮我看看这个项目有什么问题"

# 高效方式（精准定位）
"请阅读 src/services/payment.ts 的第45-80行，这个函数有并发问题"
```

### 5.2 技巧二：分阶段而不是一次性

```bash
# 低效方式（可能触发上下文溢出）
"请重构整个认证系统，包括JWT、OAuth、session管理，然后写测试，最后更新文档"

# 高效方式（分阶段执行）
# 第一阶段
"请分析 src/auth/ 目录下所有文件的结构和依赖关系"

# 确认分析结果后
"请重构 auth.service.ts，将JWT逻辑抽取到独立的 jwt.service.ts"

# 逐个文件推进...
```

### 5.3 技巧三：使用@引用和上下文控制

Claude Code支持在对话中使用特定语法来控制上下文加载：

```bash
# 指定只读取特定文件
"请只看 package.json 和 tsconfig.json，不要读取其他文件"

# 明确排除
"在搜索实现方式时，不要读取 node_modules 和 dist 目录"

# 使用Glob模式的精确指定
"请查看 src/routes/*.ts 中的所有路由定义"
```

### 5.4 技巧四：上下文预算管理

在长会话中主动监控上下文使用情况：

```bash
# 查看当前上下文状态（在Claude Code对话中）
/status

# 当接近上限时，主动压缩并给出保留优先级
/compact 保留所有关于数据库schema的讨论，可以丢弃UI样式的讨论
```

### 5.5 技巧五：CLAUDE.md中的上下文节省技巧

在CLAUDE.md中加入以下类型的指令，可以大幅减少重复解释：

```markdown
## 上下文管理规则
- 当我说"继续"时，继续上一次未完成的任务
- 当我说"下一个"时，进入计划中的下一个步骤
- 不需要重复你已经知道的信息，直接执行
- 修改文件前不需要展示完整文件内容，只展示变更部分
```

这些指令可以显著减少每一轮对话的Token消耗。

### 5.6 技巧六：利用.claude目录的完整配置

`.claude/` 目录不仅仅是放CLAUDE.md，它是一个完整的配置中心：

```bash
.claude/
├── CLAUDE.md          # 项目级指令（推荐放这里）
├── settings.json      # Claude Code行为配置
├── memory/            # 自动记忆文件
├── commands/          # 自定义斜杠命令
├── skills/            # 项目级Skills
└── hooks/             # 事件钩子
```

**settings.json示例**：

```json
{
  "permissions": {
    "allow": [
      "Bash(npm test)",
      "Bash(npm run lint)",
      "Bash(git status)",
      "Bash(git diff)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(npm publish)"
    ]
  },
  "autoCompact": true,
  "compactThreshold": 0.6
}
```

---

## 第六章 完整实战案例：为真实项目配置上下文工程

### 6.1 项目背景

假设你有一个Next.js全栈项目需要配置Claude Code的上下文工程。项目结构如下：

```
my-saas-app/
├── app/               # Next.js App Router
├── components/        # React组件
├── lib/               # 工具函数和共享逻辑
├── prisma/            # 数据库Schema和迁移
├── public/            # 静态资源
├── tests/             # 测试文件
├── package.json
├── next.config.ts
└── tsconfig.json
```

### 6.2 第一步：创建全局配置

```bash
# 创建全局CLAUDE.md
mkdir -p ~/.claude
cat > ~/.claude/CLAUDE.md << 'EOF'
# 个人编码偏好

## 通用
- 默认使用中文回复
- 代码注释使用英文
- 使用2空格缩进（TypeScript/JavaScript）
- 优先使用ES模块语法（import/export）
- 变量名使用camelCase，类型/接口使用PascalCase

## Git
- 不要自动commit
- 不要自动git add
- commit message用英文，使用conventional commits格式

## 安全
- 不要提交.env、credentials等敏感文件
- SQL查询必须使用参数化，禁止字符串拼接
- 用户输入必须验证
EOF
```

### 6.3 第二步：创建项目级配置

```bash
cd my-saas-app
cat > CLAUDE.md << 'EOF'
# SaaS应用 - 项目配置

## 技术栈
- 框架：Next.js 15（App Router）
- 语言：TypeScript 5（strict模式）
- 样式：Tailwind CSS 4
- 数据库：PostgreSQL + Prisma 6
- 认证：NextAuth.js v5
- 测试：Vitest + Playwright
- 包管理：pnpm

## 架构约定
- app/目录按功能模块组织，每个模块有自己的page.tsx和layout.tsx
- 组件分为 ui/（通用）和 features/（业务）两个子目录
- lib/db.ts 导出Prisma客户端单例
- lib/auth.ts 导出NextAuth配置
- Server Actions放在对应的app/模块目录下

## 关键规则
- 新页面必须添加loading.tsx和error.tsx
- 数据库变更必须通过Prisma迁移（npx prisma migrate dev）
- API路由使用Route Handler（app/api/）
- 不要使用getServerSideProps或getStaticProps（那是Pages Router）

## 常用命令
- `pnpm dev` — 启动开发服务器
- `pnpm build` — 生产构建
- `pnpm test` — 运行单元测试
- `pnpm test:e2e` — 运行端到端测试
- `npx prisma studio` — 数据库管理界面
- `npx prisma generate` — 重新生成Prisma客户端

## 上下文管理
- 修改文件前先读取确认现有内容
- 修改代码后运行 `pnpm test` 验证
- 当对话超过30轮时提醒我执行 /compact
EOF
```

### 6.4 第三步：创建目录级配置

```bash
# 测试目录配置
mkdir -p tests
cat > tests/CLAUDE.md << 'EOF'
# 测试目录规则

## 单元测试
- 文件放在 tests/unit/ 下，镜像src/目录结构
- 使用 describe/it 结构
- Mock外部依赖（数据库、API调用）
- 每个测试文件对应一个源文件

## E2E测试
- 文件放在 tests/e2e/ 下
- 使用Playwright
- 测试关键用户流程：注册→登录→使用核心功能→登出
- 使用 page.goto('/') 而不是硬编码URL

## 命名
- 测试文件：`*.test.ts` 或 `*.spec.ts`
- 测试描述使用中文，便于团队理解
EOF

# Prisma目录配置
cat > prisma/CLAUDE.md << 'EOF'
# 数据库规则

## Schema约定
- 模型名使用PascalCase
- 字段名使用camelCase
- 每个模型必须有 createdAt 和 updatedAt 字段（使用 @updatedAt）
- 枚举类型定义在文件顶部
- 使用 @@map 指定表名（snake_case）

## 迁移规则
- 小改动可以直接 npx prisma migrate dev
- 大改动（删字段、改类型）先备份讨论
- 迁移后必须更新seed脚本
EOF
```

### 6.5 第四步：配置Git忽略和共享

```bash
# 创建.gitignore条目（个人化的不提交）
cat >> .gitignore << 'EOF'
# Claude Code个人记忆
.claude/memory/
EOF

# 确保项目级配置被团队共享
git add CLAUDE.md tests/CLAUDE.md prisma/CLAUDE.md
```

### 6.6 第五步：验证配置生效

启动Claude Code并验证：

```bash
claude
```

在对话中输入：

```
请总结你了解到的关于这个项目的所有信息
```

Claude应该能准确列出：
- 技术栈（来自项目级CLAUDE.md）
- 编码风格偏好（来自全局CLAUDE.md）
- 测试规则（来自tests/CLAUDE.md）
- 数据库规范（来自prisma/CLAUDE.md）

### 6.7 完整工作流程图

```text
flowchart TB
    Start[项目启动] --> A[创建全局~/.claude/CLAUDE.md]
    A --> B[创建项目级CLAUDE.md]
    B --> C[创建目录级CLAUDE.md]
    C --> D[配置.gitignore]
    D --> E[提交到Git仓库]

    E --> F[开始日常开发]
    F --> G{任务复杂度}

    G -->|简单任务| H[单会话完成]
    H --> I[完成后/clear]

    G -->|中等任务| J[单会话推进]
    J --> K{上下文>60%}
    K -->|是| L["/compact 带保留提示"]
    K -->|否| M[继续工作]
    L --> M
    M --> N{任务完成}
    N -->|否| K
    N -->|是| O[/clear 新任务]

    G -->|复杂任务| P[拆分为3-5个子任务]
    P --> Q[子任务1: 分析规划]
    Q --> R[/clear]
    R --> S[子任务2: 核心实现]
    S --> T[/compact]
    T --> U[子任务3: 测试修复]
    U --> V[/clear]
    V --> W[全部完成]

    I --> X[项目结束]
    O --> X
    W --> X

    style Start fill:#e8f5e9
    style X fill:#e8f5e9
    style L fill:#fff9c4
    style R fill:#fff9c4
    style T fill:#fff9c4
    style V fill:#fff9c4
```

---

## 第七章 常见问题与排错指南

### Q1：CLAUDE.md修改后不生效怎么办？

Claude Code在每次新会话启动时加载CLAUDE.md。如果你在会话进行中修改了CLAUDE.md，需要重启会话或执行 `/clear` 才能重新加载。

### Q2：自动记忆文件在哪里？

位置在 `.claude/memory/` 目录下，文件名通常是 `YYYY-MM-DD.md` 格式。如果没有看到这个目录，说明Claude Code还没有生成自动记忆。

### Q3：/compact后Claude忘记了重要约定怎么办？

这通常说明该约定应该写入CLAUDE.md而不是只放在对话中。CLAUDE.md的内容不受压缩影响。将被压缩掉的重要信息写入CLAUDE.md：

```markdown
## 重要约定（不要压缩丢弃）
- 支付模块必须使用decimal.js处理金额
- 所有API必须经过认证中间件
```

### Q4：多个CLAUDE.md之间指令冲突怎么办？

遵循"具体优先"原则。例如：
- 全局CLAUDE.md说"使用2空格缩进"
- 项目CLAUDE.md说"Python文件使用4空格缩进"

项目级指令覆盖全局级。但最好的做法是避免冲突，在全局级只放真正跨项目通用的规则。

### Q5：如何在团队中推广上下文工程？

推荐分三步走：

1. **第一步**：维护好项目级CLAUDE.md，在团队Code Review中要求审查CLAUDE.md的变更
2. **第二步**：建立CLAUDE.md模板，新项目基于模板创建
3. **第三步**：定期召开"上下文审查"会议，清理过时指令、补充新约定

### Q6：上下文压缩会影响已经写入磁盘的代码吗？

不会。`/compact` 和 `/clear` 只影响Claude Code的对话上下文，不会撤销已经写入磁盘的文件修改。如果需要撤销代码修改，应该使用 `/rewind` 或 `git checkout`。

---

## 第八章 上下文工程进阶方向

掌握了基础的CLAUDE.md配置和记忆管理后，以下进阶方向值得探索：

1. **自定义斜杠命令**（`.claude/commands/`）：将常见的上下文模式封装为可复用命令
2. **Hooks机制**（`.claude/hooks/`）：在工具调用前后自动执行上下文管理操作
3. **Skills系统**：将复杂的上下文工程模式打包为可分享的Skills
4. **MCP服务器集成**：通过外部工具扩展Claude Code的信息获取能力
5. **Headless模式**（`claude -p`）：在CI/CD中实现自动化上下文管理

这些进阶话题将在后续教程中逐一展开。

---

## 训练营适用性评估

| 项目 | 说明 |
|------|------|
| 适合训练营类型 | AI辅助编程入门营、Claude Code实战营、团队AI工具推广培训 |
| 预计教学时长 | 3-4小时（含实操练习） |
| 实操环节建议 | 学员带自己的项目，现场配置三级CLAUDE.md，体验/compact和/clear的效果 |
| 前置知识 | 基本的终端操作、Git基础、任意编程语言入门 |

---

## 参考来源

1. [Effective context engineering for AI agents — Anthropic](https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents) — Anthropic官方关于上下文工程的核心方法论文章
2. [Using CLAUDE.md files: Customizing Claude Code for your codebase — Claude](https://claude.com/blog/using-claude-md-files) — 官方CLAUDE.md使用指南
3. [Using Claude Code: session management and 1M context — Claude](https://claude.com/blog/using-claude-code-session-management-and-1m-context) — 官方会话管理和上下文压缩详解
4. [How Claude remembers your project — Claude Code Docs](https://code.claude.com/docs/en/memory) — Claude Code记忆系统官方文档
5. [32 Claude Code Tricks That Actually Change How You Ship — MindStudio](https://www.mindstudio.ai/blog/claude-code-tricks-and-techniques) — 社区整理的Claude Code实用技巧合集

> [!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学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
