Anthropic 分享了如何通过减少过度约束的系统提示,提升 Claude 5 系列模型在 Claude Code 中的表现。
AI translation, not an official translation. Refer to the original for technical details.
Adapted from @trq212# Claude 5 模型上下文工程的新规则 我此前曾写过如何为最新一代 Claude 5 模型编写最佳提示词,以及如何与其迭代协作,发掘你想要构建的内容。(https://x.com/trq212/status/2073100352921215386) 但当你向 Claude 发送消息时,提示词只是它所获取上下文的一小部分。你的大部分上下文来自系统提示、技能(Skills)、CLAUDE.md 文件、记忆以及其他来源。我们将这一过程称为上下文工程,它对你使用 Claude Code 或构建自己的智能体时所生成的结果有着重大影响。(https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents) 与提示词不同,上下文会在大量请求中被广泛复用,因此无法做到非常具体。当你不知道用户的提示词会是什么时,该如何为 Claude 构建这些通用的提示和指引? 随着 Claude 自身能力的演进,这可能会出乎意料地困难。最近,我们注意到在为最新一代 Claude 模型编写提示词的方式上出现了一次大幅跃变。对于 Claude Opus 5 和 Claude Fable 5 等模型,我们删除了 Claude Code 系统提示中超过 80% 的内容,而在我们的编程评测中没有观察到任何可量化的性能损失。 以下是我们在为这一新类别模型编写提示词方面所学到的经验,以及你如何利用这些经验来更新你的上下文工程实践。我们已将这些最佳实践整合到 `claude doctor` 中,请在 Claude Code 中使用 /doctor 命令来对你的技能和 CLAUDE.md 文件进行适当调整。 ## 解除对 Claude 的束缚 总体而言,我们发现我们对 Claude Code 过度约束了——无论是通过系统提示,还是通过我们的 CLAUDE.md 文件和技能配置。 例如,当我们阅读自己内部使用 Claude Code 的对话记录时,发现在单次请求中存在多条相互冲突的指令,例如"在适当位置保留文档"或"不要添加注释"——这些冲突来自系统提示、技能配置与用户请求之间的相互抵牾。 通常情况下,Claude 能够理解用户意图并给出正确答案,但在做出决策之前,Claude 必须花费更多精力去思考这些重叠和冲突的指令。 而许多约束条件曾经是为了避免最坏情况而设置的,但我们后来发现,可以删除其中许多条目,让模型转而依靠上下文信息和自身判断。 此外,Claude Code 现在拥有更多工具。Claude 过去依赖 CLAUDE.md 作为记忆、信息和指引的来源,而现在我们有了记忆、工件(artifacts)和技能,Claude 可以利用这些工具创造跨会话加载和共享上下文的新方式。 ## 过去与现在 一些曾经的上下文工程最佳实践如今已成为过时的神话,包括: 过去:为 Claude 制定规则 现在:让 Claude 运用判断力 当我们最初推出 Claude Code 时,需要确保 Claude 避免出现最坏情况,例如误删文件。这意味着我们会给出一些措辞强硬的指引,而这些指引并不总是正确的。例如,我们曾在系统提示中这样写道: 在代码中:默认不写注释。不要编写多段落的文档字符串或多行注释块——最多一行简短注释。除非用户要求,否则不要创建规划文档、决策文档或分析文档——从对话上下文中开展工作,而非依赖中间文件。 但对于某些特定的提示词,这条指引是错误的。就文档而言,用户可能有自己的偏好,或者某些非常复杂的代码确实需要多行注释块。 尽管如此,在没有这些针对旧版模型的护栏的情况下,Claude 所写的注释在很多情况下是不正确的,我们不得不接受这一权衡。但较新的模型拥有更好的判断力,无需明确规则即可妥善处理这些决策。 在新的系统提示中,我们写道:编写的代码风格应与周围代码保持一致:匹配其注释密度、命名规范和惯用写法。 **过去:给 Claude 举例** **现在:设计接口** 工具使用的第一法则曾是给 Claude 提供使用示例。而对于我们最新的模型,我们发现提供示例实际上会将其限制在某个特定的探索空间内。 与其使用示例,不如更多地思考工具、脚本和文件的设计——Claude 拥有哪些参数,这些参数又如何能更具表达力? 例如,在待办事项工具的示例中,仅将状态列举为 pending(待处理)、in_progress(进行中)和 completed(已完成)之间的枚举,就能暗示 Claude 如何使用它。关于保持一个事项处于 in_progress 状态的说明,有助于定义我们所期望的行为。 **过去:将所有内容前置** **现在:使用渐进式披露** 由于 Claude Code 专注于编码,我们的系统提示中包含了关于如何进行代码审查和验证的详细信息。这些信息并非总是必要的,但在需要时至关重要。 此后,Claude Code 在使用渐进式披露方面变得非常出色——能够在正确的时间加载正确的上下文。例如,我们将验证和代码审查迁移到了独立的技能模块中,供 Claude Code 按需调用。 但渐进式披露不仅适用于技能模块,我们也将其应用于工具。我们的部分工具采用"延迟加载"机制,这意味着 Agent 必须先使用 ToolSearch 查找其完整定义,然后才能使用。这使我们能够拥有更多工具(例如任务工具),在不需要时不占用上下文。 同样的思路也适用于你自己的 CLAUDE.md 和 Skill.md 文件。一个常见的误区是:你应该将所有可能遇到的已知实践都集中存放在这些文件中,否则 Claude 将无从找到。相反,不妨考虑构建一个文件树,以便在适当的时机加载所需内容。(https://claude.com/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code) **过去:重复自身** **现在:简洁的工具描述** 早期的 Claude 模型有时需要重复的指令,或者更倾向于遵循上下文窗口末尾而非开头的指令。这意味着我们的系统提示有时会在主系统提示中引用工具,同时也在工具描述中包含相关说明。 我们发现,可以删除这些重复的示例,将工具的使用说明放在工具描述中,而非系统提示中。 **过去:记忆存储于 CLAUDE.md 文件** **现在:自动记忆** 我们过去会鼓励用户将内容保存到 Claude 的记忆中,通过使用 # 快捷键自动写入其 CLAUDE.md。而现在,Claude 会自动保存与工作内容及你本人相关的记忆。(http://claude.md/) **过去:简单规格说明** **现在:丰富的参考资料** 在计划模式下,Claude Code 大量依赖包含计划内容的 Markdown 文件。将这些文件作为计划存储,有助于 Claude 在需要时进行参考。另一个类似的最佳实践是在代码库中存储规格说明,供 Claude 在较长项目中持续参考。 但我们发现,Claude 能够处理越来越复杂的参考资料。Claude 不再局限于简单的 Markdown 文件,还可以参考由我们新的 Artifacts 功能创建的 HTML 制品。 您也可以以代码的形式为 Claude 提供参考资料。规格说明也可以是详细的测试套件,或者是 Claude 可能需要移植的另一个代码库中的函数。 评分标准是另一种参考形式。评分标准允许 Claude 通过动态工作流和启动带有这些标准的验证代理,来尝试理解并验证您在某个特定领域的偏好(例如,什么是好的 API 设计)。(https://claude.com/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code) ## 将其应用于您的上下文 将以上内容综合起来,当您组装上下文时,它看起来是什么样的? 系统提示 系统提示与产品上下文紧密相关。它告诉 Claude 它正在运行的是什么产品以及它在做什么。对于 Claude Code,您可能永远不需要修改它,但如果您正在构建自己的智能体框架,这是您应该花费大量时间的地方。 CLAUDE.md 保持您的 CLAUDE.md 轻量级,简要描述您的代码库的用途,但将大部分令牌用于描述代码库中的注意事项。例如,您可能将代码组织为只在一个单一文件中保存类型,而不在其他地方保存。避免陈述 Claude 通过查看您的文件系统或代码库就应该知道的"显而易见"的事情。 对于更多详细信息,请使用渐进式披露,例如,如果您有几条关于如何验证工作的独特说明,请创建一个验证技能并从您的 CLAUDE.md 中引用它。 技能 将技能视为轻量级指南,让 Claude 在需要时找到信息。避免过度约束,除非在极其重要的领域。 对于较长的技能,尽量多使用渐进式披露——将其分成多个文件并拆分开来。 最好的情况是,技能能够编码特定于您、您的团队或产品的特定观点、知识或最佳实践。 参考资料 您可以通过 @ 提及文件来将其作为参考资料包含进来。参考资料允许 Claude 参考关于当前计划的深入信息。 这可能是规格说明文件、原型图,甚至是整个代码库。通常您应该优先选择代码形式的文件,因为它以 Claude 非常熟悉的语言为其提供清晰、高保真的指令。例如,与设计描述或截图相比,设计的 HTML 原型通常能产生更好的结果。 ## 尝试简化 在您的系统提示、技能和 CLAUDE.md 文件中,您可能需要像我们一样进行简化。我们推出了一个名为 `claude doctor,` 的新命令,它也将帮助您自动完成这项工作。有关专门针对更高级模型的提示的更多详细信息,请查看我们的 Fable 实战指南。(https://claude.com/blog/a-field-guide-to-claude-fable-finding-your-unknowns)