跳转到内容

上下文窗口管理

进阶

最近复核于 2026-07-10适用 Claude Code CLI v2.1

本教程属于学习路径: · 浏览全部路径

上下文窗口(context window)是 Claude Code 的“工作记忆”——每次对话能同时处理的信息量有限。这篇文章用桌面隐喻解释三个核心操作:/clear/compact/rewind,并把产品行为与个人经验建议分开。

理解上下文窗口,不需要任何技术概念。想象一个场景:

Claude 只有一张办公桌。 这张桌子的面积是固定的。你每让它读一个文件,就像在桌上加一张纸。你每回复一句,就像再叠一张。时间长了,桌面堆满了纸,再想放新东西,只能在桌上挤——最早放的那些纸会被挤到地上,再也找不回来。

在 Claude Code 里,“纸张掉到地上”就是早期对话被遗忘。你会发现 Claude 开始问你“前面说过什么来着?”、或者给出的回复和几轮之前完全接不上。

这就是上下文窗口在起作用。它不是无限空间:对话、文件、项目指令和工具定义都会占用容量。具体上限取决于模型与产品配置;不要用固定 token 数或“多少行代码等于多少 token”作为跨版本保证,用 /context 查看当前会话的实际组成。

三个操作,对应三种桌面管理策略

Section titled “三个操作,对应三种桌面管理策略”
命令 桌面类比 什么时候用
/clear 把所有纸收走,换一张空桌面 任务完全切换时
/compact 把一叠纸的内容摘要成一张索引卡,节省空间但保留关键信息 桌面开始堆满,但当前任务还没做完
/rewind 打开 checkpoint 菜单,可恢复对话、代码或两者 Claude 开始走偏,需要退回重试

下面逐个展开。

  • 已经完成 10 分钟上手 中的安装和配置
  • 能正常启动 Claude Code 对话
  • 有过至少一次“对话长到 Claude 开始忘事”的体验(如果没有,这篇帮你预防)

你在做数学作业,桌面摊满了草稿纸、公式表、计算器。做完了,你拿出语文作业,但数学草稿纸还铺在桌上。写字时,你手肘压着草稿纸,余光扫到公式,思路就歪了。

不对——如果你不收走数学作业就开始写语文,语文作业的质量会受影响。

Claude Code 完全一样。你上一轮让它帮你写前端页面,上下文里全是 HTML、CSS、React 组件。然后你突然说“帮我分析这个 Python 脚本的性能”,但前端对话还留在上下文里。Claude 可能把“组件”理解为 Python 类,把“样式”理解为代码风格——上下文污染,理解跑偏。

如果一个 session 混入很多无关任务,旧需求可能干扰新任务。但回复变差也可能来自需求不清、工具失败或验证不足,不能只凭感觉断定是上下文问题。先看 /context,再决定是否清理。

  • 切换任务时(比如从前端开发切到数据分析):/clear
  • 同一任务内换文件(比如还是开发这个页面,只是要看另一个组件):不要 /clear——你需要前文的上下文来理解当前文件
  • 同一 feature 内连续工作:不要 /clear,用 /compact(下一节)

判断口诀:问自己“现在的新任务还需要前面聊过的东西吗?” 如果答案是否定的,就 /clear

在 Claude Code 对话中输入:

/clear

Claude Code 会清空当前对话的上下文,从一张空桌面重新开始。但注意:CLAUDE.md 和记忆系统不受 /clear 影响——这些是 Claude 每次启动都会读的“永久便签”,不会因为清桌面而消失。

成功标准:清完后 Claude 不再引用上一任务的细节;你可以用一句新任务开场,它不会把旧文件名、旧需求混进来。

如果清完后你发现还需要上一任务的结论:不要指望从 /clear 找回对话——结论应事先写进项目文件或 Git 提交。下次切换前先说:

把当前进度、关键决策和待办写成一段,保存到 PROGRESS.md(或你指定的文件),我接下来要 /clear 换任务。

你开了一个很长的会议,白板上画满了架构图、贴了 20 张便签。会还没结束,白板已经没地方写了。你做什么?不是把所有便签撕掉(那是 /clear),而是把关键结论写成 5 行纪要,占一个小角落,原来的 20 张便签可以收起来了。

