上下文工程

理解上下文窗口、压缩机制,以及如何有效管理对话信息

很多人把"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 会自动触发上下文压缩。你需要了解几个关键点:

  1. 压缩是有损操作——Claude Code 会保留核心信息(任务目标、关键决策、代码变更),但对话中的细节、中间推理过程会被丢弃
  2. 多次压缩损失累积——每压缩一次,信息就丢一点。如果你在一个 Session 里聊了很久被压缩了多次,后面的输出质量会明显下降
  3. 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(模块级别)。根据需要选择合适的层级。

本章节为会员专属内容

购买全站技能解锁即可免费阅读所有进阶教程,包括对话技巧、扩展能力、实战项目和思维模型等完整内容。

已购买会员?请先登录你的账号,即可自动解锁。