跳到正文
原文
Anthropic:Claude.dev 开发者博客· Thariq Shihipar·· 2026-07-24精选AI 评分78

Anthropic 讲解 Claude 5 系列模型的上下文工程新规则

The new rules of context engineering for Claude 5 generation models

AI 导读

Anthropic 员工 Thariq Shihipar 介绍为 Claude 5 系列模型(如 Claude Opus 5 和 Claude Fable 5)做上下文工程的新方法:团队为这些模型删除了 Claude Code 超过 80% 的系统提示词,在编码评测上没有可测量的损失。

推荐理由

作者分享了为 Claude 5 系列模型做上下文工程的新原则,并给出可直接套用到 CLAUDE.md、Skills 和引用文件的落地建议。

正文 · AI 翻译

我之前写过如何最好地提示最新一代 Claude 5 模型,并与它们迭代协作,以发现你想构建的东西。

但当你向 Claude 发送消息时,提示词只是它获得的上下文的一小部分。你的大部分上下文是由系统提示词、Skills、CLAUDE.md 文件、记忆和其他来源组装而成的。我们称之为上下文工程,它对你在使用 Claude Code 或构建自己的智能体时生成的结果有很大影响。

与提示词不同,上下文通常跨许多请求通用,因此无法那么具体。你如何为 Claude 构建这些通用的提示词和指导,尤其是在你不知道用户提示词可能是什么的情况下?

随着 Claude 自身能力的演进,这可能出奇地困难。最近,我们注意到在提示最新一代 Claude 模型的方式上出现了巨大飞跃。我们为 Claude Opus 5 和 Claude Fable 5 等模型删除了 Claude Code 系统提示词中超过 80% 的内容,而我们的编码评估没有可测量的损失。

以下是我们学到的关于提示这一类新模型的经验,以及你如何利用它来更新你的上下文工程。我们已将这些最佳实践放入 claude doctor;在 Claude Code 中使用命令 /doctor 来调整你的 skills 和 CLAUDE.md 文件的规模。

为 CLAUDE 松绑

总体而言,我们发现我们通过系统提示词以及 CLAUDE.md 文件和 skills 对 Claude Code 施加了过多约束。

例如,当我们阅读自己内部使用 Claude Code 的记录时,我们会在单个请求中看到几条相互冲突的信息,比如“酌情保留文档”或“不要添加注释”,因为我们的系统提示词、skills 和用户请求彼此冲突。

One assembled context holding a system prompt line “leave documentation as appropriate”, a skill line “do not add comments”, and a user request “just make it work like the old one”.

一般来说,Claude 能够解读用户意图以得出正确答案,但 Claude 必须先更仔细地思考这些重叠且冲突的信息,才能决定该怎么做。

虽然这些约束曾经是避免最坏情况所必需的,但我们后来发现可以删除其中许多,让模型转而使用周围的上下文和判断力。

此外,Claude Code 现在拥有多得多的工具。Claude 过去依赖 CLAUDE.md 作为记忆、信息和指导的来源。现在我们有了记忆、artifacts 和 skills,Claude 可以用它们来创造跨会话加载和共享上下文的新方式。

过去与现在

有许多以前的上下文工程最佳实践已经变成了迷思。包括:

Six old rules struck through, each pointing to its replacement: give Claude rules → give Claude judgement; give Claude examples → design interfaces; put it all upfront → use progressive disclosure; repeat yourself → simple tool descriptions; memory in CLAUDE.md files → auto-memory; simple specs → rich references.

过去:给 Claude 规则

现在:让 Claude 运用判断力

当我们最初推出 Claude Code 时,我们需要确保 Claude 避免最坏情况,例如删除文件。这意味着我们会给出特别强的指导,而这些指导可能并不总是成立。例如,在系统提示词中我们曾经说:

在代码中:默认不写注释。永远不要写多段 docstring 或多行注释块——最多一行短注释。除非用户要求,否则不要创建规划、决策或分析文档——基于对话上下文工作,而不是中间文件。

但对于某一类提示词,这条指导会是错的。就文档而言,用户可能有自己的偏好,或者非常复杂代码的特定部分可能需要多行注释块。

不过,如果没有针对旧模型的这些护栏,Claude 写出的注释在很多情况下会不正确,我们不得不接受这一权衡。但较新的模型有更好的判断力,无需明确规则就能很好地处理这些决策。

在新的系统提示中,我们写道:编写读起来像周围代码的代码:匹配其注释密度、命名和惯用法。

然后:给 Claude 示例

现在:设计接口

工具使用的第一条规则是给 Claude 提供如何使用它们的示例。使用我们最新的模型,我们发现给出示例实际上会将它们限制在某个探索空间内。

Before: a TodoWrite tool description of about 9,100 characters of when-to-use lists and worked examples. After: a short description, “Create and update a task list for the current session”, with a status enum of pending, in_progress and completed and one rule, only one task in_progress at a time.

与其使用示例,不如多思考你的工具、脚本和文件的设计——Claude 有哪些参数,它们如何能更具表现力?

