第 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 的行为:
- 将早期消息压缩为结构化摘要;
- 保留最近的消息原文;
- 维护一个"当前任务状态"快照。
手动触发压缩
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. 以下哪种做法最能降低长任务的上下文成本?
🛠️ 动手实践
- 用
claude -c恢复昨天的一次对话,让它总结上次做了什么。 - 创建一个 PROGRESS.md 文件,并在 CLAUDE.md 中约定读写规则,观察跨会话效果。
- 对同一个任务分别用单次长会话和三次短会话完成,对比
/cost输出的费用差异。
完成练习后,进入下一章:Git 集成与代码审查。