⚠️ 源单薄性声明 本条目主要基于 Anthropic 官方 3 份文档 + Boris 散点。全部是 Anthropic 阵营内视角。 已讲清楚:context window 基本概念 / Claude Code 里怎么填满 / compaction 机制 / 怎么控制 还没听到:独立用户”上下文爆了”的真实恢复故事、非 Claude 模型的 context 管理差异、长 session 的账单实际开销 视为”Anthropic 的官方工作机制介绍”而非业界普遍经验。

一句话

Context window = LLM 一次能”看见”的 token 上限。Claude Code 的一个 session 里,你和 AI 来回说的话、它读过的文件、跑过的命令输出,全部加起来不能超过这个上限——超了就要”压缩”(compaction)。

为什么要关心这个

两个现实后果:

后果 1:忘事

当 context 快满,Claude Code 会自动 compact——把老的对话压缩成摘要。你早期说过的细节(某个命名约定、某个边缘情况)可能被压没。下半 session 它就”忘”了。

后果 2:烧钱

长 session 里 context 越塞越大。每次 API 调用都要把全部 context 发一遍——token 成本累积。一个不注意就是一天几刀变成几十刀。

Claude Code 启动时自动加载什么

来源:claude-code-docs/context-window.md

Session 一开就占的部分(你看不见但它在吃 token):

内容大约 tokens说明
System prompt~4,200Claude Code 本体行为规则
Auto memory (MEMORY.md)~680前 200 行或 25KB
Environment info~280cwd、平台、shell、git
MCP tools 名字~120只是名字,schema 懒加载
User CLAUDE.md~/.claude/CLAUDE.md 全文
Project CLAUDE.md当前 + 父目录的全部 CLAUDE.md
Skills registry每个 skill 的 name + description
Subagent registry每个 subagent 的 name + description
Git status分支、改动、最近 commit

关键点:CLAUDE.md 是全文加载,不像 MEMORY.md 有 25KB 限制。所以 CLAUDE.md 写太长会拖慢每次启动。

Work 阶段什么东西吃 context

来源同上。表里几个特别值得注意的:

  • @file mention:整个文件内容被加载,包括那个文件向上一路的 CLAUDE.md(!)
  • Bash 的输出:默认全部进 context(用 BASH_MAX_OUTPUT_LENGTH 可截断)
  • Skill 被触发:整个 SKILL.md 全文加载 + 它调用的 supporting files
  • Subagent 返回:只返回summary——subagent 自己的工作在独立 context 里跑(context 隔离,这是个很重要的优化)

Compaction 机制(约 95%+ 触发)

来源:context-window.mdhow-claude-code-works.md

当 context 超过阈值(默认 ~95%,可通过 CLAUDE_AUTOCOMPACT_PCT_OVERRIDE 改):

  1. 先清老的工具输出
  2. 如果还不够,总结对话
  3. 保留:用户的 prompt 和 Claude 的关键回答
  4. 从磁盘重新注入项目 root 的 CLAUDE.md(不是从内存摘要——这点是新手常忽略的好消息)

什么会活下来

  • Project root CLAUDE.md(重新读磁盘)
  • 最近调过的 skill 们(每个前 5000 tokens,总计 25K 预算)
  • 你的 prompt 和 Claude 的回答(如果需要会被总结)
  • 当前正在跑的工具调用和输入

什么可能丢

  • 老的工具输出(首先清)
  • session 前期的详细指令
  • 嵌套的 CLAUDE.md(子目录的 CLAUDE.md,下次 Claude 访问那子目录时会重载)

三个控制手段

手段 1:CLAUDE.md 加 Compact Instructions 段

# Compact Instructions
 
When compacting, always preserve:
- The full list of modified files
- Any test commands
- Current debugging state

告诉 Claude 压缩时必须保留哪些东西。

手段 2:显式 compact + focus

/compact focus on the API changes

手动触发 compaction,同时指明”压缩后请保留 API 变更的细节”。

手段 3:partial compact

Esc + Esc → 选某条消息 → “Summarize from here”。只压缩你选中点往后的部分

检查工具:/context

/context

显示一个彩色 grid,告诉你 context 现在哪些东西在占位,并给出优化建议(如”某个工具输出太大可清理”)。

Boris 的散点做法

来源:how-boris-uses-cc.md 里散点提及:

  • 长 session 尽量拆分——一件事干完 /clear 重开,不要把 5 件事堆一个 session
  • 重要状态写进 CLAUDE.md——不指望 context 保留,指望 CLAUDE.md 下次重读
  • subagent 用于上下文隔离——跑一个需要读很多文件的分析任务,塞进 subagent,它自己烧自己的 context,只返 summary 给主 session

(第 3 条特别重要——subagent 不是”功能划分”,首先是”context 预算管理”。)

陈彬视角

“context 管理”是最被低估的基本功。很多人跑 Claude Code 跑着跑着越来越慢、越来越贵、越来越忘事——根本原因是 context 爆了但自己没意识到。

三条实战经验

  1. /context 养成习惯——一个 session 每半小时输一次,看看占比分布。
  2. CLAUDE.md 别写太长——它每次启动全文加载。控制在 200-300 行以内(awesome-claude-code 23 份样本的中位数)。
  3. 一件事一个 session——写完一个功能、修完一个 bug、读完一本书——/clear 新开。别把”从早上到晚上”一直塞一个 session 里。

一个反直觉的观察

memory 里放太多反而有害。很多人觉得”让 AI 记得越多越好”——错。context 有限的前提下,你每多加一条,就是挤掉另一条

CLAUDE.md 加规则前应该问:这条规则值得每次启动都加载吗?还是可以放进某个 skill(按需加载)?

needs_sources(明确待补)

  • 独立用户”上下文爆了”的真实故事
  • 非 Claude 模型的 context 对比(GPT / Gemini 是怎么管 context 的)
  • 长 session 的 token 账单实例
  • compact 翻车案例(压缩后变傻的例子)

关联

官方链接