Anthropic 工程师说他们删掉了 Claude Code 80% 的系统提示词,代码质量没掉——上下文工程学重新定义了什么叫少即是多

Anthropic 的工程师最近做了一个反直觉的实验:他们把 Claude Code 的系统提示词删掉了 80%,结果在编码评估上没有任何可以测量的损失。这个发现推翻了过去两年里很多人奉为圭臬的一些提示词习惯,而它的核心结论是:对于新代模型,给模型判断空间比给它一堆规则,效果更好。

删掉的到底是什么

早期的 Claude Code 系统提示词里充满了这种互相矛盾的指令:

「默认不写注释」「不要写多行文档字符串」「不要创建规划文档,除非用户要求」——然后紧接着的另一条规则是「保持文档在适当的状态」。这两条放在一起,模型在每次执行任务之前都要先想清楚:我到底是写还是不写?这类冲突在 Skills、CLAUDE.md 和用户指令之间层层叠加,最后模型不是在写代码,是在解一道优先级判断题。

新代模型(Claude Opus 5、Claude Fable 5 这一代)的判断能力足够强了,可以根据周围上下文自行决定要不要写注释、什么时候创建文档。这类决定不需要显式规则——规则反而限制了它本来就有的判断力。

从「给规则」到「给接口」

过去工具使用的第一条原则是「给例子」:教模型怎么调用工具,就给它看几个例子。但新代模型反而对例子更敏感——给了例子之后,它就被锁定在那个探索空间里,不去尝试其他同样有效的路径了。

更好的做法是设计接口本身,让参数自己说话。比如一个 Todo 工具,status 字段枚举了 pending、in_progress、completed 三个值,这个约束本身就告诉了模型应该怎么用它。不需要再写一条「每次只允许一个 in_progress」的规则——接口设计已经说清楚了。

这就是「给接口」而不是「给规则」的核心:让工具的形状成为模型行为的指引,而不是用一堆文本规则去约束它。

渐进式披露代替一次性堆砌

旧的上下文工程习惯是把所有相关知识都塞进 CLAUDE.md 或系统提示词里,认为「给得越多越好」。但 Claude Code 现在很擅长在需要的时候加载正确的上下文,不需要的时候不加载。

Anthropic 把代码审查和验证的指导从系统提示词移到了一个单独的 Skill 里,Claude Code 在需要的时候自己调用它。这比一直把它放在上下文里更高效——上下文窗口是稀缺资源,你应该让它只装当前任务需要的东西。

用 /doctor 命令诊断你的上下文

Anthropic 在 Claude Code 里内置了一个 /doctor 命令,它会检查你的 Skills 和 CLAUDE.md 文件,判断哪些上下文是冗余的、哪些是冲突的、哪些是缺失的。这个工具本质上是在帮你做上下文工程的「体检」——不是帮你加东西,是帮你删东西。

对于已经积累了很长的 CLAUDE.md 和一堆 Skills 的人来说,/doctor 的诊断结果往往让人意外:你以为在给模型加能力,其实是在给它制造决策负担。

三个可以立刻做的改变

第一,用 /doctor 跑一遍你的 Skills 和 CLAUDE.md,照着建议删掉让你惊讶的部分。

第二,重新看你的工具接口设计:参数名称、类型约束、枚举值,这些是模型理解工具行为的第一来源,不是描述文本。如果模型需要「看例子才能理解」,接口可能需要重新设计。

第三,把那些「不要做 X」类型的规则列出来,逐条问自己:这条规则在新代模型上还有没有存在的必要?如果模型现在的判断力已经能自己处理这个边界条件,删掉它可能反而让输出更好。这不是空穴来风——Anthropic 的工程师已经用删掉 80% 这件事证明了。

评论区

0 条评论

登录后可评论。

Prompt 工程 85 阅读