第 08 期 | Context Window (上下文) 管理的艺术
🎯 学习目标
学完本期你将掌握:
- 上下文窗口的工作原理与容量概念
/compact和/clear的正确使用时机- 如何在长会话中保持 Claude 的输出质量
- 上下文「占用率」可视化与监控
📖 核心概念讲解
8.1 什么是上下文窗口?
上下文窗口 (Context Window) 是 Claude 当前会话中能"记住"的全部信息总量。可以把它想象成一块 白板:
╭─ Context Window 白板 ────────────────────────────────╮
│ ┌──── 已占用 ───────────────────────┐ ┌── 剩余 ──┐ │
│ │ CLAUDE.md | 对话历史 | 文件内容 │ │ 可用空间 │ │
│ │ Tool 调用结果 | 代码上下文 │ │ │ │
│ └───────────────────────────────────┘ └───────────┘ │
│ │
│ 占用率: ████████████████░░░░░░░ 68% │
│ │
│ ⚠️ 超过 80% 时,Claude 的回答质量明显下降 │
│ 🔴 接近 100% 时,系统自动触发 /compact │
╰──────────────────────────────────────────────────────╯
8.2 三个关键命令
| 命令 | 作用 | 适用场景 |
|---|---|---|
/compact |
将长对话压缩为摘要,释放空间 | 上下文过长但仍需延续 |
/clear |
完全清空上下文,重新开始 | 切换到完全不相关的任务 |
/memory |
查看持久化记忆 | 确认哪些偏好已经保存 |
8.3 黄金法则:60% 上下文占用率
经验表明,当上下文占用 低于 60% 时,Claude 的输出质量最高。
占用率状态图:
0% ─────── 30% ─────── 60% ─────── 80% ─────── 100%
│ ✅ 最佳 │ ✅ 良好 │ ⚠️ 注意 │ 🔴 降级 │
│ (新会话) │ │ 考虑/compact │ 必须处理 │
💻 模拟 Claude TUI 交互
场景 1:长会话中的 /compact
> (经过 30 轮对话后...)
>
> 给登录模块加上 rate limiting
╭─ Claude ─────────────────────────────────────────────╮
│ │
│ ⚠️ Context usage: 78% │
│ Tip: Use /compact to free up space │
│ │
│ 让我来添加限流功能... │
│ (但回答可能不如之前精准) │
│ │
╰──────────────────────────────────────────────────────╯
> /compact
╭─ Compacting ─────────────────────────────────────────╮
│ │
│ 📦 Summarizing conversation... │
│ │
│ Summary of work done so far: │
│ • Analyzed auth module structure │
│ • Implemented JWT refresh token flow │
│ • Added password reset endpoint │
│ • Fixed CORS configuration │
│ • Updated Prisma schema with session table │
│ │
│ Key decisions: │
│ • Using bcrypt with 12 salt rounds │
│ • Refresh tokens stored in DB (not cookie) │
│ • Rate limiting will use sliding window algo │
│ │
│ ✅ Context reduced: 78% → 25% │
│ You can continue working normally. │
│ │
╰──────────────────────────────────────────────────────╯
> 继续,给登录模块加 rate limiting
╭─ Claude ─────────────────────────────────────────────╮
│ │
│ (基于压缩摘要,Claude 知道之前的工作上下文) │
│ │
│ 好的,根据之前的讨论我们选择滑动窗口算法。 │
│ 让我来实现... │
│ │
╰──────────────────────────────────────────────────────╯
场景 2:/clear 切换完全不同的任务
> (刚完成 auth 模块的开发)
> /clear
╭─ Context Cleared ────────────────────────────────────╮
│ │
│ ✅ Context cleared. Starting fresh. │
│ 📝 CLAUDE.md and auto memory are still loaded. │
│ │
╰──────────────────────────────────────────────────────╯
> 帮我优化 CI/CD pipeline,目前构建太慢了
╭─ Claude ─────────────────────────────────────────────╮
│ │
│ (全新上下文,没有 auth 模块的记忆干扰) │
│ │
│ 🔍 Tool: Read (.github/workflows/ci.yml) │
│ 🔍 Tool: Read (turbo.json) │
│ ... │
│ │
╰──────────────────────────────────────────────────────╯
💻 代码演示:上下文管理的最佳实践
# ✅ 好习惯:不同任务用不同会话
claude # 任务 A:修复 bug
# 完成后退出
claude # 任务 B:写新功能
# ✅ 好习惯:命名会话,方便后续恢复
claude -r "auth-refactor" "继续 auth 模块重构"
claude -r "ci-optimize" "继续 CI 优化"
# ✅ 好习惯:长任务中定期 compact
# 每完成一个里程碑就 /compact
# ❌ 坏习惯:一个会话承担所有任务
# 上下文很快爆满,质量骤降
# ❌ 坏习惯:从不 compact
# 等到系统自动触发时已经太晚了
上下文管理策略速查
任务类型 建议策略
────────── ──────────────────────
小修小补 单次会话,无需管理
中等功能开发 每完成一步 /compact
大型重构 每个模块用 /clear 隔离
完全不同的任务 直接 /clear 或新会话
跨天工作 用 -r 命名会话 + /compact
🔧 涉及的 Tools / 命令
| 命令 | 作用 | 底层机制 |
|---|---|---|
/compact |
压缩会话为摘要 | 调用模型生成 summary |
/clear |
清空上下文 | 保留 CLAUDE.md + memory |
-c / --continue |
恢复最近会话 | 重载历史消息 |
-r "name" |
恢复命名会话 | 按名称查找历史 |
--fork-session |
分叉会话 | 复制上下文到新分支 |
📝 本期要点回顾
- 上下文窗口有容量限制,超过 60% 应考虑
/compact /compact保留工作摘要,适合同一任务的长会话/clear完全重置,适合切换到无关任务- 用命名会话 (
-r) 管理多条并行开发线 - CLAUDE.md 和 Auto Memory 不受
/clear影响(持久化)
🔗 参考资料
- Resume previous conversations
- Name your sessions
- Context window visualization
- 微信公众号「新时代的老登」: Vibe Coding 一时爽,项目烂尾火葬场