Claude Code 斜杠命令(三):上下文管理——不让 Token 成为瓶颈

系列目录

  1. (一)快速入门——最常用的基础命令
  2. (二)对话管理——让你的会话有条不紊
  3. (三)上下文管理——不让 Token 成为瓶颈(本文)
  4. (四)代码审查三剑客
  5. (五)模型与推理控制
  6. (六)并行工作与后台 Agent
  7. (七)项目配置与权限管理
  8. (八)研究、规划与 CI/CD 集成

# 上下文管理 ## 查看状态 - /context 显示 Token 占用 - 占用比例与行动阈值 ## 压缩上下文 - /compact 精简历史 - instructions 参数指定保留内容 ## 快速回顾 - /recap 生成进展摘要 - 先 recap 再 compact ## 持久化记忆 - /memory 编辑 CLAUDE.md - /init 自动生成初始 CLAUDE.md ## 两级记忆 - 项目级:<项目根>/CLAUDE.md - 个人级:~/.claude/CLAUDE.md

为什么上下文窗口会成为瓶颈?

每次和 Claude Code 对话,模型能"看见"的内容是有限的——这个上限叫做上下文窗口,单位是 Token(大约每 3-4 个英文字符或 1-2 个汉字算 1 个 Token)。随着对话轮次增加、代码文件不断粘贴进来,Token 消耗越来越快。窗口快满时,模型会开始"忘记"早期内容,响应速度也会明显变慢。把上下文当作 RAM:装得越多,越容易塞不下。


/context:读懂你的"内存表盘"

/context

运行这条命令,Claude Code 会显示当前会话的 Token 使用情况,通常包括:

  • 已用 Token 数 / 上下文窗口上限
  • 百分比占用
  • 各类内容(对话历史、文件内容、系统提示)的大致分布

什么数字说明需要行动?

占用比例 状态 建议
< 50% 绿灯 正常工作
50–75% 黄灯 注意节奏,避免大段粘贴
75–90% 橙灯 考虑执行 /compact
> 90% 红灯 立即压缩,否则关键内容可能被截断

养成习惯:在开始一个新的复杂任务前先跑一次 /context,确认当前窗口有足够余量。


/compact:给上下文"瘦身"

/compact [instructions]

/compact 会把当前的完整对话历史压缩成一份精简摘要,丢弃冗余的中间过程,保留关键决策和代码状态。压缩后 Token 占用可以骤降 60-80%,让你继续当前任务而不必开新会话。

什么时候用?

  • /context 显示占用超过 75%
  • 对话中有大量调试来回、已解决的错误日志
  • 准备进入下一个功能模块,前面的讨论细节不再需要

[instructions] 参数:告诉 Claude 压缩时保留什么

不带参数直接运行时,Claude 会自动判断保留要点。但有时你需要更精准的控制:

/compact 保留所有已确认的 API 接口设计和数据库 schema,丢弃调试日志
/compact focus on the authentication flow decisions, discard UI discussions
/compact 当前正在重构 OrderService,保留重构目标和已修改的方法签名

这个参数相当于给压缩任务加了一份"压缩指南",避免 Claude 把你最需要的上下文也一起压掉。

技巧:在执行 /compact 前,先用一句话总结当前进展发给 Claude,让这句话也进入压缩摘要,方便后续快速定位。


/recap:快速回顾当前进展

/recap

/recap 不压缩,只是让 Claude 输出一份当前会话的简要回顾——做了什么、决定了什么、下一步是什么。适合以下场景:

  • 对话中断后重新回来,忘了刚才做到哪一步
  • 需要把当前进展分享给团队成员
  • 在执行 /compact 之前,先确认摘要方向是否正确

/recap/compact 的关系:前者是"读",后者是"写(并清理)"。先 recap 确认内容,再 compact 执行压缩,是稳妥的两步走。

flowchart LR A[/recap 回顾进展] --> B{摘要方向正确?} B -- 是 --> C[/compact 压缩上下文] B -- 否 --> A

/memory 和 /init:让 Claude 记住项目知识

CLAUDE.md 文件机制

Claude Code 有一套持久化记忆系统,依托 CLAUDE.md 文件实现。每次 Claude 启动或切换项目时,它会自动读取相关的 CLAUDE.md,把内容注入上下文——这就是"长期记忆"的来源。

