过去与现在

过去有许多关于上下文工程的最佳实践,后来被证明是误区,包括:

上下文工程示意图

过去:给Claude明确规则

现在:让Claude自主判断

最初推出Claude Code时,我们必须确保Claude避免最坏情况,比如删除文件。因此会给出非常严格的指导,有时这些指导并不完全准确。例如,系统提示中曾写道:

“在代码中:默认不写注释。绝不写多段docstring或多行注释块——最多一行简短注释。除非用户要求,不创建规划、决策或分析文档——只根据对话上下文工作,不使用中间文件。”

但对于某些提示,这些指导是错误的。比如文档注释,用户可能有自己的偏好,或者复杂代码的某些部分确实需要多行注释块。

旧模型没有这些灵活判断能力,写出的注释常常不准确,我们只能接受这种权衡。但新模型判断力更强,能在没有明确规则的情况下做出合理决策。

新系统提示改为:“写的代码要符合周围代码风格:匹配注释密度、命名和习惯用法。”

过去:给Claude示例

现在:设计接口

过去使用工具的首要规则是给Claude示例,告诉它如何使用工具。但最新模型发现,示例反而限制了探索空间。

工具设计示意图

现在更注重工具、脚本和文件的设计——Claude拥有哪些参数,如何让它们更具表现力?

例如,在待办事项工具中,将状态定义为枚举(pending、in_progress、completed)就暗示了Claude如何使用。保持只有一个任务处于in_progress状态的指令帮助明确行为。

过去:全部信息一次性提供

现在:渐进式披露

Claude Code专注于编码,系统提示中包含了详细的代码审查和验证信息,虽然不总是需要,但关键时刻非常重要。

后来,Claude Code变得非常擅长渐进式披露——在合适的时机加载合适的上下文。例如,将验证和代码审查拆分成独立技能,Claude Code可以按需调用。

渐进式披露不仅适用于技能,也适用于工具。部分工具采用“延迟加载”,即代理必须先通过ToolSearch搜索完整定义后才能使用。这让我们可以拥有更多工具(如任务工具),且它们不会占用上下文,直到真正需要。

同样的思路也适用于你的CLAUDE.md和Skill.md文件。常见误区是想把它们做成所有已知实践的中央仓库,担心Claude找不到。实际上,建议建立一个文件树,在合适时机加载

过去:重复指令

现在:简洁工具描述

早期Claude模型有时需要重复指令,且更容易听从上下文窗口末尾的指令。因此系统提示中会同时包含工具引用和工具描述中的指令。

现在我们发现可以删除重复示例,将工具使用说明放在工具描述中,而非系统提示。

过去:在CLAUDE.md中存储记忆

现在:自动记忆

过去鼓励用户用#快捷键自动写入CLAUDE.md来保存记忆。现在Claude会自动保存与工作和用户相关的记忆。

过去:简单规格说明

现在:丰富引用

在计划模式下,Claude Code大量依赖markdown计划文件,方便引用。类似做法是将规格说明存储在代码库中,方便跨项目工作时参考。

但我们发现Claude能处理更复杂的引用。除了简单markdown文件,Claude还能引用由新特性生成的HTML文档。

你也可以用代码形式给Claude引用。规格说明可以是详细测试套件,或者是Claude可能移植的其他代码库中的函数。

评分标准(Rubrics)是另一种引用形式。它们帮助Claude通过动态工作流和验证代理,验证你在某领域(如API设计)的偏好。

应用到你的上下文

综合来看,组装上下文时应如何操作?

上下文组装示意图

系统提示

系统提示紧密关联产品上下文,告诉Claude它在哪个产品中工作及其任务。对于Claude Code,你通常不会修改它,但如果构建自己的代理框架,应重点设计。

CLAUDE.md

保持CLAUDE.md简洁,简要描述仓库用途,重点用token描述代码库中的注意事项。例如,你可能将类型定义集中在一个文件,其他地方不出现。避免写Claude通过查看文件系统或仓库就能知道的“显而易见”的内容。

大量使用渐进式披露,比如有多个独特的验证指令时,创建验证技能并在CLAUDE.md中引用。

技能

把技能当作轻量级指南,让Claude按需查找信息。避免过度限制,除非非常重要。

对于较长的技能,尽量使用渐进式披露,拆分成多个文件。

技能最好编码特定的观点、知识或最佳实践,针对你、你的团队或产品。

引用

你可以用@提及文件,将它们作为引用。引用让Claude能查阅当前计划的深入信息。

这可能是规格文件、设计稿,甚至整个代码库。一般优先选择代码文件,因为它们以Claude熟悉的语言提供清晰高保真指令。例如,HTML设计稿通常比设计描述或截图效果更好。

尝试简化

在系统提示、技能和CLAUDE.md文件中,你可能需要像我们一样简化。我们推出了一个新命令claude doctor,能帮助你自动完成简化。想了解更多高级模型的提示技巧,请查看我们的Fable实用指南

本文作者:Thariq Shihipar,Anthropic技术团队成员。