这就是 /compact。 Claude 把对话历史压缩成摘要,目标是保留关键决策和当前进度,同时释放空间。摘要会丢失细节,因此重要事实仍应写入项目文件或提交记录。

Claude Code 会在需要时自动压缩。你也可以在一个长任务的阶段边界主动运行 /compact,并附上希望摘要重点保留的内容。不要按固定分钟数机械执行;是否压缩应由任务边界、/context 输出和当前响应质量共同决定。

  • Claude 开始问你“前面说过什么来着?”
  • Claude 的回复明显变短、变敷衍、或者和前面接不上
  • /context 显示无关文件、工具或旧任务占用了明显空间
  • 当前任务仍要继续,但需要先保存阶段结论

在 Claude Code 对话中输入:

/compact

想保留重点时,可以带说明(按你的真实进度改写):

/compact 请重点保留:当前目标、已改文件列表、尚未完成的待办、我明确否决过的方案。

Claude Code 会生成一份对话摘要,替代原始对话历史。你会看到一条类似 “Context was compacted” 的提示。继续工作即可——Claude 仍然知道你们在做什么,但上下文空间释放出来了。

成功标准:压缩后 Claude 仍能说出当前目标和已改文件;若它丢了关键约束,把约束补进 CLAUDE.md 或项目文件,再继续。

如果 /compact 后 Claude “忘了”重要决定:

刚才 compact 后丢了这些约束:(列出 1-3 条)。请确认你还记得;若不记得,我把它们写进 CLAUDE.md。

玩游戏时,你会在打 boss 前存档。如果打的过程死了,从存档点重来——不用从头玩一遍。

Claude Code 会跟踪 Claude 写入和编辑的文件。按 Esc 两次或输入 /rewind 会打开 checkpoint 菜单,你先选择某条历史提示,再决定只恢复对话、只恢复代码,或同时恢复两者。

  • Claude 开始修改你没让它碰的文件
  • Claude 的回复明显跑偏(你问 A,它答了一个完全不相关的 B)
  • Claude 陷入循环(反复给出同一类回答、来回改同一个文件)
  • 你意识到刚才的需求描述有歧义,想重新说清楚
  • Restore code and conversation:同时恢复文件和对话
  • Restore conversation:保留当前文件,只回到旧对话
  • Restore code:回退 Claude 的文件编辑,但保留当前对话
  • checkpoint 不是 Git 的替代品:它不跟踪 Bash 命令造成的改动,也不覆盖人工编辑;重要工作仍要先 commit
  • 在终端中使用 Claude Code 时,双击 Esc 等同于 /rewind,手不用离开键盘
/rewind

或者双击 Esc 键。

成功标准:菜单打开后,你能选到目标提示,并看清三种恢复模式的差异;恢复后用 git diff(若已用 Git)确认文件状态符合预期。

如果 /rewind 后文件仍不对:checkpoint 可能覆盖不了 Bash/人工改动。改用已知安全的 Git 操作(例如查看 git diff、恢复到上次 commit 的单文件)。不要用破坏性命令“试运气”。

/usage 和 /context — 监控你的桌面

Section titled “/usage 和 /context — 监控你的桌面”

这些工具让你看到桌面的“剩余空间”,避免盲目操作。

/usage

显示用量相关信息。API 用户可把本地估算作为排查线索,但最终账单以 Claude Console 为准;订阅用户应查看方案用量,不能把同一数字直接当作额外账单。

/context

运行 /context 查看当前上下文由哪些部分组成。比例不是质量分数,也不存在官方的“过半必退化”阈值。优先处理无关的大文件、旧任务和不需要的工具;如果任务已切换,使用 /clear 比继续压缩旧上下文更合适。

不要用固定“两小时规则”判断会话是否失效。一个任务可能十分钟就应切换,也可能持续更久。更可靠的停止点是:目标已经改变、阶段成果已经验证、下一阶段不再依赖当前对话细节。

  1. 在 session 结束前运行 /wiki hot(如果你有 wiki 系统),把当前进度、关键决策、待办事项写成一份持久化记录;没有 wiki 时,让 Claude 写入普通文件即可:
把当前进度、关键决策、待办事项写入 PROGRESS.md,用条目列表,方便下一个会话接着做。
  1. 关闭当前 session,开一个新的
  2. 新 session 的 Claude 会重新读取 CLAUDE.md 和项目文件——相当于新桌面 + 新鲜记忆,不带旧对话的任何残留
  3. 告诉新 session:
上次我们在做 X,进度在 PROGRESS.md(或 Y 文件)里,请先读该文件,然后继续完成 Z。

这就是为什么记忆系统(参考记忆系统)很重要——它让你在 session 之间传递关键信息,而不是依赖 Claude 的“短期记忆”(上下文窗口)。

从不 /clear(所有任务混在一起)

Section titled “从不 /clear(所有任务混在一起)”

一个 session 里从前端写到后端、从 bug 修复切到功能开发、中间又问了几次技术原理。上下文污染叠加,Claude 的回复质量从“优秀”跌到“勉强能用”。每次任务切换时判断:前面的对话对当前任务还有用吗?没有就 /clear

每隔固定分钟数压缩,可能在短任务里制造不必要的信息损失。解决:在阶段边界保存关键结论,再结合 /context 决定主动压缩、清空还是继续。

目标已经变了,仍因为“对话里还有历史”而不愿切换。解决:先把已验证结论写入文件或提交,再为新目标开新 session。

/clear 太早(丢了当前任务的有用上下文)

Section titled “/clear 太早(丢了当前任务的有用上下文)”

在一个 feature 内部频繁 /clear,每次都从“你是谁”重新开始。前面的设计讨论、中间调试的发现、临时的需求变更记录全没了。判断口诀:同一个 feature、同一个任务线不要 /clear;跨任务线必须 /clear。

如果只选 Restore conversation,文件会保留;如果只选 Restore code,当前对话仍在。执行前先读菜单上的差异。Bash 命令、人工编辑和 checkpoint 之外的改动仍应使用 git diff 检查,并通过已知安全的 Git 操作恢复。

/usage 是排查线索,不是最终发票。订阅与 API 计费口径不同;以官方控制台/账单为准,详见成本与计费

打开 Claude Code,做一个三段式练习,并勾选完成项:

第一步:模拟不清桌的后果

  1. 告诉 Claude:“帮我写一个简单的 Python 函数,计算斐波那契数列”
  2. Claude 写完。不要执行 /clear
  3. 接着说:“帮我写一个 React 组件,显示用户名片”
  4. 不执行 /clear,继续说:“帮我写一个 shell 脚本,批量重命名文件”
  5. 运行 /usage/context,观察占用组成
  6. 观察:第三次任务时,Claude 的回复质量是不是比第一次差了?如果 Claude 开始把 Python 语法混进 React,或者“忘记”了 React 组件写到哪了,这就是上下文污染的典型案例

第二步:用 /clear 切换任务

  1. 执行 /clear
  2. 说:“帮我写一个 shell 脚本,批量重命名文件”
  3. 观察这次 Claude 的回复质量——和第一次“被污染”的第三任务相比,差异明显

第三步:用 /compact 延长 session

  1. 选一个简单但需要多轮迭代的任务——比如“帮我写一个 HTML 页面,然后改样式、加动画、加响应式”
  2. 每两轮提示后查看 /context
  3. 在阶段边界主动 /compact(可附上要保留的重点)
  4. 观察:/compact 之后 Claude 是否还记得之前的进度?你的迭代是否连贯?

勾选:

  • □ 我能说出 /clear/compact/rewind 各自解决什么问题
  • □ 我实际跑过一次 /clear,并观察到新任务不再被旧任务干扰
  • □ 我实际跑过一次 /compact 或看过自动压缩后的继续对话
  • □ 我知道 /rewind 三种恢复模式的差异,且明白它不能替代 Git
  • □ 我会用 /context(以及需要时的 /usage)做判断,而不是按固定分钟数机械操作
  • 上下文管理是日常节奏的基础——日常节奏 教你如何把这三个命令嵌入每天的开发流程
  • 验证是另一个视角的质量控制——验证方法论 教你确保 Claude 写出来的代码真的能用
  • 记忆系统是 session 之间的长期记忆——记忆系统 教你让 Claude 长记性