共计 2505 个字符,预计需要花费 7 分钟才能阅读完成。
文章目录[显示]
你有没有遇到过这种情况:和 AI 聊了两个小时,刚把需求讲清楚,它突然开始答非所问——因为它 " 忘了 " 你之前说的话。
这不是 AI 变蠢了。是上下文窗口满了。
理解这个机制,是用好 Claude Code 的关键一步。
上下文窗口是什么
把 Claude 的记忆想象成一张白纸。每次对话,你说的话、它的回答、你上传的文件,全都写在这张纸上。纸是有限的——Claude 能 " 看到 " 的内容,就是这张纸上写的东西,超出范围的内容它完全不知道。
这张纸的大小,就是 上下文窗口(Context Window)。
Claude 4.5 Sonnet 的上下文窗口是 200K tokens。听起来很大,但一个中等规模的代码库加上来回对话,几千行下去就消耗得差不多了。
当上下文接近上限,会发生三种情况:
- 早期的对话内容被自动截断,AI" 忘记 " 了你最初的需求
- 回答质量下降,开始出现自相矛盾
- 直接报错,拒绝继续响应
理解了这个,才能主动管理它,而不是被它牵着走。
为什么 " 失忆 " 比你想象的更危险
很多人觉得 AI 忘记前几句话没什么大不了,重新说一遍就好。
但在长周期项目里,代价远不止于此。
假设你在用 Claude Code 重构一个模块,第一个小时讲清楚了架构决策——为什么用事件驱动而不是轮询,为什么这个接口要保持向后兼容。到了第三个小时,上下文悄悄截断了。它开始按自己的 " 默认理解 " 写代码,把你花了一个小时解释清楚的决策全推翻了。
你不一定立刻发现,等发现的时候,可能已经在错误的方向上走了很远。
上下文管理的核心目标只有一个:让 AI 在任何时刻都能看到做出正确决策所需的关键信息。
三个实用技巧
技巧一:主动压缩,而不是等它自动截断
不要等上下文满了再处理。当你感觉对话已经积累了大量内容,主动让 Claude 做一次压缩总结。
具体做法:在对话中发送这条指令:
请将我们迄今为止的对话压缩成一份简洁的上下文摘要,包含:1. 项目背景和核心目标
2. 已确认的关键决策(附简短理由)3. 当前进度和下一步计划
4. 需要持续遵守的约束条件
输出格式用 Markdown,方便我保存复用。
拿到这份摘要后,你可以存成一个文件(比如 context.md),新会话开始时直接粘贴进去。这就是 手动记忆注入——你在替 AI 管理它的记忆。
这个习惯养成之后,你会发现跨天继续项目变得极其顺畅,不再需要重新解释背景。
技巧二:用结构化的项目简报替代 " 随聊 "
很多人和 AI 的对话是这样开始的:" 嗯,我最近在做一个项目,大概是……然后有个问题……"
这种方式效率极低。背景信息分散在好几句话里,AI 需要自己拼凑,理解偏差是常有的事,而且这些散乱的铺垫本身就在消耗宝贵的上下文空间。
更好的做法是准备一份 项目简报模板,每次新会话时作为系统 prompt 发出:
## 项目简报
** 项目名称 **:[名称]
** 技术栈 **:[语言 / 框架 / 主要依赖]
** 当前阶段 **:[开发 / 重构 / 调试 / 优化]
** 核心目标 **:[一句话描述这个项目要解决什么问题]
** 已确认的架构决策 **:- [决策 1]:[原因]
- [决策 2]:[原因]
** 本次会话任务 **:[具体要完成什么]
** 约束条件 **:- 不能破坏现有 API 兼容性
- 目标环境是 Node.js 18+
- [其他约束]
这份简报控制在 300 字以内,但它的信息密度远高于随聊的 1000 字。更重要的是,它保证了 AI 在整个会话中都有稳定的参考框架。
技巧三:关键决策单独固化,不要埋在对话流里
对话是流动的,决策是固定的。把这两件事混在一起,是上下文管理最常见的错误。
每当你和 AI 达成一个重要共识——比如确定了某个函数的接口设计,或者决定用某种错误处理策略——立刻把它提取出来,单独记录到一个 决策日志文件 里。
# 决策日志
## 2024-01-15
### D001:错误处理策略
** 决策 **:所有异步函数统一使用 Result 类型返回,不抛出异常
** 原因 **:调用方需要精细控制错误分支,异常会破坏类型推导
** 影响范围 **:data-layer 模块所有 public 方法
### D002:缓存失效策略
** 决策 **:采用写时失效(write-through invalidation)** 原因 **:读多写少场景,一致性优先于性能
这个文件有两个用途:一是新会话时直接注入,让 AI 立刻了解所有约束;二是当 AI 给出的代码违反了已有决策,你可以直接引用日志编号要求它修正。
跨会话延续:让项目 " 活 " 过来
单次会话管理好了,还需要解决跨会话的连续性问题。
推荐的文件结构是这样的:
project/
├── .claude/
│ ├── context.md # 当前上下文摘要(每次会话结束时更新)│ ├── decisions.md # 决策日志
│ └── session-brief.md # 项目简报模板
├── src/
└── ...
每次会话结束前,花 2 分钟做这件事:
请根据本次会话内容,更新 context.md 文件,将新的决策和进度变化合并进去,保持总字数在 400 字以内。
下次打开项目,第一件事是把 session-brief.md 和 context.md 的内容粘贴进去作为开场。整个项目历史一目了然,AI 可以无缝接续上次的工作。
一个容易被忽略的细节
上下文不只是文字。代码文件、错误日志、你粘贴进来的堆栈信息——这些都在消耗 token。
有几条省 token 的原则:
只粘贴相关代码片段,不要整个文件。 如果要讨论一个函数的实现问题,只粘贴那个函数加上必要的类型定义,不需要整个模块。
错误日志要裁剪。 一个完整的 Java 堆栈跟踪可能有 50 行,但通常前 10 行就够了。
用文件引用替代内容粘贴。 在 Claude Code 中,很多时候可以直接告诉它 " 查看 src/utils/parser.ts 第 45-80 行 ",而不是把代码粘进对话。这在长会话中能节省大量上下文空间。
总结
上下文管理不是高级技巧,是基础设施。
做好它,你和 Claude Code 的协作就像和一个有完整项目记忆的同事合作;忽略它,你就是在每隔几小时就给一个失忆的同事重新做一次 onboarding。
三件事记住就够了:主动压缩 (别等它自动截断)、 结构化注入 (简报替代随聊)、 决策单独固化(不要让关键信息淹没在对话流里)。
从今天的项目开始建一个 .claude 目录,你会在一周后感谢自己。