首页 › tutorials › Claude Code高级技巧:上下文、重构与性能优化

Claude Code高级技巧:上下文管理与性能优化完全指南

概述:本教程面向已有Claude Code基础使用经验的开发者,深入讲解三大高阶主题:上下文窗口的精细化管理、多文件并行重构的Agent编排策略、以及Token消耗优化与模型选择技巧。掌握这些技能后,你将能在大型项目中实现更高效、更精准的AI辅助开发,同时显著降低使用成本。预计学习时间60-90分钟。

适用人群:已使用Claude Code超过2周、熟悉基本命令和CLAUDE.md配置的中高级开发者。

前置条件: - 已安装Claude Code(npm install -g @anthropic-ai/claude-code) - 熟悉基本操作(对话、文件编辑、Git集成) - 了解CLAUDE.md的基础配置方式 - 拥有一个中等规模(50+文件)的真实项目用于实战


第一章:上下文窗口——你的隐形战场

1.1 理解上下文的生命周期

Claude Code的上下文窗口约100万Token,看起来很大,但实际使用中它会被以下内容快速填满:

图表1

图表 1

关键认知:上下文不是"用多少算多少"的线性消耗——它像磁盘空间一样会碎片化。当对话过长时,早期的重要决策会被压缩丢失,导致Agent"遗忘"之前的约定。

1.2 四大上下文管理命令

命令 作用 适用场景 Token影响
/compact 压缩对话历史为摘要 上下文使用超60%时 减少30-60%已用Token
/clear 清空全部对话历史 切换任务方向时 重置为0(保留CLAUDE.md)
/rewind 回退到之前某个状态 Agent犯了错误需要回退 减少到目标点的Token
/cost 查看当前会话Token消耗 随时监控成本 无影响,只读

实战操作序列:

# 步骤1:开始一个复杂任务前,先检查当前状态
/cost

# 步骤2:如果已用超过60%,先压缩
/compact

# 步骤3:如果方向完全改变,彻底清空
/clear

# 步骤4:重新开始时,给Claude一个简洁的任务摘要
# 不要重复之前的完整历史,只说当前目标

1.3 /compact的黄金时机

很多开发者在上下文快满(90%+)时才想起/compact,这是错误的。最佳实践是:

图表2

图表 2

为什么60%是黄金线? 因为/compact本身消耗Token来生成摘要。当使用率已经很高时,压缩操作本身可能触发上下文溢出,导致摘要质量下降。在60%时压缩,留有足够空间让Claude生成高质量的压缩摘要。

1.4 CLAUDE.md的分层架构设计

单一CLAUDE.md文件是Token浪费的常见源头。正确的做法是分层设计:

第一层:用户全局配置(~/.claude/CLAUDE.md)

# Global Preferences

## Language & Style
- 默认使用中文回复
- 回复简洁明了

## General Rules
- 不要自动commit
- 始终先读取文件再编辑
- 优先编辑现有文件而非创建新文件

第二层:项目级配置(项目根目录/CLAUDE.md)

# Project: My SaaS Backend

## Tech Stack
- Node.js 20 + TypeScript 5.x
- Express + Prisma ORM
- PostgreSQL 16

## Architecture
- src/routes/ - API路由定义
- src/services/ - 业务逻辑层
- src/models/ - Prisma数据模型
- src/middleware/ - 中间件

## Coding Conventions
- 使用Zod做输入验证
- Service层返回Result<T, E>类型
- 错误统一用AppError类

第三层:目录级配置(src/routes/AGENTS.md)

# Routes Module

## Patterns
- 每个路由文件对应一个resource
- 使用express.Router()
- 中间件顺序:auth -> validate -> handler

设计原则: - 全局配置只放跨项目通用的规则(约10-20行) - 项目配置只放不读代码就无法知道的信息(架构、约定) - 目录配置只放该模块特有的规则(模式、依赖) - 绝对不要放代码示例——让Claude读源码而非背诵模板

1.5 AGENTS.md:上下文效率的关键优化

AGENTS.md是Claude Code中一个经常被忽视但极具价值的优化工具。它的工作原理是按需加载——只有当Agent进入特定目录时才读取该目录下的AGENTS.md,而非像CLAUDE.md那样在会话开始时就全部加载。

优化前后对比:

