上下文工程
理解上下文窗口、压缩机制,以及如何有效管理对话信息
很多人把"prompt 写得好"等同于"用好 AI",但这只是一半。另一半是上下文工程——你喂给 Claude Code 的信息总量、质量和时机,都会直接影响输出结果。
这一章帮你理解上下文窗口的运作机制,以及怎么主动管理它。
上下文不是越多越好
这是最反直觉的一点。你可能觉得把所有相关文件都丢给 Claude Code,它就能做得更好。但实际上,信息过多反而会让模型表现变差。
原因很简单:上下文窗口是有限的(目前是 200K tokens),当无关信息太多时,模型需要在一堆噪音里找到关键信息,注意力被分散了。就像你桌上堆了 100 份文件,找起东西来反而更慢。
原则:给必要的信息,不多不少。
主动给 Claude Code 提供上下文
Claude Code 会自动读取文件,但有时候你需要主动把关键信息"推"给它。以下是几种常用方式:
| 方式 | 用法 | 适合场景 |
|---|---|---|
@ 引用文件 | 在 prompt 中输入 @src/auth/index.ts | 让 Claude 重点关注某个文件 |
| 粘贴截图 | 直接粘贴报错截图或 UI 截图 | 描述视觉问题、报错信息 |
| Pipe 数据 | cat error.log | claude "分析这个报错" | 把日志、命令输出直接喂进去 |
| 给 URL | 在 prompt 里贴上文档链接 | 参考外部 API 文档、Issue 描述 |
@ 引用文件夹 | 输入 @src/shared/components/ | 让 Claude 理解整个模块的结构 |
[!TIP] Pipe 是一个被严重低估的技巧。比如你在调试一个构建错误,可以直接
pnpm build 2>&1 | claude "帮我分析这个构建错误",Claude Code 拿到完整的错误输出,比你手动复制粘贴准确多了。
上下文压缩机制
当对话内容接近上下文窗口的上限时,Claude Code 会自动触发上下文压缩。你需要了解几个关键点:
- 压缩是有损操作——Claude Code 会保留核心信息(任务目标、关键决策、代码变更),但对话中的细节、中间推理过程会被丢弃
- 多次压缩损失累积——每压缩一次,信息就丢一点。如果你在一个 Session 里聊了很久被压缩了多次,后面的输出质量会明显下降
- CLAUDE.md 中的内容不受影响——压缩不会丢掉 CLAUDE.md 里写的规则,这就是为什么重要约束要写进 CLAUDE.md
[!WARNING] 如果你发现 Claude Code 开始"忘记"之前的约定,或者重复问你已经回答过的问题,很可能是上下文被压缩了。这时候最好开一个新的 Session,把关键信息重新给一次。
/compact 和 /context 命令
Claude Code 提供了两个管理上下文的内置命令:
/compact —— 手动触发上下文压缩。如果你觉得当前对话信息太杂了,可以主动 compact 一下,让 Claude Code 总结并精简当前上下文。你还可以加一个提示词来引导压缩方向:
/compact 保留所有关于数据库 schema 变更的讨论,其他可以精简/context —— 查看当前上下文窗口的使用情况。它会告诉你已用了多少 tokens、还剩多少空间。当你不确定上下文是否快满了的时候,用这个命令看一下。
Effort 级别
Claude Code 支持不同的"思考深度",你可以通过设置 Effort 级别来控制:
| 级别 | 适合场景 | 说明 |
|---|---|---|
| Low | 简单的格式化、改个变量名、加个注释 | 快速响应,消耗少 |
| Medium | 常规的代码修改、小功能添加 | 平衡速度和质量 |
| High | 复杂功能开发、架构设计、调试疑难问题 | 深度思考,输出质量最好 |
| Max | 极复杂的系统设计、跨多个模块的重构 | 最慢但最全面 |
建议保持 High 作为默认值。 High 和 Medium 的速度差异不大,但输出质量差别明显。只有在批量处理简单任务时才有必要降到 Low 或 Medium。
编辑器输入:Ctrl+G
当你需要写一段比较长的 prompt(比如包含多个步骤的任务描述),在终端里逐行输入很不方便。按 Ctrl+G 可以打开编辑器(默认是你系统设置的编辑器,比如 VS Code 或 Vim),在编辑器里写好 prompt 再提交。
这个快捷键特别适合:
- 写包含代码片段的 prompt
- 多步骤的复杂任务描述
- 需要仔细排版的 prompt
重要约束写进 CLAUDE.md
这是上下文工程最重要的一条实践。
在对话里说的话,随着上下文压缩可能被丢掉。但 CLAUDE.md 里的内容在每次交互中都会被加载,不会因为压缩而丢失。
所以,凡是你希望 Claude Code 始终遵守的规则,都应该写进 CLAUDE.md:
# CLAUDE.md
## 编码规范
- 使用 TypeScript strict mode
- React 组件用函数式写法,不用 class
- 样式用 Tailwind CSS,不写自定义 CSS 文件
- API 错误统一用 src/shared/lib/errors.ts 中的工具函数处理
## 项目约定
- 新组件放在 src/shared/components/ 下
- API 路由遵循 RESTful 风格
- 数据库变更必须先写 migration
## Git 规范
- commit message 用中文
- 不要自动 push把这些写进 CLAUDE.md 后,你就不需要在每次对话开头重复这些约束了。Claude Code 会自动读取并遵守。
[!NOTE] CLAUDE.md 支持三个层级:项目根目录(团队共享)、
~/.claude/CLAUDE.md(个人全局)、以及子目录中的 CLAUDE.md(模块级别)。根据需要选择合适的层级。
本章节为会员专属内容
购买全站技能解锁即可免费阅读所有进阶教程,包括对话技巧、扩展能力、实战项目和思维模型等完整内容。
已购买会员?请先登录你的账号,即可自动解锁。

