长会话里保持有效上下文,核心是减少冗余、控制噪声、按需召回。Claude Code 把上下文视作稀缺资源,配套提供 /compact 摘要压缩、/clear 干净重启、/rewind 回到分叉点、子代理隔离、CLAUDE.md 长期记忆五种治理动作。下面从触发时机、操作成本、副作用三个维度把它们拆开讲清楚。
一、为什么上下文治理不是”提示词优化”
很多团队把上下文吃紧归因于”模型不够强”,但 200K token 窗口下真正决定输出质量的,往往是窗口里装了什么东西。Claude Code 官方文档明确把 /compact、/clear 列为”剔除过时上下文”的标准动作,而不是建议。这意味着上下文治理属于运行时工程,不属于提示词工程。
更要命的是工具调用本身也在吃窗口。读取一个 500 行的 TypeScript 文件大约占 3K-9K token,跑一轮测试输出可能 5K-15K token,而 CLAUDE.md 每次会话都会按字加载——一段 2K token 的项目说明,等于你还没开始问问题就先花掉 1% 的预算。
二、五种策略的对照
| 策略 | 触发时机 | 信息损失 | 操作成本 | 适用场景 |
|---|---|---|---|---|
/compact |
同一任务继续,窗口吃紧 | 中(模型自摘要) | 低(一条命令) | 长调试、重构中段 |
/clear |
切换到全新任务 | 大(仅留 CLAUDE.md) | 低 | 跨任务切分 |
/rewind(双击 Esc) |
走错分支想重打 | 小(只丢错误尝试) | 中 | 推翻方案、试新方向 |
| 子代理(Agent 工具) | 局部工作会产生大量噪声 | 父会话仅看结论 | 中(要写简报) | 跨代码库调研、批量验证 |
CLAUDE.md 长期记忆 |
项目级稳定约束 | 无运行时损失 | 一次性维护 | 编码规范、架构约束 |
三、/compact 与 /clear 的关键差异
/compact 让模型把历史对话压成一段摘要,再把摘要塞回窗口继续;/clear 则直接清空历史,只保留 CLAUDE.md 与必要配置。官方描述把 /compact 形容为”低投入、模型决定保留什么”,把 /clear 形容为”零损耗、你决定保留什么”。
实际差异有三点值得注意:
/compact是有损压缩,具体决策、确切命名、边缘案例常常丢失;- 调试型会话后做
/compact,下一轮”修另一个 warning”很容易引用不到旧现场; /clear配合手写简报最稳——把”要做什么、约束是什么、已排除什么方案”用三五行写清楚,效果远超自动摘要。
四、/rewind 的隐藏用法
双击 Esc 或运行 /rewind 跳回任意历史消息并从那里重发提示,后面的消息会被丢弃。相比”在错误方向上发一句’换种方式'”,/rewind 保留有效文件读取,只剔除失败尝试。官方把它列为”纠错的首选动作”,原因正是失败路径往往会污染后续判断。
五、子代理为什么是治理工具
很多人把 Agent 子代理理解成”并行干活”,但 Anthropic 工程师在公开文章里强调,子代理更大的价值是隔离上下文。子代理拿到自己干净的窗口、自己的系统提示,能在主会话之外读代码、跑测试、整理文档,只把结论回报给父会话。
判断是否该拆子代理的经验法则是:”我以后还要看这段中间输出吗?”如果不要——比如翻整个 node_modules 找调用点——交给子代理;如果要——比如边改边迭代函数签名——留在主会话。
六、CLAUDE.md 的边界
CLAUDE.md 是项目级长期记忆,每个新会话都会自动加载,写得过厚会变成每次会话的税。建议只放”模型从代码里推断不出来”的规则:构建命令、测试入口、命名约束、禁止操作。架构、依赖列表这类代码就能说明的事不必抄进 CLAUDE.md。
# 项目级指令示例(精简版)
- 构建:pnpm build;测试:pnpm test
- 命名:组件 PascalCase,hook use 前缀
- 禁止:直接提交 .env,手动改 dist/
- 文档:变更同步更新 docs/changelog.md
七、落地路径(按步骤执行)
- 用
/usage或/cost查看当前窗口占比,触及 60% 之前先做动作; - 同一任务继续:优先
/compact,可加引导词(/compact focus on the auth refactor, drop the test debugging); - 走错分支:双击 Esc
/rewind到关键分叉点,重新提示而不是纠错式对话; - 跨任务切分:用
/clear+ 手写简报,把约束、目标、已排除方案写清楚; - 大块调研或文档生成:显式要求 Claude 派生子代理去完成,主会话只收结论。
八、容易踩的坑
- 把
/compact当万能解:长调试后压缩,下一轮大概率丢掉关键决策; - 让
CLAUDE.md长到 3K token:每个会话都交税,等价于自我限流; - 让模型在主会话里”翻整库”:用子代理隔离噪声比压缩历史更省;
- 频繁切换任务不
/clear:旧任务残留会误导新任务判断。
常见问题(FAQ)
Q1:/compact 和 /clear 哪个更稳?
切换到全新任务用 /clear,同一任务继续则用 /compact,绝大多数情况下后者够用。
Q2:子代理会污染主上下文吗?
不会,子代理独立持有窗口,只有最终回报进父会话,中间过程留在子代理一侧。
Q3:CLAUDE.md 写到多长合适?
只写模型从代码推断不出的硬约束,经验上 500 token 以内性价比高,再多就要拆到分层文件。