graph TB
    subgraph 优化前:单一CLAUDE.md
        A1[CLAUDE.md 200行] --> B1[所有内容每次都加载]
        B1 --> C1["~8K Tokens/次"]
    end

    subgraph 优化后:模块化AGENTS.md
        A2[CLAUDE.md 30行] --> B2["~1.2K Tokens/次"]
        A2 --> C2[AGENTS.md x5]
        C2 --> D2[按需加载 ~2K/模块]
        D2 --> E2["每次仅加载1-2个模块"]
        E2 --> F2["~3-4K Tokens/次"]
    end

    style C1 fill:#f66,stroke:#333
    style F2 fill:#6f6,stroke:#333

实操步骤:

# 1. 将CLAUDE.md精简到核心规则(<50行)
# 2. 在各模块目录创建AGENTS.md
mkdir -p src/auth src/billing src/notifications
cat > src/auth/AGENTS.md << 'EOF'
# Auth Module
- JWT + Refresh Token双令牌模式
- 密码用bcrypt cost=12
- 所有路由需要AuthMiddleware
- 测试用testcontainers运行真实PostgreSQL
EOF

cat > src/billing/AGENTS.md << 'EOF'
# Billing Module
- Stripe API集成
- 所有金额以分为整数存储
- 幂等键防止重复扣费
- Webhook需要签名验证
EOF

cat > src/notifications/AGENTS.md << 'EOF'
# Notifications Module
- 基于事件驱动架构
- 使用Bull队列异步处理
- 模板用Handlebars渲染
- 优先级:critical > high > normal > low
EOF

这样,当Claude Code在src/auth目录下工作时,只加载auth相关的指令,不会加载billing或notifications的规则。这可以减少50-70%的指令Token消耗。


第二章:多文件并行重构——Agent编排实战

2.1 单Agent vs 多Agent的策略选择

不是所有重构都适合并行化。决策树如下:

图表4

图表 4

2.2 Task工具:并行Agent的核心

Claude Code通过Task工具启动子Agent(subagent),每个子Agent拥有独立的上下文窗口,互不干扰。

基本语法:

使用Task工具,同时启动3个子Agent:
1. subagent_type=general-purpose:重构 src/auth/ 下的所有文件,将callback改为async/await
2. subagent_type=general-purpose:重构 src/billing/ 下的所有文件,将callback改为async/await  
3. subagent_type=general-purpose:重构 src/notifications/ 下的所有文件,将callback改为async/await

关键参数:

参数 说明 推荐值
subagent_type Agent类型 general-purpose(通用)、Explore(搜索)
description 简短描述(3-5词) 用于追踪,如"refactor auth module"
prompt 详细任务描述 包含具体文件、目标、约束
run_in_background 后台运行 true(并行执行时建议开启)
model 模型选择 haiku(简单任务)、sonnet(默认)
isolation 隔离模式 "worktree"(避免文件冲突)

2.3 实战案例:大规模API迁移

场景:将一个Express REST API项目迁移到Hono框架,涉及15个路由文件、5个中间件、3个工具模块。

步骤一:分析依赖关系

请分析 src/ 目录下所有文件的import依赖关系,找出哪些文件
相互引用,哪些是完全独立的。输出一个依赖图。

步骤二:分组并行重构

图表5

图表 5

向Claude Code下达的具体指令:

我需要将整个项目从Express迁移到Hono。请使用Task工具并行启动3个子Agent:

Agent 1(description: "migrate routes"):
- 搜索 src/routes/ 下所有 .ts 文件
- 将 express.Router() 改为 new Hono()
- 将 req/res/next 改为 c (Hono的Context对象)
- 将 router.get('/path', handler) 改为 app.get('/path', handler)
- 保持业务逻辑不变

Agent 2(description: "migrate middleware"):
- 搜索 src/middleware/ 下所有 .ts 文件
- 将 (req, res, next) => {} 改为 async (c, next) => {}
- 将 res.status(401).json() 改为 c.json({error}, 401)
- 将 next() 改为 await next()

Agent 3(description: "migrate utils"):
- 搜索 src/utils/ 下所有 .ts 文件
- 移除所有 express 类型导入
- 将 Request/Response 类型替换为 Context

每个Agent使用 isolation: "worktree" 运行,避免冲突。
完成后报告各自的修改文件列表。

步骤三:集成验证

所有子Agent完成后,在主Agent中执行集成:

所有Agent都完成了迁移。现在请:
1. 安装 hono 依赖:npm install hono
2. 更新 src/index.ts 作为Hono应用入口
3. 运行 TypeScript 编译检查:npx tsc --noEmit
4. 报告所有类型错误,逐个修复

2.4 Worktree:并行开发的安全网

当多个Agent同时修改不同文件时,Git worktree提供隔离保证:

# Claude Code内置worktree支持
# 在对话中直接使用 EnterWorktree 工具
# 或通过命令行:

# 创建隔离工作区
git worktree add ../feature-auth refactor/auth-module
git worktree add ../feature-billing refactor/billing-module

# 在两个终端分别启动Claude Code
cd ../feature-auth && claude
cd ../feature-billing && claude

# 完成后合并
git checkout main
git merge refactor/auth-module
git merge refactor/billing-module

# 清理worktree
git worktree remove ../feature-auth
git worktree remove ../feature-billing

Worktree vs 分支 vs 单会话对比:

维度 单会话 分支 Worktree
隔离性 无 代码隔离 完整文件系统隔离
上下文共享 完全共享 不共享 不共享
并行能力 顺序执行 需要多终端 原生支持
适合场景 小改动 中等项目 大规模并行
冲突风险 高 中 低

第三章:Token优化——降低成本的科学方法

3.1 Token消耗的三大黑洞

图表6

图表 6

黑洞一:冗余文件读取

每次让Claude读取文件,完整内容都会进入上下文。一个500行的文件约消耗2000-3000 Token。

优化策略:

# 差:读取整个文件
请读取 src/services/userService.ts 并修改 createUser 方法

# 好:只读取相关部分
请读取 src/services/userService.ts 的第45-80行(createUser方法)并修改

# 更好:直接描述修改
在 src/services/userService.ts 的 createUser 方法中,
将第52行的 const user = await prisma.user.create({data})
改为 const user = await prisma.user.create({data, select: {id: true, email: true}})

黑洞二:过度详细的历史

Claude Code会自动压缩历史,但你可以加速这个过程:

# 不要等到上下文告急
# 在每个阶段性任务完成后主动压缩
/compact 已完成用户模块的重构,接下来处理订单模块

# 在压缩时给Claude一个摘要提示
# 这样压缩后的摘要会保留关键决策

黑洞三:不必要的Skill加载

每个被激活的Skill都会消耗上下文空间。一个复杂的Skill可能占用5K-50K Token。

# 查看(当前安装了哪些Skills)
ls ~/.claude/skills/

# 禁用不需要的Skills(在.claude/settings.json中)
{
  "skills": {
    "disabled": ["heavy-skill-you-dont-need"]
  }
}

3.2 模型选择策略:Sonnet vs Haiku vs Opus

不同任务适合不同模型,选择错误会浪费大量Token和金钱:

图表7

图表 7

具体场景对照表:

任务类型 推荐模型 原因
代码格式化、简单重构 Haiku 足够准确,成本1/10
日常功能开发、Bug修复 Sonnet 性价比最优
跨模块架构重构 Sonnet + worktree 并行处理更高效
复杂Bug诊断(多系统交互) Opus 需要深度推理
代码审查 Sonnet 阅读理解能力强
生成测试用例 Haiku 模式化任务
性能优化分析 Opus 需要系统级思维

在Claude Code中切换模型:

# 方式一:通过/effort命令
/effort high    # 使用更强的推理(更多思考Token)
/effort medium  # 默认平衡
/effort low     # 快速响应(更少思考Token)

# 方式二:在Task工具中指定模型
# 对于子Agent,直接指定model参数
# model: "haiku" 用于简单搜索
# model: "sonnet" 用于编码任务
# model: "opus" 用于复杂推理

# 方式三:环境变量
export CLAUDE_MODEL=claude-haiku-4-5-20251001  # 全局切换

3.3 Effort级别的精确调校

/effort命令控制Claude Code的"思考深度"。这不仅是快慢的区别,更直接影响Token消耗:

图表8

图表 8

关键技巧:在提示中使用"触发词"来临时提升思考深度,无需手动切换effort:

3.4 Prompt Caching——免费的上下文复用

Claude Code自动利用Prompt Caching机制。当你的系统提示(CLAUDE.md等)在多次请求中保持不变时,这些Token以缓存价格计费(正常价格的10%)。