例如,在 Todo 工具示例中,仅将 status 列为 pending、in_progress 和 completed 之间的枚举,就向 Claude 暗示了如何使用它。关于保持一个条目处于 in_progress 的说明有助于定义我们要求的行为。

然后:把所有内容都放在前面

现在:使用渐进式披露

因为 Claude Code 专注于编码,我们的系统提示包含了关于如何进行代码审查和验证的详细信息。这些并不总是需要,但当需要时,它们是至关重要的信息。

自那以后,Claude Code 在使用渐进式披露方面变得非常擅长——在正确的时间加载正确的上下文。例如,我们将验证和代码审查移入它们自己的技能中,Claude Code 可以有选择地调用。

但渐进式披露不仅仅用于技能,我们也将其用于工具。我们的一些工具是“延迟加载”的,这意味着智能体在使用它们之前必须使用 ToolSearch 搜索它们的完整定义。这使我们能够拥有更多工具(例如我们的 Task 工具),这些工具在被需要之前不占用上下文。

同样的方法也可以应用于你自己的 CLAUDE.md 和 Skill.md 文件。一个常见的误区是,你想把它们做成一个中央存储库,存放你可能遇到的每一条已知实践,因为否则 Claude 就找不到它。相反,考虑拥有一棵可以在正确时间加载的文件树。

然后:重复自己

现在:简单的工具描述

早期的 Claude 模型有时可能需要重复的指令,或者更倾向于听从其上下文窗口末尾的指令而非开头的指令。这意味着我们的系统提示有时会在主系统提示中引用工具,同时在工具描述中也有说明。

我们发现可以删除这些重复示例,并将如何使用工具的说明放在工具描述中,而不是系统提示中。

然后:CLAUDE.md 文件中的记忆

现在:自动记忆

我们过去鼓励用户保存内容到 Claude 的记忆中,通过使用 # 热键自动写入他们的 CLAUDE.md。相反,Claude 现在会自动保存与工作和你相关的记忆。

然后:简单的规格说明

现在:丰富的引用

在计划模式中,Claude Code 严重依赖带有计划的 markdown 文件。将这些文件存储为计划有助于 Claude 在需要时参考它们。另一个类似的最佳实践是将规格说明存储在代码库中,以便 Claude 在跨较长项目工作时参考。

但我们发现 Claude 能够处理越来越复杂的引用。Claude 可以引用由我们新的 artifacts 功能创建的 HTML 工件,而不是简单的 markdown 文件。

你也可以用代码的形式向 Claude 提供参考。一份规范也可以是一个详细的测试套件,或者是 Claude 可能移植的另一个代码库中的某个函数。

评分标准是另一种形式的参考。评分标准让 Claude 能够通过使用 动态工作流 并启动带有这些评分标准的验证器代理,来尝试并验证你在某一特定领域的品味(例如,什么样的 API 设计才算好)。

将此应用到你的上下文中

把这一切综合起来,当你组装自己的上下文时,它会是什么样子?

The context window drawn as a stack: your prompt on top, then references such as @-mentioned files, specs, mockups, codebases and artifacts, then the system prompt, CLAUDE.md files, skills and memory.

系统提示词

系统提示词与产品上下文紧密相关。它告诉 Claude 它正在什么产品中运行、正在做什么。对于 Claude Code,你很可能永远不会修改它,但如果你在构建自己的代理框架,这里就是你应该花大量时间的地方。

CLAUDE.md

让你的 CLAUDE.md 保持轻量,简要描述你的仓库是做什么的,但把大部分 token 花在代码库内部的坑点上。例如,你可能会把代码组织成将所有类型放在一个单一文件中,而不放在其他地方。避免陈述 Claude 通过查看你的文件系统或仓库就应该知道的“显而易见”的事情。

大量使用渐进式披露,例如,如果你有几条关于如何验证工作的独特指令,就创建一个验证技能,并从你的 CLAUDE.md 中引用它。

技能

把技能看作轻量级指南,让 Claude 在需要时找到信息。避免让它们过度受限,除非是在极其重要的领域。

对于较长的技能,尽量使用渐进式披露——把它分成许多文件并拆分出来。

当技能编码了你自己、你的团队或产品特有的特定观点、知识或最佳实践时,效果最好。

参考

你可以用 @ 提及文件,将它们作为参考包含进来。参考让 Claude 能够查阅关于当前计划的深入信息。

这可能是规范文件、模型图,甚至整个代码库。一般来说,你应该优先选择代码形式的文件,因为它以 Claude 非常熟悉的语言为其提供清晰、高保真的指令。例如,设计的 HTML 模型图通常比设计的描述或截图产生更好的结果。

尝试简化

在你的系统提示词、技能和 CLAUDE.md 文件中,你可能需要像我们一样进行简化。我们推出了一个名为 claude doctor 的新命令,它也能帮助你自动完成这一工作。关于如何专门为更高级的模型编写提示词的更多细节,请查看我们的 Fable 实战指南。

本文由 Anthropic 技术团队成员 Thariq Shihipar 撰写。

来源:Anthropic:Claude.dev 开发者博客 · claude.dev