
用 Claude Code 做大型项目,迟早会撞上这一幕:对话进行到一半,AI 开始答非所问。前面敲定的架构决策没了影子,函数签名也对不上号。我一开始以为是 bug,后来才反应过来——上下文窗口满了。这是几乎所有 AI Coding 工具的通病,而 Claude Code 内置的 compact 机制,就是 Anthropic 给出的应对方案。
我们天天泡在 Claude Code 里跑各种活,这篇就把 compact 的门道讲透,顺带分享几条我自己踩出来的经验。
上下文窗口到底是怎么被塞满的
Claude Code 底层模型的上下文窗口目前大约 200K tokens。数字听着挺唬人,真跑起来消耗比你想的快得多:
- 每一轮对话都拖着完整的历史记录
- 读文件、执行命令的输出原样塞进上下文
- MCP 工具返回的数据结构往往体积不小
一个中等规模的重构任务,几十轮之后就逼近天花板了。到了这个临界点,要么直接报错,要么模型悄悄丢掉早期内容,代码质量跟着往下掉。我见过最糟的情况是,AI 把两小时前确认的接口定义忘得一干二净,又重写了一版。
Compact 机制是怎么工作的
先纠正一个误解:compact 不是粗暴截断历史。截断会直接丢关键信息。它做的是智能摘要压缩:
原始对话历史(长)
↓
Claude 自动分析哪些内容是"高密度信息"
(架构决策、接口定义、已确认的实现方案)
↓
生成结构化摘要替换冗余的来回对话
↓
压缩后的上下文(短,但核心信息保留)
优先留下来的是:明确的需求和约束、确认过的代码设计决策、当前任务状态、最近几轮对话。被压掉的一般是探索性讨论、被否决的方案、反复确认的废话。
自动触发 vs 手动触发
自动触发
上下文用量接近阈值,Claude Code 会自己执行 compact 并给提示:
Context is getting long. Auto-compacting conversation history...
这套行为在 ~/.claude/settings.json 里能调:
{
"autoCompact": true,
"autoCompactThreshold": 0.85
}
0.85 表示用到 85% 时触发。
手动触发
我更推荐主动管理。在关键节点自己动手:
/compact
还能带上提示词,告诉 Claude 摘要时重点保什么:
/compact 请重点保留:用户认证模块的接口设计、数据库 schema 变更记录、以及待完成的 TODO 列表
多写一句提示词,摘要质量能差出一截。
什么时候该手动 compact
完成一个模块之后。历史里堆满了调试过程和中间讨论,带着这堆东西进下一个模块没什么意义。compact 一下,让干净的上下文进入新阶段。
开始密集使用 MCP 工具之前。MCP 调用的返回数据量大,提前腾空间:
# 先压缩历史
/compact 保留当前任务目标和已确认的技术选型
# 再开始 MCP 密集操作
请用 filesystem MCP 读取 src/ 目录下所有 .ts 文件并分析依赖关系
如果你正在做 MCP Server 开发,这点尤其要留心,工具调用一密集,上下文掉得飞快。
切换任务上下文时。从前端组件切到后端 API 调试,两边差得远。手动 compact 一次,在摘要里把新方向说清楚,比拖着一堆无关历史往下走清爽太多。
用 CLAUDE.md 降低 compact 损耗
compact 最怕丢的,是项目级别的"公共知识"——技术栈约定、代码风格、架构说明。这类东西一旦被压没了,输出立刻飘。我的解法是写进 CLAUDE.md:
# CLAUDE.md
## 技术栈
- Frontend: Next.js 14 + TypeScript + Tailwind
- Backend: FastAPI + PostgreSQL
- 部署: Docker + Vercel
## 代码规范
- 所有 API 接口必须有 Zod schema 验证
- 数据库操作统一走 repository pattern
- 错误处理使用 Result 类型而非 throw
## 当前项目状态
- 用户模块:已完成
- 订单模块:进行中,参考 src/orders/
- 支付集成:待开始
CLAUDE.md 的内容每次对话开始都会自动注入,不受 compact 影响。相当于给 Claude Code 配了一块持久化的项目记忆,上下文被压了,这些约定还稳稳在那。这条是我最常安利给同事的一招。
compact 之后跑偏了怎么办
压缩完发现回答开始偏,多半是摘要漏掉了某个关键约束。这时候别急着重新长篇大论地解释,两个做法:
- 补进
CLAUDE.md,一劳永逸 - 在当前对话里直接重申:"基于我们之前确认的 X 原则,继续……"
精准补一条,比把背景重新铺一遍高效得多。
小结
说到底,compact 是有损压缩加智能摘要的组合——有损,所以得你主动管;智能,所以比暴力截断强太多。
我自己守三个习惯:阶段切换时主动 /compact 并附上保留重点、把稳定的项目知识沉淀进 CLAUDE.md、MCP 密集操作之前先清空间。做到这三点,Claude Code 在大型项目里的表现会稳定很多。
关于 Easy Claude Code
如果你想用上 Claude Code,可以试试我们 ECC(Easy Claude Code)的中转服务:免🪜、低成本、快速稳定,直连官方 Claude Code。企业定制化服务可详询。