最大化缓存命中的策略:

  1. 保持CLAUDE.md稳定:不要频繁修改CLAUDE.md,每次修改都会使缓存失效
  2. 分层设计:将不变的规则放在全局CLAUDE.md,将可能变化的放在AGENTS.md
  3. 会话连续性:在一个会话中完成相关任务,而非反复开关新会话

图表9

图表 9


第四章:完整实战——重构一个真实项目

4.1 项目背景

假设我们有一个中等规模的电商后端项目,需要完成以下优化任务:

  1. 将所有Service层从Callback模式改为async/await
  2. 统一错误处理格式
  3. 为所有公共方法添加Zod输入验证
  4. 添加日志中间件

项目结构:

src/
├── routes/
│   ├── userRoutes.ts
│   ├── orderRoutes.ts
│   └── productRoutes.ts
├── services/
│   ├── userService.ts
│   ├── orderService.ts
│   └── productService.ts
├── middleware/
│   ├── auth.ts
│   └── errorHandler.ts
├── models/
│   └── index.ts
└── index.ts

4.2 步骤一:优化项目配置

首先创建模块化的指令文件,确保后续操作高效:

# 精简根目录CLAUDE.md(<30行)
cat > CLAUDE.md << 'EOF'
# E-Commerce Backend

## Stack
- TypeScript 5.x + Node.js 20
- Express 4.x + Prisma 6.x
- PostgreSQL 16

## Rules
- 使用中文回复
- 不要自动commit
- 先读文件再修改
- 保持现有业务逻辑不变
- 修改后运行 npx tsc --noEmit 验证类型
EOF

# 创建模块级AGENTS.md
cat > src/services/AGENTS.md << 'EOF'
# Services Module
- 所有方法必须返回 Promise
- 错误统一抛 AppError(code, message)
- 输入验证使用 Zod schema
- 数据库操作使用 Prisma client
EOF

cat > src/routes/AGENTS.md << 'EOF'
# Routes Module  
- 每个 resource 一个路由文件
- 使用 express.Router()
- 中间件顺序:auth -> validate -> handler
- 响应格式统一 { success: boolean, data?, error? }
EOF

4.3 步骤二:并行重构Service层

向Claude Code下达指令:

我需要重构 src/services/ 下的三个文件,将所有callback风格的
异步方法改为async/await。请使用Task工具并行处理:

Agent 1(description: "refactor userService"):
读取 src/services/userService.ts,将所有使用callback的函数
改为async/await模式。保持函数签名和返回类型不变。

Agent 2(description: "refactor orderService"):
同上,处理 src/services/orderService.ts

Agent 3(description: "refactor productService"):
同上,处理 src/services/productService.ts

所有Agent完成后,运行 npx tsc --noEmit 检查类型错误。

预期结果:三个Service文件同时被修改,总耗时接近单个文件的修改时间。

4.4 步骤三:统一错误处理(顺序执行)

错误处理涉及所有模块,存在依赖关系,应顺序执行:

现在统一错误处理:
1. 创建 src/utils/AppError.ts,定义统一的错误类
2. 更新 src/middleware/errorHandler.ts 使用新的AppError
3. 更新所有Service文件中的错误抛出方式
4. 运行 npx tsc --noEmit 验证

完成后 /compact 保存进度

4.5 步骤四:添加Zod验证(并行执行)

验证逻辑各Service独立,可以并行:

为所有Service的公共方法添加Zod输入验证。请并行处理:

Agent 1(description: "add user validation"):
在 src/services/userService.ts 中:
- 为 createUser 添加用户名/邮箱/密码的Zod schema
- 为 updateUser 添加部分更新的Zod schema
- 在方法开头调用 schema.parse(input)

Agent 2(description: "add order validation"):
在 src/services/orderService.ts 中添加对应的Zod验证

Agent 3(description: "add product validation"):
在 src/services/productService.ts 中添加对应的Zod验证

完成后运行 npx tsc --noEmit

4.6 步骤五:最终验证与压缩

请执行最终检查:
1. npx tsc --noEmit — 类型检查
2. npm test — 运行所有测试
3. 报告所有修改文件的列表和变更摘要
4. /compact 所有重构完成,项目从callback迁移到async/await,统一了错误处理和输入验证

第五章:常见陷阱与最佳实践

5.1 上下文管理七大陷阱

