Claude Code上下文满了怎么办?compact、clear和resume怎么用

摘要

Claude Code使用时间越长,读取的代码、命令输出和对话记录越多,上下文就越容易接近上限。本文介绍/compact/clear/resume三个常用命令的区别,并给出不同开发场景下的使用方法。

ChatGPTplus/pro一键订阅入口!

使用Claude Code修改大型项目时,很多人都会遇到这些情况:

  • 前面说过的要求突然不再遵守;
  • 修改代码开始偏离原来的任务;
  • 回答速度变慢;
  • 重复读取已经分析过的文件;
  • 提示上下文接近上限;
  • 自动压缩后遗漏部分细节。

这些问题不一定是模型能力下降,更可能是当前会话的上下文已经堆积了太多内容。

Claude Code的上下文不只有聊天记录,还包括项目规则、读取过的文件、命令输出、工具调用结果和模型回复。随着任务持续进行,这些内容会不断占用上下文空间。官方也提醒,上下文接近上限后,模型可能开始遗漏早期要求或增加错误。

一、先用/context查看谁占用了上下文

在决定清理之前,可以先输入:

/context

这个命令会显示当前上下文的占用情况,包括对话、文件读取、项目规则、工具和其他内容。

如果想查看更详细的展开结果,可以使用:

/context all

通过这个页面,可以判断上下文到底是被长对话占满,还是读取了大型日志、依赖文件或过多项目规则。Claude Code官方将/context定位为查看当前上下文占用和优化建议的工具。

二、/compact:保留当前任务,但压缩历史内容

如果当前功能还没有完成,只是上下文快满了,优先使用:

/compact

/compact不会开始一个完全空白的新对话,而是把之前的长对话整理成一份摘要,再继续当前会话。

适合这些情况:

  • 一个功能已经修改到一半;
  • 还需要保留前面的分析结论;
  • 已经确认了修改范围和技术方案;
  • 不希望重新解释整个项目;
  • 对话很长,但当前任务还没有结束。

为了避免压缩时遗漏重点,还可以给/compact增加要求:

/compact 保留登录报错原因、已修改文件、剩余任务和测试结果

或者:

/compact 只保留当前支付模块的修改计划和未解决问题

带重点的压缩,通常比直接等待系统自动压缩更稳妥。官方说明,Claude Code接近上下文上限时会自动压缩,但手动指定重点可以让摘要优先保留当前任务真正需要的信息。

需要注意,/compact不是无损保存。

项目根目录中的CLAUDE.md和部分长期规则会重新加载,但某些按路径触发的规则、子目录中的说明和较早的细节,可能需要再次读取相关文件后才会重新进入上下文。

三、/clear:结束当前任务,重新开始新对话

如果当前任务已经结束,准备处理完全不同的问题,可以输入:

/clear

/clear会开启一个空上下文的新对话,之前的聊天记录不会继续占用当前上下文。

适合这些场景:

  • 登录问题已经修好,准备开发支付功能;
  • 前面分析的是前端,现在准备处理后端;
  • 当前会话尝试了太多错误方向;
  • 旧任务内容已经没有保留价值;
  • Claude一直受到前面错误结论影响。

/clear/compact最大的区别是:

  • /compact:压缩旧内容,继续原任务;
  • /clear:清空当前上下文,开始新任务。

不过,执行/clear并不会删除之前的会话。旧会话仍会保存在本地,之后可以通过/resume重新打开。

还可以在清理时为旧会话命名:

/clear login-bug

这样之后更容易在会话列表中找到它。

四、/resume:找回以前的会话

/resume的作用不是清理上下文,而是恢复以前保存的会话。

在Claude Code内部输入:

/resume

会打开会话选择列表,可以查看之前的任务并继续工作。

在终端重新启动Claude Code时,也可以使用:

claude --resume

它会打开历史会话选择器。

如果只想继续当前目录中最近一次会话,可以使用:

claude --continue

还可以先给会话命名:

/rename auth-refactor

之后直接恢复:

claude --resume auth-refactor

Claude Code会持续把交互式会话保存在本地,因此退出终端、执行/clear或重新打开项目后,通常仍可以继续之前的任务。会话默认与项目目录关联,找不到历史会话时,要先确认是否在正确的项目目录中。

五、三个命令应该怎么选?

可以按照下面的方式判断。

当前任务还没完成

使用:

/compact

最好写明需要保留的重点。

当前任务已经结束,准备做新功能

使用:

/clear

避免旧任务持续占用上下文。

退出终端后,想继续昨天的任务

使用:

claude --resume

或者:

claude --continue

想切换到另一个历史任务

在当前会话输入:

/resume

六、减少上下文过快占满的方法

除了使用这三个命令,还可以注意以下几点。

不要让Claude一次读取整个大型项目,先限定目录和文件范围。

大型日志不要全部粘贴,只提供报错附近的内容。

项目长期规则写进CLAUDE.md,不要每次都在对话中重复说明。

跨目录调查可以交给子Agent完成,只把最终结论返回主会话,减少大量文件内容进入主上下文。

一个功能完成后及时/clear,不要在同一个会话里连续处理多个无关需求。官方也建议在不同任务之间主动清空上下文,并将大型代码库调查交给独立上下文的子Agent。

总结

Claude Code上下文接近上限时,三个命令的用途可以简单概括为:

  • /compact:压缩历史内容,继续当前任务;
  • /clear:清空当前上下文,开始新的任务;
  • /resume:恢复之前保存的历史会话。

实际使用时,可以先运行/context查看占用情况。任务没有完成就使用带重点的/compact,任务已经切换就使用/clear,需要找回旧工作时再使用/resume

原创持续更新实战干货,点个关注收藏不迷路。

欢迎订阅专栏、翻阅往期文章,转发与各位同行共勉。