Anthropic 砍掉 Claude Code 八成系统提示词,给出六条新的上下文写法
- 你在 CLAUDE.md 和技能里写的那些「绝对不要」,现在很可能在拖后腿:Anthropic 把 Claude Code 的系统提示词删掉了八成以上,编程评测上没测出损失
- 以前写死规则是因为老模型判断力不够,明知道规则对一部分场景是错的也得认。现在那条「默认不写注释」被换成了一句引导:写出来的代码要像它周围的代码
- 多加一条约束不是免费的:系统提示词说「按需要留文档」、技能说「不要加注释」、你说「照旧的那样弄」,这三句能同时出现在一次请求里,Claude 得先把矛盾调和掉才动手
- TodoWrite 的工具描述从约 9100 字符压到一句话加一个三值枚举加一条约束;想给自己的技能和 CLAUDE.md 瘦身,在会话里跑
/doctor
他们把 Claude Code 的系统提示词删掉了八成
Anthropic 技术团队成员 Thariq Shihipar(@trq212)在 X 上发了一篇长文,讲他们最近对 Claude Code 做的一件事:针对 Opus 5 和 Fable 5 这代新模型,把系统提示词删掉了 80% 以上。编程评测上,没测出损失。
先说清楚被删的是什么。你给 Claude 发一句话,它读到的远不止这句话:系统提示词、你装的技能、项目里的 CLAUDE.md、它自己存的记忆、你 @ 进来的文件,全部拼成一大块送进去,你打的那行字只占其中一小条。管这一大堆东西怎么组织、什么时候进来,Anthropic 管它叫上下文工程。
提示词是你交代的这一件事,上下文是你递过去的整个工作台。
它跟写提示词有个根本区别:提示词是一次性的,你知道自己这回要什么;上下文是通用的,它要服务成千上万条你事先不知道内容的请求,所以没法写得太具体。难就难在这儿:你要为一个还不存在的问题准备好指引。
以前必须写死的规则,现在可以删掉
拿一条真规则看。Claude Code 早期的系统提示词里,关于注释是这么写的:
In code: default to writing no comments. Never write multi-paragraph docstrings or multi-line comment blocks — one short line max. Don't create planning, decision, or analysis documents unless the user asks for them — work from conversation context, not intermediate files.
这条规则当年是必要的。Claude Code 刚推出时,最要紧的是别让模型闯祸,比如别删文件。所以他们会给出特别强硬的指引,哪怕这条指引并不总是对的。注释这条就属于并不总是对的那类:有的用户自己有文档习惯,有的特别复杂的代码就该配多行注释块。可当时的模型不这么拦着,写出来的注释十有八九是错的。明知这条规则会误伤一部分人,也只能这么定。
新一代模型的判断力够了,就不用再这么误伤。同一件事,现在的系统提示词里只剩一句:
Write code that reads like the surrounding code: match its comment density, naming, and idiom.
规定了写多少注释。规定得越死,遇到不该套用的场景就越错,而且没有任何回旋余地。
没规定写多少注释,规定了拿什么当参照:周围的代码。参照物随项目变,规则就不用为每个项目重写。
当年那些护栏是为了避开最坏情况才立的。最坏情况不再发生,护栏就该拆掉,让模型靠周围的语境和自己的判断来定。
三句互相冲突的话,同时出现在一次请求里
删规则还有个更实际的理由。他们读自己团队内部使用 Claude Code 的对话记录,发现一次请求里经常同时冒出好几句打架的话。
Claude 一般能猜出你到底想要什么。但它得先把这几句互相矛盾的话调和掉,才能决定动手做什么。你以为往技能里多加一条约束是免费的,其实每加一条,都可能在别处跟另一条撞上,而调和是要花心思的。
这也解释了为什么删掉八成还不掉分:删掉的不只是占位置的字,还有它们制造的矛盾。
六条过时的老规矩,和替换它们的新做法
Thariq 把这些年口口相传、如今已经不成立的做法列了六条,一条一条给了替换:
第一条前面讲完了,还有三条各占一节,先把两条轻的说完。
重复强调 → 简单的工具描述
更早的 Claude 模型有时候需要把同一件事说好几遍才记得住,而且它们更容易听进上下文结尾的话、不容易听进开头的。所以以前系统提示词里会提一遍工具怎么用,工具描述里再写一遍。现在这些重复的说明删掉了,工具怎么用只写在工具描述里。
记忆写进 CLAUDE.md → 自动记忆
以前的用法是按 # 快捷键,把要记住的东西自动写进 CLAUDE.md。现在 Claude 自己会保存跟这次工作、跟你这个人相关的记忆,不用你手动往文件里塞。
别给示例了,把工具本身设计清楚
过去教模型用工具,第一条铁律是多给示例。现在他们发现,对最新这代模型,示例反而把它框死在一小片探索空间里:你举了几种用法,它就在这几种附近打转。
替代示例的是接口设计:把工具、脚本、文件本身设计清楚。关键在参数,参数能取哪些值,本身就该把用法说明白。
TodoWrite 就是例子。它的 status 字段只有三个取值:pending、in_progress、completed。这个枚举摆在那儿,本身就在告诉模型该怎么用它:任务有这三种状态,不多不少。要求也不用举例说明,一句「同时只保持一个任务处于 in_progress」就说完了。
这个立场跟一年前不一样了。Anthropic 2025 年那篇讲上下文工程的文章里,对示例的说法是「提供示例,也就是少样本提示,是我们持续强烈推荐的一项公认最佳实践」,当时反对的只是往提示词里堆一长串边缘案例。隔了一代模型,示例本身从推荐项变成了约束项。
不必全部写在开头,用到才加载
Claude Code 早期专做编程,所以系统提示词里塞进了怎么做代码审查、怎么做验证的详细说明。这些内容大部分时候用不上,但真需要的时候是关键信息,于是就一直占着位置。
现在的解法是让它按需出现:代码审查和验证被搬进了各自独立的技能,Claude 需要时才去调。这套做法叫渐进披露(progressive disclosure):需要哪一部分,才把哪一部分加载进来。
同一套办法也用在工具上。Claude Code 现在挂的工具比以前多得多,其中一些是延迟加载的:平时上下文里只有一个名字,模型得先用 ToolSearch 把完整定义搜出来才能调用。不搜的时候,这个工具占的就是一行名字的位置,那份动辄几千字的完整说明不进来,正因为不进来,才敢挂更多。
你自己的 CLAUDE.md 和技能文件也该这么组织。Thariq 点了一个常见误区:很多人把所有可能用到的做法都往一个文件里堆,理由是不写进去 Claude 就找不到。正确做法是拆成一棵能按需加载的文件树。
规格不一定是文档,也可以是一份代码或一套测试
先说清楚这里的「规格」指什么:你写给 Claude 的「我要的东西长什么样」。过去大家习惯把它写成一份 markdown 文档,在计划模式里,Claude Code 一直很依赖这种文件;把规格存进代码库供长期项目参考,也是同类做法。这些仍然管用,但可以更进一步:Claude 现在能处理复杂得多的参照物。
计划不一定是 markdown。用 artifacts 功能做出来的 HTML 页面,Claude 一样能拿来当参照。
一份写得足够细的测试套件,本身就是一份规格,它把「做对了是什么样」定义得比散文精确。
你想要的行为已经有人实现过,就把那段代码指给它,哪怕是另一种语言写的。
把「什么样的 API 设计算好」写成可逐条对照的标准,Claude 就能派几个分身拿着这份标准,去核对做出来的东西合不合你的品味。
为什么代码类的参照物更管用,他在《Fable 田野指南》(同一个人写的另一篇,Anthropic 给 Fable 5 出的官方使用手册)里说得更直白:有些东西你描述不出来,可能是没有那套词汇,也可能是描述清楚要花太久;这时候最好的办法是给参照物,而所有参照物里最好的是源代码。回到这篇,他举的例子是:同一个设计,给一份 HTML 稿子通常比给一段文字描述或一张截图管用得多。
你可以用 @ 把文件带进来当参照物……一般来说优先选代码里的东西,因为它给 Claude 的是清晰、高保真的指令,而且是它非常熟悉的语言。 — Thariq Shihipar,《The new rules of context engineering for Claude 5 generation models》(省略号处为原文另一段落)
上下文由六层拼成,每层该放什么
把前面几条合起来,就是一份分层的摆放建议。先看这一次请求里,Claude 实际读到的东西是怎么拼起来的:
这六层里,最上面那句话是你当场敲的,最下面的记忆由 Claude 自己存,都不用你摆。真正要你动手安排的是中间四层:
绑的是产品语境:告诉 Claude 它在什么产品里、在干什么活。用 Claude Code 的人基本不用碰它;自己搭 Agent 框架的人,这一层才是该花大力气的地方。
保持轻量,简单说清这个仓库是干嘛的,token 主要花在讲这个代码库的坑上,比如你们的类型全堆在一个文件里、别处一概没有,这种约定就值得写。别写那些 Claude 扫一眼文件系统或仓库就知道的显然事实。细节多了用渐进披露:比如验证工作有好几条独特要求,就做成一个验证技能,从 CLAUDE.md 里指过去。
把技能当成轻量指南,让 Claude 需要时能找到信息,别写得过死,特别要紧的地方除外。长技能尽量拆成多个文件做渐进披露。技能里最该装的,是只属于你、你团队或你产品的那些判断、知识和做法。
它排在系统提示词上面,离你的那句话最近,也是这四层里唯一每次都能临时换的:这一轮想让它照着什么做,就带哪份进来。
想动手精简,先跑一个体检命令
Anthropic 把这套做法做进了一个命令,用来给你的技能和 CLAUDE.md 瘦身。原文对用法的说法是「我们把这些最佳实践放进了 claude doctor,在 Claude Code 里用 /doctor 命令」。
这两个入口不完全一样。本站在 Claude Code 2.1.220 上实测:命令行的 claude doctor,帮助文本写的是「检查你的 Claude Code 安装是否健康,读取当前目录的设置文件、不弹信任提示」,末尾还补了一句:要做能顺手修问题的完整体检,请在会话里运行 /doctor。所以想让它帮你精简技能和 CLAUDE.md,进会话跑斜杠命令那个。
claude doctor --help 看当前口径。这六条替换成立有个前提:「新一代模型的判断力更好了」,原文举的是 Opus 5 和 Fable 5。如果你的工作流跑在更老的模型上,或者跑在别家模型上,那些护栏当初挡的问题可能还在,照着删之前先小范围试。这一层原文没有展开。
claude doctor 与 /doctor 的用法差别为本站在 Claude Code 2.1.220 上实测补充,不在原文中。2025 年那篇上下文工程文章对示例的表述,引自延伸链接第一条。Anthropic 把 Claude Code 的出厂说明书删掉八成,改成让模型自己判断
Claude Code 团队的 Thariq 讲了这次减法怎么做的,以及替换掉老规矩的六条新写法,一页带图讲完
↓ 一页读完 · 有一张会动的图
Anthropic 的 Thariq 在 Claude Code 团队。他发长文讲了最近做的一件事:针对 Opus 5、Fable 5 这代新模型,把 Claude Code 的系统提示词,出厂就写死在软件里、每次对话都先读一遍的那份说明书,删掉了 80% 以上,编程评测(一套标准考题)上没测出损失。
被删的是什么?你打的那行字只占送进模型的一小条:系统提示词、你装的技能(写好的操作指南,需要时才翻)、项目里的 CLAUDE.md(放在代码文件夹里、每次都读的说明文件)、Claude 存的记忆、你带进去的文件,拼成一大块才是它真正读到的东西。管这一大块怎么组织、什么时候进来,Anthropic 管它叫上下文工程。
Claude Code 刚出的时候,头等大事是别让它闯祸,所以规则写得特别硬,哪怕明知道有一部分人会被误伤。注释那条就是:有人自己有写文档的习惯,复杂代码本来也该配多行注释,可当年的模型不拦着就会写出一堆错注释,只能一刀切。
写代码默认不写注释;绝不写多段落的文档字符串或多行注释块,最多一行短的。
写出来的代码要读起来像它周围的代码:注释密度、命名、写法都对齐。
新的那句把参照物交给了周围的代码:注释密度、命名、写法跟着邻居走。参照物随项目变,这条规则就不用为每个项目重写一遍。
删规则还有个更实际的理由。他们翻自己团队用 Claude Code 的对话记录,发现一次请求里经常同时冒出几句打架的话。
Thariq 把这些年口口相传、现在已经不成立的做法列了六条,一条一条给了替换。
给 Claude 写规则
给它举例子
能想到的全写在开头
同一件事说好几遍
要记的事写进 CLAUDE.md
规格写成一份文档
让它自己判断
把工具本身设计清楚
用到哪块才加载哪块
只在工具说明里说一次
Claude 自动存记忆
给一份代码当参照
把前面几条合起来,就是一份摆放建议。六层里,最上面那句话你当场敲,最下面的记忆 Claude 自己存,真正要你安排的在中间。
想动手就先跑一次体检:在 Claude Code 会话里输入 /doctor,它会拿这套标准给你的技能和 CLAUDE.md 提精简建议。本站在 2.1.220 版上试过,命令行里的 claude doctor 只查安装是否正常,完整体检要在会话里跑。
X 上刷到一条。
出厂说明书砍掉八成
绝不写多行注释块
写出来的注释一堆是错的
要像它周围的代码
跟着邻居走
也只能一刀切
同一次请求
才轮到动手
使用记录发现的
可以删掉的行
- × 扫一眼仓库就知道的话
- × 同一件事说三遍
- × 一堆示范用法
从 9100 字压成一句
它会在别处跟另一条撞上