Anthropic 的 Claude 代码和更广泛的 Claude 系列现在为开发者提供了前所未有的控制能力,可以控制模型看到的内容量 和推理深度。最近的产品更新(特别是 Sonnet 4 的 100 万 token 上下文窗口和 Claude 扩展的"思考"控制)使上下文管理变得更加强大和重要:您可以在单个会话中处理整个代码库------但前提是您需要有意地构建提示、文件和会话状态。本文解释了如何可靠地管理 Claude 代码的上下文:命令和用法、思考预算控制、CLAUDE.md 模式、子代理工作流、高级用户技巧、故障排除以及可以复制粘贴的具体代码示例。
什么是 Claude 代码?
Claude 代码是 Anthropic 的智能编程 CLI------一个以终端为首要的工具,将您的开发环境连接到 Claude 模型,使助手能够读取您的仓库、运行命令、编辑文件、运行测试、创建提交,并从终端执行多步骤工作流。它的构建使 AI 能够"生活"在您的 shell 中并作用于您的代码库,具有仓库扫描、斜杠命令、子代理(具有隔离上下文的专业助手)和用于外部工具的模型上下文协议(MCP)集成等功能。
为什么要管理 Claude 代码的上下文?
因为上下文 = 相关性 + 成本 + 安全性。如果不加控制,长历史记录会导致:
- 更高的 token 使用量(更多成本,响应更慢)
- 上下文漂移(旧/不相关的信息混淆输出)
- 信息泄露(机密或敏感日志卡在会话中)
管理上下文可以保持输出准确、可预测且更便宜。
Claude 代码如何组织和保存项目上下文?
Claude 代码是一个智能 CLI,将您的仓库、工具和配置视为一等上下文源。它读取项目文件、CLAUDE.md、本地工具和配置的 MCP 服务器;它还支持子代理,每个子代理都有自己的上下文窗口(有助于避免污染主对话)。使用这个功能可以将主级策略与专业代理内存分开(例如,测试运行器、代码审查器)。
Claude 代码如何吸收仓库上下文和辅助文件?
它扫描工作目录和您添加的任何额外目录(--add-dir
)。 它寻找 .claude/
子文件夹(命令、代理)和 CLAUDE.md
。 您可以连接模型上下文协议(MCP)服务器以访问外部工具;Claude 代码可以将这些工具继承到其工具集中。
我可以采用哪些方法在 Claude 代码中管理上下文?
-
掌握基本的上下文 CLI 命令 。将可重用的提示存储为
.claude/commands/
中的斜杠命令,避免重复粘贴长提示。 -
适当设计 CLAUDE.md 文件。将 CLAUDE.md 添加到仓库根目录以定义目标、允许的工具、样式、升级规则和有用的斜杠命令。(Claude 代码会自动读取并将其用作权威指导。)
-
使用子代理进行任务隔离 ------每个子代理都有自己的上下文窗口和工具权限,这可以防止主会话被污染。将子代理存储在
.claude/agents/
中并进行版本控制。
基本上下文管理命令有哪些?
以下是您在 Claude 代码中最常用来管理对话状态的命令。我列出了行为、示例用法、推荐场景和相关 CLI 标志的指针。
/clear
--- "重新开始"
作用: 从会话中清除当前对话历史,使后续提示从干净的状态开始。REPL 会话继续,但来回消息从模型的上下文中删除。(项目文件和 CLAUDE.md
仍然可以被 Claude 代码访问。)
使用时机:
- 完成功能或票据后,您想要一个干净会话来处理不相关的任务
- 如果会话积累了许多探索性轮次且答案质量下降
- 在将会话交给另一个用户/代理之前,以避免泄露先前的对话状态
用法:
bash
# 在交互式 REPL 中
/clear
注意和技巧: /clear
对该会话的对话历史是破坏性的;如果您想返回保存在磁盘上的旧会话,请使用 /resume
/--continue
。
/compact
--- "总结和压缩"
作用: 将当前对话压缩为更短的摘要,保留重要事实和决策,然后用该摘要替换冗长的历史记录,使会话可以在不丢失重要上下文的情况下继续。这减少了 token 使用量,同时保持了连续性。
使用时机:
- 当您想保留线程的重要状态但减少 token 占用时
- 在会将上下文窗口推向限制的长新任务之前
- 当您想要一个简洁的会话"记忆"同时保留关键决策时
用法:
bash
# 在交互式 REPL 中
/compact
# 或者使用指令来指导摘要
/compact 仅总结决策、开放的 TODO 和配置更改
注意和技巧: 在某些构建或设置中,当对话长度接近限制时,auto-compact
、microcompact
和其他智能压缩行为可能会自动运行;这些功能正在推出,可能会出现在您的安装或托管环境中。(社区和更新日志讨论 microcompact 和 auto-compact 行为。)
--continue
、--resume
和会话控制(CLI 级别)
作用: 从 CLI 控制会话持久性和选择。
claude --continue
(或claude -c
)------重新打开并继续当前项目目录中最近的对话。claude --resume
(或claude -r <session-id>
)------显示交互式选择器(或按 ID 恢复特定会话)。当您保存了许多会话并想要选择一个继续时很有用。
用法示例:
bash
# 继续最近的会话
claude --continue
# 打开交互式会话选择器
claude --resume
# 按 id 恢复(非交互式)
claude --resume 550e8400-e29b-41d4-a716-446655440000
对上下文重要的交互模式快捷键(终端 UX)
- Ctrl+L --- 清除终端屏幕(视觉上),但保留 对话历史。使用
/clear
实际重置历史。 - Ctrl+D --- 退出会话(EOF)。
- Ctrl+C --- 取消当前生成。
这些是便利控制;它们只影响终端行为,除非您明确运行 /clear
或 --continue
/--resume
。
其他与上下文相关的控制和标志
--add-dir <path>
--- 包含 Claude 可以读取的额外目录(有助于限制 Claude 可以访问的内容并减少不必要的文件读取)。--allowedTools
--- 预先允许工具,以便 Claude 可以运行它们而无需重复权限提示(减少来回和嘈杂的工具权限对话框)。- 斜杠命令 (
/.claude/commands/
或 MCP 提供的)------存储经常使用的、高效的 token 提示;调用斜杠命令比重复粘贴长提示更便宜。
我应该如何设计 CLAUDE.md 文件来控制项目上下文?
什么是 CLAUDE.md 以及为什么它很重要
CLAUDE.md 是一个预检、项目级提示,当在仓库中启动时 Claude 代码会自动读取它。使用它来放置关于项目的简短、可操作、稳定的事实(名词、架构、标准)。因为模型将 CLAUDE.md 摄取到提示中,精心制作的文件减少了重复粘贴相同信息的需要并保留了宝贵的 token 预算。
CLAUDE.md:实用模板(推荐)
保持这些规则:简短(尽可能 100-200 行)、层次化(全局 → 项目 → 子目录覆盖)和机器可读部分。
markdown
# CLAUDE.md --- 仓库顶部
项目:Acme 支付网关
主要语言:typescript
构建:pnpm build
运行测试:pnpm test
API 路由:src/api/*
数据库:通过 prisma 的 Postgres(架构在 prisma/schema.prisma)
# 约定
- 提交格式:约定式提交
- 测试覆盖率阈值:80%
- 样式:eslint + prettier(配置在 .eslintrc、.prettierrc)
# 我要求 Claude 做什么
- 当被要求创建功能时,始终包括测试并更新 CHANGELOG
- 修改数据库架构时,提供迁移计划和迁移文件
注意:
- 将高价值项目(API、重要文件、基础设施命令、测试命令)放在前面。
- 当不同模块有不同约定时,在子目录中使用单独的
CLAUDE.md
文件;Claude 将合并并优先处理更具体的文件。
我如何组装工作流和子代理来管理上下文并并行化工作?
什么是子代理?
子代理是 Claude 代码模式,其中主代理将离散任务委托给下属代理(例如:frontend-agent
、backend-agent
、qa-agent
),然后主代理协调它们的输出。子代理让您可以在系统的不同部分并行工作,而不会将所有内容塞进单个聊天中。
示例工作流:功能实现(并行代理)
- main-agent 读取 CLAUDE.md,创建计划
- frontend-agent(子代理)获得专注上下文:UI 契约、storybook、特定文件
- backend-agent(子代理)获得数据库架构、API 契约并实现端点
- qa-agent 运行测试,将失败的测试写回 main-agent
- main-agent 协调提交、合并请求并更新 CLAUDE.md
CLI 模式:
css
# 启动主会话
claude --session main
# 生成前端子代理(概念上:具有范围 CLAUDE.md 的新会话)
claude --session frontend --cwd frontend/
提示: 在子目录下创建范围化的 CLAUDE.md
文件(frontend/CLAUDE.md
、backend/CLAUDE.md
),这样每个子代理都从它需要的最小上下文开始。
示例子代理:.claude/agents/code-reviewer.md
markdown
---
name: code-reviewer
description: 专注的代码审查器。有限工具:Read、Grep、Bash
---
您是一个代码审查器。当被调用时:
1. 运行 `git diff --name-only` 查看更改的文件
2. 优先考虑安全性、正确性、测试
3. 返回补丁(diff)和 3 项可操作的清单
保持上下文健康和降低成本的高级用户技巧有哪些?
1) 保持 CLAUDE.md 精简和层次化
避免巨大的单块 CLAUDE.md 文件。使用一个全局文件记录开发者的偏好,使用小模块文件记录区域特定内容。参见前面的模板。
2) 使用斜杠命令处理动词,CLAUDE.md 处理名词
使 CLAUDE.md 成为事实 的地方(存在什么文件、架构),使斜杠命令成为程序的地方(创建测试、运行重构)。这可以防止每个会话重新发送程序逻辑。社区智慧强调这种分离。
3) 将详细模式 + 计划模式用作调试工具
当 Claude 行为异常时,运行详细模式查看确切的上下文,并使用计划模式强制您可以在编辑之前批准的明确计划。
4) 仔细预算思考
从默认/最小思考 token 开始,只有当任务需要多步推理时才增加(复杂重构、形式验证)。对常规编辑使用较低的预算。
5) 输出和提交的仪表化
拥有自动运行测试并将其输出附加到会话的钩子(bash 模式 !
运行 shell 命令并将输出作为上下文包含)。使用提交钩子创建带有消息的清晰原子提交。
当上下文"丢失"或 Claude 忘记指令时我应该如何故障排除?
常见症状和修复
症状: Claude 忽略 CLAUDE.md 或先前的指令。
修复: 确认文件在会话的当前工作目录中;检查是否有更具体的子目录 CLAUDE.md 覆盖它;使用详细模式查看当前提示。
症状: 长时间会话的性能下降(模型"忘记"早期部分)。
修复: 压缩会话:将稳定事实提取到 CLAUDE.md 中,或将对话部分快照到文件中并引用它们而不是重复。也考虑重新启动短会话并只传递简洁的上下文。
症状: 扩展思考花费太长时间或超时。
修复: 降低 thinking_budget,将任务分解为更小的子问题,或者如果您需要极大预算则运行批量离线分析。Anthropic 建议当最佳思考预算超过约 32K token 时进行批处理以避免超时。
结论
在 Claude 代码中管理上下文现在是一个多维问题:模型选择、子代理设计、CLAUDE.md 纪律、思考预算和工具架构都相互作用。从投入 1-2 小时编写清晰的 CLAUDE.md 开始,搭建 2-3 个专注的子代理,并为 token 和思考预算添加使用仪表化------您将立即在可靠性、成本可预测性和团队生产力方面看到收益。