AI面包君AI面包君关注
回到博客
Claude Code

上下文工程:为什么 AI 跑久了就「忘」事

Claude 的「桌面」就那么大。对话久了它会丢前面的内容、变笨、甚至胡言乱语。这一切都和上下文窗口有关。一篇讲清 token、上下文限制、/compact 是怎么救场的。

2026-04-287 分钟

你跟 Claude Code 聊了一个小时,让它改一个复杂的功能。

突然它说:"我重新看一下需求……" 然后跑去读了一遍它自己 30 分钟前已经处理过的文件。

不是它装傻,是它真的忘了

这就是上下文窗口(context window)在起作用。

1. 模型有一张"工作桌"

把 Claude 想象成一个正在做菜的厨师。他面前的桌子就是他能用的全部记忆。

桌子上堆着:

  • 你的每一句话
  • 它每一段回复
  • 它读过的每个文件的内容
  • 它跑过的命令的输出
  • 它的"思考"过程
  • 系统提示词(system prompt)—— 一开始就铺在桌底的家规

这一堆东西的总量叫 token 数——大致 1 个汉字 ≈ 1.5 token,1 个英文单词 ≈ 1.3 token。

桌子有上限。 Claude 4 系列的模型大约能装 200,000 token,新出的 Claude 4.7 能开到 1,000,000 token。听起来很多——但读几个大文件、跑几个长输出,几万 token 就没了。

2. 桌子满了会发生什么

接近上限时模型会出现明显症状:

  • 重复读同一个文件(前面的 Read 结果被挤掉了)
  • 忘记你的需求(最初那条用户消息被压缩或丢掉了)
  • 胡言乱语 / 重复输出(注意力机制在长上下文里精度下降)
  • 直接报错(超过硬上限)

Claude Code 顶部有个 token 进度条。到 80% 你就该警觉了。

3. /compact:把桌面收一半

最直接的应对方式:手动敲 /compact

它的工作过程:

  1. 读一遍你和 Claude 之间所有的历史对话
  2. 让模型自己写一段摘要:"用户在做 X,已经读了 Y,已经改了 Z,当前在……"
  3. 把摘要替换掉前面所有的来回,只保留最近几轮 + 摘要
  4. 桌面腾空,token 占用骤降

摘要会丢细节吗? 会。但摘要里通常保留:

  • 你最初的需求
  • 已读过文件的列表(具体内容丢,但模型知道"我读过 README")
  • 已经做过的关键操作
  • 当前在干什么

够用了。compact 完之后你可以接着聊,它知道前因后果。

4. 自动压缩:不操心也行

新版本的 Claude Code 默认开了自动 compact。token 到 90% 自动触发,你看到的就是顶上有一行"Compacting…",然后桌面瞬间清出来。

也就是说你不一定要自己敲——但知道这件事在发生,能解释为什么有时候它"突然变迟钝"或"一段对话像断了片"。

5. 主动管理上下文的几招

实战里更聪明的玩家会主动控制:

a) 长文件别让它整个 Read。 如果只关心某个函数,Read 工具支持参数 offset/limit,让它只读相关部分。

b) 完成一段任务用 /clear 而不是 /compact 比如做完功能 A 要做功能 B,直接清桌重来——A 的细节你不需要带过去。

c) 重要的项目级约定写到 CLAUDE.md 这个文件每次启动都会被注入 system prompt,相当于"永远占着桌底一小块",不怕被 compact 掉。

d) 别让它跑特别长输出的命令。 npm install 那种几千行的 log 一塞进上下文就废了。重定向到文件,让它只读你关心的几行。

6. 上下文工程是个新工种

这两年业界开始把"怎么给模型喂上下文"当一个独立技能看,称为 Context Engineering

它和提示词工程(Prompt Engineering)的区别:

  • Prompt Engineering:怎么把一个问题问得清楚(短)。
  • Context Engineering:怎么在一段长任务里给模型铺好需要的所有背景(长 + 动态)。

后者更重要,也更难。Claude Code 之所以能干大活,底层就是它把上下文管得很好:自动 compact、自动注入 CLAUDE.md、按需读文件、子代理隔离上下文(看 子代理)。

7. 一句话总结

上下文是模型的"现在"。它只活在 token 里,桌面之外什么都不存在

理解这件事,你就理解了为什么有些 prompt 在网页版跑得好、放到 Claude Code 里反而不行(因为周围一堆别的 token 抢资源)。


想看 compact 动画?去 Claude 课/compact,进度条会从 78% 收回到 22%。