你是否也经历过:连续编码几小时后,Claude Code 突然要求清空对话重新开始?所有上下文灰飞烟灭,进度归零。这篇文章分享一套经过实战验证的优化方案,从自动压缩、记忆持久化到上下文瘦身,全方位解决 token 耗尽问题。
一、问题背景
Claude Code 的上下文窗口上限为 160k token(和具体选择的大模型有关,这边是Qwen),在实际使用中,这个限制会带来明显的痛点:
- 长时间编码会话:对话几小时后 token 耗尽,被迫清空整个上下文
- 上下文丢失:之前讨论的架构决策、代码修改、调试过程全部丢失
- 效率折损:每次重新开始都需要重新解释背景,重复大量沟通成本
- 体验割裂:无法进行需要多轮交互的大型任务
二、解决方案概览
本文提供一套 三层防御体系,从兜底机制到日常习惯,全方位解决 token 瓶颈:
| 层级 | 机制 | 目标 |
|---|---|---|
| 第一层:自动压缩 | auto-compact | 接近上限时自动摘要压缩 |
| 第二层:记忆持久化 | auto-memory + auto-dream | 跨会话保留关键信息 |
| 第三层:上下文瘦身 | 配置优化 | 减少不必要的 token 消耗 |
三、第一层:自动压缩(auto-compact)
原理
当对话上下文接近 160k token 时,系统会自动将早期对话内容压缩为摘要,保留关键信息(代码文件、错误信息、用户要求等),而不是清空整个对话。
配置
在 ~/.claude/settings.json 中启用:
json
{
"autoCompactEnabled": true,
"autoCompactWindow": 120000
}
autoCompactEnabled: true--- 开启自动压缩功能autoCompactWindow: 120000--- 在 120k token 时触发压缩(为后续对话预留 40k 空间)
优势
- 对话不会中断,连续编码体验不受影响
- 关键上下文(代码、错误信息、架构决策)得以保留
- 压缩后的摘要仍然保持对早期对话的理解能力
四、第二层:记忆持久化(auto-memory)
原理
Claude Code 拥有自动记忆系统,可以在会话之间持久化保存关键信息。配合后台自动整理(auto-dream),系统会自动巩固重要信息,确保跨会话时上下文不断层。
配置
json
{
"autoMemoryEnabled": true,
"autoDreamEnabled": true
}
autoMemoryEnabled: true--- 启用自动记忆,跨会话持久化关键信息autoDreamEnabled: true--- 后台自动整理记忆,巩固重要信息
配合 CLAUDE.md
在项目中创建 CLAUDE.md 文件,保存项目关键信息:
markdown
# 项目上下文
## 技术栈
- 前端:React + TypeScript
- 后端:Node.js + PostgreSQL
- 部署:Docker + Kubernetes
## 近期决策
- 2026-05-10:采用微服务架构拆分订单模块
- 2026-05-08:数据库从 MySQL 迁移到 PostgreSQL
## 待办事项
- [ ] 完成订单服务 API 开发
- [ ] 编写单元测试覆盖
新会话启动时,CLAUDE.md 会自动加载,无需依赖旧对话的上下文。
五、第三层:上下文瘦身
原理
减少每次对话中不必要的 token 消耗,为有效内容腾出更多空间。
配置
json
{
"skillListingMaxDescChars": 512,
"skillListingBudgetFraction": 0.005,
"showThinkingSummaries": false,
"spinnerTipsEnabled": false
}
| 配置项 | 默认值 | 优化后 | 节省效果 |
|---|---|---|---|
skillListingMaxDescChars |
1536 | 512 | 每次技能加载节省约 1k token |
skillListingBudgetFraction |
0.01 (1%) | 0.005 (0.5%) | 技能列表占上下文比例减半 |
showThinkingSummaries |
true | false | 不在对话中展示思考过程 |
spinnerTipsEnabled |
true | false | 关闭加载提示动画 |
六、完整配置清单
将以下内容写入 ~/.claude/settings.json:
json
{
"model": "Qwen3-Coder-Flash",
"enabledPlugins": {
"skill-creator@claude-plugins-official": true,
"example-skills@anthropic-agent-skills": true
},
"theme": "light",
"autoCompactEnabled": true,
"autoCompactWindow": 120000,
"autoMemoryEnabled": true,
"autoDreamEnabled": true,
"skillListingMaxDescChars": 512,
"skillListingBudgetFraction": 0.005,
"showThinkingSummaries": false,
"spinnerTipsEnabled": false,
"hooks": {
"SessionStart": [
{
"type": "command",
"command": "bash \"$HOME/.claude/scripts/sync-skills.sh\""
}
]
}
}
七、日常最佳实践
1. 拆分任务为多个会话
大任务按模块拆分为独立子任务,每个子任务开一个新对话。避免单会话过长导致频繁压缩。
2. 善用 CLAUDE.md 传递上下文
每次会话结束时,将关键决策和待办事项写入 CLAUDE.md。新会话启动时自动加载,实现无缝衔接。
3. 手动保存进度
如果必须清空对话,先用文字把当前进度、待办事项发给用户,再开新会话。
4. 定期检查记忆内容
通过 /memory 命令查看自动记忆内容,确保重要信息被正确保存。
八、效果预期
| 指标 | 优化前 | 优化后 |
|---|---|---|
| 单次会话最大时长 | ~2-3 小时 | 不限(自动压缩兜底) |
| 上下文丢失风险 | 高(强制清空) | 极低(三层防护) |
| 跨会话信息保留 | 无 | 自动记忆 + CLAUDE.md |
| 每次会话 token 开销 | ~5k+ | ~3k-(上下文瘦身) |
九、总结
这套方案的核心思路是 压缩兜底 + 记忆持久化 + 减少无用 token 消耗 三管齐下:
- auto-compact 是兜底方案,确保对话永不中断
- auto-memory + CLAUDE.md 是日常主力,实现跨会话上下文无缝传递
- 配置优化 是基础保障,为有效内容腾出更多空间
三者结合,可以让 Claude Code 在长时间、多会话的编码场景中始终保持高效运转。
本文配置方案已在实际生产环境中验证,适用于所有使用 Claude Code 进行持续编码开发的场景。