Skip to content

第 7 章 · 多轮会话与上下文管理

本章目标:掌握 Claude Code 的会话持久化机制,理解上下文窗口限制与 compaction 策略,学会用 --continue/--resume 恢复历史对话,并制定长任务的上下文管理策略。

7.1 会话的生命周期

Claude Code 中每次交互都是一个会话(session)。理解其生命周期是高效使用的前提:

text
新会话启动

   ├── 加载 CLAUDE.md → 注入项目上下文
   ├── 加载 settings.json → 应用权限规则
   ├── 扫描目录结构 → 建立代码地图


用户输入 ──→ Claude 思考 ──→ 工具调用 ──→ 结果反馈
   │                                          │
   │         (循环直到任务完成)                 │
   │                                          │
   ▼                                          ▼
用户继续对话                          会话结束(自动保存)

每个会话自动保存到本地 ~/.claude/projects/ 目录,即使终端关闭也能恢复。

7.2 --continue 与 --resume

bash
# 方式一:--continue 继续最近一次会话
claude --continue

# 简写 -c
claude -c

# 在恢复的会话中追加新指令
claude --continue "刚才那个 bug 修好了吗?"

# 方式二:--resume 从列表中选择特定历史会话
claude --resume

# 直接恢复指定会话 ID
claude --resume <session-id>
参数行为
-c / --continue无参数时打开最近的会话
-c "指令"打开最近会话并立即执行新指令
-r / --resume显示会话列表供选择
-r <id>恢复指定 ID 的会话

使用场景

  • 跨天工作:昨天下班前做到一半,今天 claude -c 继续;
  • 多任务切换:用 --resume 在多个项目的会话间切换;
  • 代码审查回溯--resume 找到之前的讨论记录。

7.3 上下文窗口与 Compaction

Claude 的上下文窗口有限(约 200K token)。长对话中,当接近上限时会触发 compaction(压缩)

text
上下文使用率

│ ████████████████████████░░░░░░░░░░ 75% ← 正常工作区

│ ██████████████████████████████░░░░ 90% ← 开始 compaction
│    ↑
│    Claude 自动将早期对话摘要化,
│    保留关键决策和当前状态,
│    释放空间给后续操作。

Compaction 的行为:

  1. 将早期消息压缩为结构化摘要
  2. 保留最近的消息原文;
  3. 维护一个"当前任务状态"快照。

手动触发压缩

bash
# 在交互模式中使用命令
> /compact

# 带自定义摘要重点
> /compact 重点保留:数据库 schema 变更、API 接口设计决策、未完成的 TODO 列表

7.4 长对话策略

对于跨越多天的复杂任务,单靠 compaction 不够。推荐以下策略:

策略一:进度文件外化

让 Claude 把关键信息写到磁盘文件,而非依赖对话记忆:

markdown
<!-- PROGRESS.md -->
# 任务进度

## 已完成
- [x] 数据库 schema 设计(见 docs/schema.md)
- [x] 用户认证模块(commit abc123)

## 进行中
- [ ] 订单 API:已完成 CRUD,待添加支付回调

## 决策记录
- ORM 选择 SQLAlchemy 2.0(团队投票)
- 不引入 Redis 缓存(当前流量不需要)

在 CLAUDE.md 中约定:

markdown
## 工作流约定
每次会话开始时读取 PROGRESS.md 了解当前状态。
每次会话结束前更新 PROGRESS.md。
重要架构决策写入 DECISIONS.md 并附上理由。

策略二:任务拆分与会话隔离

bash
# 不要在一个会话里做所有事
# ❌ claude "重构整个项目"

# ✅ 拆成独立会话
claude -p "分析 auth 模块的测试覆盖率"
claude -p "为 utils/date.py 编写单元测试"
claude -p "修复 issue #42 提到的内存泄漏"

每个小任务一个会话,避免上下文膨胀导致的性能下降。

策略三:利用 Git 作为状态锚点

bash
# 让 Claude 在关键节点提交
> 请 commit 当前进度,message 写 "WIP: 用户认证模块完成 80%"

Git commit 是最可靠的"检查点"——即使会话丢失,代码状态也不会丢。

7.5 诊断上下文问题

bash
# 查看当前上下文使用量
> /cost

# 输出示例:
# Total cost: $0.45
# Context used: 45,230 / 200,000 tokens (22.6%)

常见问题与对策:

症状原因解决方案
回复变慢上下文过大/compact 或开新会话
忘记之前的决定compaction 丢失细节用进度文件外化
重复做已做的事新会话无记忆CLAUDE.md + PROGRESS.md
成本飙升长对话累积 token定期开新会话

本章小结

  • claude -c 快速恢复上次对话,--resume 从列表选择;
  • Compaction 自动压缩早期对话,保留近期内容与任务快照;
  • 复杂任务用 PROGRESS.md + DECISIONS.md 外化关键信息;
  • 小任务拆成独立会话比一个超长对话更高效;
  • Git commit 是最可靠的进度锚点。

🧪 随堂测验

点击你认为正确的选项。答错时会展示正确答案与原因解析。

1. claude -c 和 claude --resume 的区别是什么?

2. 什么是 compaction?

3. 为什么推荐用 PROGRESS.md 外化任务状态而不是依赖对话记忆?

4. 以下哪种做法最能降低长任务的上下文成本?

🛠️ 动手实践

  1. claude -c 恢复昨天的一次对话,让它总结上次做了什么。
  2. 创建一个 PROGRESS.md 文件,并在 CLAUDE.md 中约定读写规则,观察跨会话效果。
  3. 对同一个任务分别用单次长会话和三次短会话完成,对比 /cost 输出的费用差异。

完成练习后,进入下一章:Git 集成与代码审查