Anthropic 干了件让提示工程师们集体沉默的事——他们把 Claude Code 里的系统提示删掉了八成。不是修修补补,也不是用更精炼的措辞替换啰嗦的段落,是直接从三千多个 token 砍到五百上下,连内部评审都觉得是不是玩得太过。可 Claude Opus 5 和 Claude Fable 5 在编码基准上给出的回应,让所有怀疑都碎了:SWE-bench、复杂重构任务、多文件理解,分数几乎没掉。有些指标甚至微涨。
这件事的意义不在于一个产品更新。它像一根针,刺破了过去两年提示工程领域越滚越大的那个泡沫:我们总觉得多给指令、多设边界、多写规则就能让模型更听话更安全,结果反而把模型的手脚捆死了。而 Claude 5 代模型用一次干净利落的实验告诉我们——系统提示不是越多越好,模型的判断力已经超过了你写在 prompt 里的那堆废话。
系统提示膨胀就像技术债务,迟早要还
从三千 token 到五百,评测曲线完全躺平
Claude Code 的旧系统提示是一份典型的大公司产物。它被层层叠加:最初只有基础指令,接着产品团队加上了语气控制,安全团队塞进了合规条款,工程团队又补了若干 edge case 的处理逻辑。等到 Claude 5 系列训练完成,这份提示已经长到让人很难完整读一遍。用他们自己的话说,“像一本你从来没翻开过的用户手册。”
砍掉的逻辑异常粗暴。团队只保留了三样东西:模型需要知道的基本身份信息、工具调用的格式要求,以及一句轻量级的通用行为指引。原先占据大量篇幅的编码规范、步骤分解指令、防幻觉规则、甚至“请一步步思考”这类耳熟能详的咒语,全部移除。他们不是用更好的写法取代,而是直接删空。
结果呢?在封闭的评测集上,新旧系统提示产出的代码通过率差异落在统计噪声范围内。在一些需要模型自主决定重构策略的长上下文中,精简后的版本反而更少出现“做了半天又自己推翻”的情况。团队的一个工程师在内部笔记里写:“我们以前可能不是在帮模型,而是在给它制造心理负担。”
模型变强了,你的提示原地踏步
这个现象背后藏着一个被大多数人忽略的事实。Claude 3 时代,模型本身的推理链条还很脆弱,确实需要提示里塞进大量脚手架:先分析、再拆解、再输出,缺一步就容易跑偏。到了 Claude 5,模型在预训练和强化学习阶段已经内化了这些流程。你再在系统提示里重新定义一遍,等于给一个已经考过驾照的人逐条复述交规——不仅没用,还容易触发不必要的内部冲突。
更糟糕的是,冗长的系统提示会占据上下文窗口的前端,挤走真正有价值的用户消息和历史记录。Agent 环境下的 Claude Code 需要频繁读取文件内容、追踪对话状态、处理终端输出,每一段被旧规则死占着不放的 token 都在抬高出错的概率。删掉 80% 的系统提示不只是瘦身,是让模型的注意力回到该放的地方。
不是说好“清晰指令”是黄金法则吗?
那个耳熟能详的原则其实一直有个没说出口的前提:你的清晰程度必须与模型的判断力匹配。对早期模型来说,清晰意味着把每一步都交代干净;对 Claude 5 来说,清晰意味着把目标说清、边界说少。当系统提示越长,它就越像一份法律合同,而非一份简洁的任务说明。模型不得不花更多算力去解析那些“如果有 A 则 B,但若 C 则不适用 B,除非 D”的长尾条款,最终反应速度下降,行为却不见得更可控。
Anthropic 这次砍掉的,正是那种为了万无一失而层层加码的防御性指令。实验数据清晰得有点残酷:没有这些防御,模型既没有变得更危险,也没有变得更愚蠢。它只是不再被自己人绊倒了。
五条新规则:不是优化,是删减的艺术
丢掉角色设定,告诉它做什么而不是扮演谁
旧系统提示里用了将近三分之一的篇幅去定义“你是一个经验丰富的软件工程师,擅长 Python 和系统设计,你严谨、耐心且注重细节”。团队一度以为这能提升编码质量。实验却显示,角色扮演在 Claude 5 上只是一个占位符,去掉它之后输出质量没有变化,反而在一些需要模型提出不同于“资深工程师”视角的方案时,它更敢于质疑用户的设计选择了。
新规则很直接:省掉你是谁,直接说你该干什么。如果需要一个工具调用,就写“使用终端执行命令”;如果要代码审查,就说“找出这段代码中的逻辑缺陷和性能风险”。让行为定义自己,而不是让人设去框住行为。
用示例取代规则清单
人天生喜欢枚举规则,因为规则看起来可控。但规则一多就会产生交互效应——模型要同时处理“必须遵循 PEP8”“不能引入新的依赖”“如果函数超过 20 行就拆分”“永远不要编造不存在 API”这一整套不相干的约束,时常顾此失彼。Claude Code 去掉了大部分规则清单,代之以一个精心挑选的示例:输入是什么,期望的输出格式是什么,什么样的输出算失败。
这个改变来自一个关键的认知:给模型看好的例子,比告诉它一百条戒律更省 token,也更贴近它在训练过程中学到的模式匹配方式。新系统提示里,唯一保留的“规则”几乎都紧挨着一个示例,没有例子的规则优先被删。
给模型留下 say no 的空间
很多系统提示把模型当成了永远不会拒绝的仆人,总在末尾加一句“如果信息不足,请尽力给出最佳答案”。这句话最初是为了防止模型过度推脱,但它同时勾销了模型在不确定时要求澄清的权利。
Claude 5 删除这类指令后,出现了一个显著的变化:模型在需求模糊时更愿意追问,而不是自己猜一个看着合理的方案然后交差。在真实编码场景下,这种“敢于停下”的行为比硬着头皮给出错误代码有价值得多。不确定性表述不再被系统提示打压,反而成为模型判据的一部分。
你的 agent 为什么总是“想太多”?
过分约束会把规划变成死循环
如果你把自己写的 agent 系统提示翻出来逐条审视,大概会发现一半以上的内容都是在“防止模型做错事”:别乱删文件,别用不存在的标志,别一次性提交太多变更,别……。这些约束单独看都有道理,合在一起就构成了一张迷宫。
Claude Code 旧版本就有这个问题。模型在接到一个稍复杂的重构任务时,先要花大量步骤检查自己是否违反了某条约束,等它确认完所有安全条款,任务上下文窗口已经过去大半,最后只能用一种机械的、不敢有任何跨越的方式拼凑输出。等系统提示砍掉 80%,模型反而恢复了一条最短路径的规划能力,因为它不用再在每一步都停下来问自己:“我是不是违反了第 27 条?”
Claude 5 的“不听话”才是正确行为
最让 Anthropic 团队意外的一个副作用是,精简后的 Claude Code 在标准测试中没有更“叛逆”,但在真实项目里多了一种灵气:用户给了不合理的设计,它不再唯唯诺诺照做,而是直接指出结构问题;用户漏掉关键信息,它主动停下来要补充。这个现象的根源在于,旧系统提示里塞满了“请始终遵从用户请求”之类的顺从性指令,而删去这些之后,模型终于敢调动自己训练中形成的判断力了。
这对 agent 开发者来说是一记重锤。我们平时花大力气给模型上锁,生怕它多做了些不该做的事,却没想过有些锁恰好封住了它本该展示的能力。Claude 5 代模型的信号已经很明确了:你越是信任它的判断,它越不会辜负这种信任。
Anthropic 没有把这些规则写成一篇“你必须这么写提示”的宣言。他们甚至没有称之为一次提示工程优化,只说这是“为下一代模型准备的上下文工程实验”。但任何一个正在自建编码 agent 的开发者,读完这份内部报告都很难不打开自己的系统提示文件,开始一行一行地删。
最终,Claude Code 的案例给出了一种反向的常识:如果你没有明确证据证明某条系统指令对当前模型是必需的,那就别写。不是改得更好,是直接删掉。删到只剩最核心的目标描述和工具约束为止。剩下的,交给模型自己。因为到了 Claude 5 这一代,它真的可以了。