两种记忆层级:

层级 文件位置 作用范围
项目记忆 <项目根目录>/CLAUDE.md 仅当前项目
个人记忆 ~/.claude/CLAUDE.md 所有项目通用

项目记忆适合存放:技术栈约定、代码风格规范、重要模块说明、禁止触碰的文件。
个人记忆适合存放:你的偏好设置、常用缩写、跨项目的工作习惯。

flowchart LR A[Claude Code 启动] --> B[~/.claude/CLAUDE.md 个人记忆] A --> C[项目根/CLAUDE.md 项目记忆] B --> D[注入上下文] C --> D

/memory:查看和编辑记忆文件

/memory

运行后,Claude Code 会打开当前生效的 CLAUDE.md 文件供你编辑。你可以直接在其中增删内容,保存后立即生效(下次 Claude 读取时会载入新内容)。

/init:一键初始化项目记忆

/init

对于还没有 CLAUDE.md 的项目,/init 会分析当前项目的目录结构、主要文件和技术栈,自动生成一份初始的 CLAUDE.md。这比从空白文件手写要快得多,生成后你只需要补充业务逻辑层面的约定即可。


上下文管理完整工作流

graph LR A[/context 检查占用] --> B{占用 > 75%?} B -- 否 --> C[继续工作] B -- 是 --> D[/compact 压缩 + instructions] D --> C

这个四节点流程覆盖了日常最常见的处理路径:定期检查 → 判断是否告急 → 按需压缩 → 回到工作状态。把 /context 检查纳入每隔几轮对话的习惯动作,就能在窗口爆满前主动介入。


最佳实践:项目初期建立好的 CLAUDE.md

一份优质的项目 CLAUDE.md 应该在项目启动时就建立,而不是等到出问题再补救。推荐结构:

# 项目概述
一句话描述项目目标和技术栈。

# 目录结构说明
- src/api/      后端接口层
- src/services/ 业务逻辑层
- src/models/   数据模型

# 代码约定
- 使用 TypeScript strict 模式
- 函数命名:动词 + 名词(如 getUserById)
- 禁止直接修改 src/generated/ 下的文件(自动生成)

# 当前开发状态
- 正在实现:用户认证模块
- 已完成:数据库 schema 设计

# 重要接口
GET /api/users/:id → UserService.getUserById()

关键原则:写给"刚加入项目的 Claude"看。假设它对你的项目一无所知,把最容易踩坑的地方、最重要的约定,用最简洁的方式写清楚。


常见误区

误区一:等到 Token 耗尽才压缩
当上下文窗口超过 90% 时,Claude 的响应质量已经开始下降。正确做法是在 75% 左右主动执行 /compact,留有余量。

误区二:/compact 不带 instructions 随意压缩
不加参数时,Claude 会自行判断哪些内容重要——但它不一定和你的判断一致。如果当前任务有明确的关键上下文(比如一个复杂的重构计划),务必通过 instructions 明确告知保留范围。

误区三:把所有内容都写进 CLAUDE.md
CLAUDE.md 的内容每次都会被注入上下文,写得越多,启动时消耗的 Token 越多。只写稳定且高价值的信息(规范、约定、结构说明),动态的进展状态放在对话里即可,不要把它当日记本用。


上下文管理是 Claude Code 进阶使用中最容易被忽视、但收益最高的一环。掌握 /context + /compact + CLAUDE.md 这套组合拳,你会发现长会话的体验能够得到显著改善——AI 不再"忘事",你也不再频繁开新会话重建上下文。

下一篇我们进入代码质量的领域:(四)代码审查三剑客

实操清单

  • 执行 /context 查看当前 Token 占用情况
  • 在新项目根目录执行 /init 生成初始 CLAUDE.md
  • 编辑 CLAUDE.md,补充技术栈约定、禁止修改的文件等关键信息
  • 在 Token 占用超过 75% 时执行 /compact
  • /compact 的 instructions 参数指定需要保留的关键上下文
  • 长时间中断后用 /recap 快速回顾再继续工作
  • 执行 /memory 确认个人记忆文件(~/.claude/CLAUDE.md)的内容合理