陷阱 症状 解决方案
CLAUDE.md膨胀 每次启动消耗大量Token 精简到<50行,模块信息移到AGENTS.md
过度文件读取 上下文快速填满 只读取需要的行范围,或直接描述修改
忽略/compact Agent"遗忘"早期决策 每40%使用率压缩一次
单会话做所有事 后期质量下降 按任务阶段分多个会话
Skill堆砌 系统提示过长 只启用当前任务需要的Skill
不监控成本 月底账单惊人 定期使用/cost,设置预算上限
压缩时机过晚 压缩摘要质量差 在60%使用率时主动压缩

5.2 多Agent编排最佳实践

  1. 任务描述要极其具体:子Agent没有主Agent的上下文,必须把所有必要信息写进prompt
  2. 使用worktree隔离:isolation: "worktree" 避免文件冲突
  3. 控制并发数量:同时不超过5个子Agent,否则API限流
  4. 简单任务用Haiku:文件搜索、格式化等用model: "haiku"节省成本
  5. 主Agent做集成:子Agent负责执行,主Agent负责汇总和验证

5.3 完整工作流总览

graph TD
    START[启动新会话] --> CHECK[/cost 检查上下文]
    CHECK --> PLAN[制定任务计划]
    PLAN --> SPLIT{任务可并行?}

    SPLIT -->|可以| PARALLEL[Task工具启动子Agent]
    SPLIT -->|不可以| SEQUENTIAL[顺序执行]

    PARALLEL --> MERGE[主Agent汇总结果]
    SEQUENTIAL --> VERIFY[验证结果]
    MERGE --> VERIFY

    VERIFY --> TEST[运行测试]
    TEST --> MORE{还有任务?}

    MORE -->|有| COMPACT[/compact 压缩]
    COMPACT --> CHECK
    MORE -->|没有| DONE[完成]

    DONE --> COST[/cost 最终报告]

    style START fill:#69f,stroke:#333
    style DONE fill:#6f6,stroke:#333
    style COMPACT fill:#f96,stroke:#333

第六章:进阶技巧速查

6.1 上下文效率提升速查表

技巧 节省量 操作
精简CLAUDE.md 3-8K Token/次 移除冗余示例和注释
使用AGENTS.md分模块 2-5K Token/次 按需加载代替全量加载
指定行范围读取 1-3K Token/次 "读取第X-Y行"
主动/compact 30-60%已用 在60%使用率时压缩
Haiku处理简单任务 80-90%成本 model: "haiku"
Prompt缓存复用 90%系统提示成本 保持CLAUDE.md稳定

6.2 关键Slash命令速查

/cost          # 查看当前会话Token和费用
/compact       # 压缩对话历史(可附带摘要提示)
/clear         # 清空会话历史
/rewind        # 回退到之前的状态
/effort high   # 提升思考深度
/effort low    # 降低思考深度(节省Token)
/help          # 查看所有可用命令

6.3 关键环境变量

CLAUDE_MODEL              # 默认模型
CLAUDE_CODE_MAX_TOKENS    # 最大输出Token数
CLAUDE_CODE_BUDGET_TOKENS # 上下文窗口大小
DISABLE_PROMPT_CACHING    # 禁用缓存(调试用)

延伸阅读


参考来源

  1. Best practices for Claude Code - Claude Code Docs — Anthropic官方最佳实践文档,涵盖CLAUDE.md编写、上下文管理、成本控制等核心内容
  2. Using Claude Code: Session Management and 1M Context — Anthropic官方博客,详解/compact、/clear、/rewind等会话管理命令
  3. Context Management Strategies for Claude Code: A Complete Guide — 第三方深度指南,覆盖上下文分层策略和AGENTS.md模块化设计
  4. 7 Practical Techniques to Optimize Claude Code Token Usage — 7种实用的Token优化技巧,包含具体数据和对比分析
  5. Claude Code Sub-Agents Guide (2026) — 子Agent并行执行的完整指南,涵盖Task工具参数和编排模式

训练营适用性评估:本教程适合进阶训练营(学员已有2周以上Claude Code使用经验),建议教学时长3小时(含1小时实操练习)。实操练习建议:学员在自己的项目中完成一次完整的上下文优化改造(精简CLAUDE.md + 创建AGENTS.md + 并行重构一个模块),并对比优化前后的/cost数据。

[!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学通信知识星球海报-扫码加入