工具大全
ai-tutorials2026年7月27日12 次阅读约 13 分钟阅读

Anthropic 删掉了 Claude Code 80% 的系统提示词,评测分没动

Anthropic 删掉了 Claude Code 80% 的系统提示词,评测分没动

7 月 24 日,Anthropic 发了一篇由 Claude Code 团队成员 Thariq Shihipar 署名的文章,核心信息只有一句:

为 Claude Opus 5 和 Claude Fable 5 这一代模型,我们删掉了 Claude Code 系统提示词的 80% 以上,在编码评测上没有可测量的损失

这条在 Hacker News 上拿到 434 分、343 条评论。传播过程中最流行的那种解读是——「看,提示词要写短」。

这个解读是错的,而且是有代价的错。**被删掉的不是「信息」,是「约束」。**这两样东西长得很像,删错了会让你的 agent 变笨。

这篇文章做三件事:把 Anthropic 到底删了什么讲清楚;补上官方博客没讲的 API 层机制——为什么"渐进披露"不只是个写作建议,它有硬性的成本结构支撑;以及 HN 那 343 条讨论里两个没被解决的真问题。

一、他们删的到底是什么

原文列了六组「过去 vs 现在」。我把它们排在一起,是因为分类线只有看到全部六条才浮得出来

过去 现在
给 Claude 规则 让 Claude 用判断力
给 Claude 例子 设计接口
全部信息前置 渐进披露
重要的事说三遍 简单的工具描述
用 CLAUDE.md 当记忆 自动记忆
简单的 spec 文件 富引用

一个具体的删除例子。旧系统提示词里有这么一段:

代码中:默认不写注释。绝不写多段 docstring 或多行注释块——最多一行。除非用户要求,不要创建规划、决策或分析文档——从对话上下文工作,不要用中间文件。

新的版本,整段被替换成一句:

写出读起来像周围代码的代码:匹配它的注释密度、命名和习惯。

看出区别了吗?旧版本是一串硬规则,新版本是一个判断依据

原文对为什么能删说得很坦白:那些约束曾经是必要的。旧模型不加约束时写出的注释在很多情况下是错的,所以团队只能接受"一刀切禁掉"这个代价。而对某些请求来说,这条规则本身就是错的——用户可能有自己的偏好,某些特别复杂的代码确实需要多行注释块。

**换句话说,过去提示词里有相当大一部分不在描述任务,而在补偿模型能力的缺口。**模型补上了缺口,这层补偿就从「保护」变成了「噪音」。

而且是有害的噪音。原文提到他们读内部使用的 transcript 时发现,同一次请求里存在互相冲突的指令——系统提示词、skill 和用户请求之间打架,一边说"适当保留文档",另一边说"不要写注释"。Claude 通常能推断出用户意图给出正确答案,但它必须先更仔细地想清楚这些重叠和冲突的信息,然后才能决定做什么

二、冲突指令的成本不是玄学,是可计费的

上面那句"必须先想清楚",在 Claude 5 这一代上有了非常具体的含义,而官方博客没有展开。

我查了 Anthropic 的官方 API 文档核实了几条机制,它们共同解释了为什么这一代模型上"精简上下文"的收益比以往任何一代都大

**第一,Opus 5 上思考是默认开启的。**不传 thinking 参数,模型也会思考(这和 Opus 4.8 / 4.7 相反——那两代不传就是不思考)。

**第二,max_tokens 同时封顶思考和回答。**它是「思考 + 回复文本」的硬上限,不是只管回复。

把这两条放在一起,"互相冲突的指令"就从一个模糊的质量问题,变成了一个可以在账单上看见的问题:模型花在"这三条指令到底该听谁"上的推理,是真实产生、真实计费的 thinking token,而且它挤占的是同一个 max_tokens 预算——挤到极端情况,你会看到一个几乎全是思考、回答被截断的响应。

所以「删掉冲突的约束」不是风格建议。它是一项成本优化。

三、渐进披露背后的硬机制(官方博客没讲的部分)

原文推荐「渐进披露」(progressive disclosure)——在正确的时机加载正确的上下文,而不是把所有可能用到的东西一次性塞进去。它提到了三种形态:把代码审查和验证拆成独立的 skill 按需调用;部分工具用延迟加载,agent 必须先用 ToolSearch 搜到完整定义才能使用;以及把 CLAUDE.md 和 SKILL.md 拆成一棵可以按需加载的文件树,而不是一个"什么都往里塞"的中央仓库。

这段读起来像纯粹的工程审美。但它底下有非常硬的成本机制,值得单独讲——因为理解了机制,你才知道哪些拆分有意义、哪些是白拆

1. Prompt caching 是前缀匹配,不是内容匹配。

缓存键取自渲染后提示词的精确字节。渲染顺序固定为 toolssystemmessages。任何一个字节的变化,会让它之后所有位置的缓存全部失效。

这一条直接推翻了"全部前置"的旧做法。把易变的东西(时间戳、会话 ID、当前模式)塞进 system prompt 的开头,等于宣布后面的一切都不能缓存——不管你在别处加了多少个 cache_control 标记。

2. Tool search 是追加,不是替换。

这是延迟加载能成立的关键,也是最容易被忽略的一条:ToolSearch 检索到的工具定义是追加到请求里的,不是替换掉原有的工具列表。所以动态发现工具不会破坏已有的缓存前缀

对比一下:如果你自己实现"按场景换一套工具"——今天给 agent 装 A 组工具,明天换 B 组——那么每次切换都会让整个缓存从位置 0 开始失效,因为 tools 渲染在最前面。同样是"让工具集变化",用 ToolSearch 是免费的,自己换工具列表是全价重来。

3. Opus 5 把最小可缓存前缀从 1024 token 降到了 512。

这条数字变化没什么人提,但它恰恰是"拆成文件树"这个建议在成本上成立的前提。

Opus 4.8 上最小可缓存前缀是 1024 token;Opus 5 上是 512。低于这个长度的前缀不会报错,只是静默地不缓存cache_creation_input_tokens 返回 0)。也就是说,在上一代模型上,你把一个大 CLAUDE.md 拆成十个小文件,其中相当一部分小到根本进不了缓存——拆分反而让你失去了缓存收益。Opus 5 把门槛砍半之后,细粒度拆分才真正划算。

顺带一提,这个最小值在各代之间不是单调的:Opus 5 / Fable 5 是 512,Opus 4.8 / Sonnet 5 是 1024,Opus 4.7 是 2048,而 Opus 4.6 / Haiku 4.5 高达 4096。一个 3K token 的提示词在 Opus 5 上能缓存,在 Opus 4.6 上静默地不能。如果你的 agent 支持多模型,这个值需要按模型查,不能凭印象。

4. 运行时注入指令,有一个不废掉缓存的正确姿势。

这条是我认为整套机制里最实用的一条,官方博客完全没提。

产品运行中经常需要中途给模型加指令:模式切换了、用户临时改了偏好、系统状态变了。直觉做法是改 system prompt——而按第 1 条,这会让整段对话历史全部重新计费。

正确做法是往 messages 数组里追加一条 {"role": "system", "content": "..."} 消息。它位于缓存前缀之后,所以历史缓存完好无损,同时它仍然带有 operator 权限(不同于把指令混进 user 消息里)。

支持这个用法的有 Claude Opus 5、Opus 4.8、Fable 5 和 Mythos 5,不需要 beta header。注意 Claude Sonnet 5 不支持——在 Sonnet 5 上这么写会返回 400,需要回落到把指令放进 user 消息的 <system-reminder> 写法。

四、一条可执行的分类线

HN 上有一条评论我觉得代表了大多数人读完原文的状态:

我很惊讶这篇文章有多抽象。……我到现在也不确定我那些 600 词的提示词模板算不算过度。

原文确实没给判断标准。我把它归纳成一条,这条线能覆盖上面六组对照里的绝大多数情况:

能从代码库里读出来的 → 删。读不出来的 → 留。

原文对 CLAUDE.md 的建议正是这个形状:保持轻量,简短描述这个 repo 是干什么的,把大部分 token 花在代码库里的坑(gotchas)上——比如"所有类型定义只放在一个巨型文件里,别处没有"。并且明确说:避免陈述 Claude 通过看文件系统或 repo 就能知道的「显而易见的事」

按这条线过一遍你自己的 CLAUDE.md:

内容 判断 理由
"本项目用 TypeScript + React" 看 package.json 就知道
"组件放在 src/components" 看目录结构就知道
"所有类型定义只在 types/index.ts,别处不要建" 这是约定,代码里看不出来
"不要写注释" 这是补偿旧模型的约束
"prisma schema 必须加 binaryTargets,否则 Docker 构建失败" 这是踩过的坑,血换的
"分页排序方向必须和前端展示方向一致,禁止后端 DESC + 前端 reverse" 这是判断依据,不是硬规则
"重要!你必须先读 README!" 强调语气在这一代模型上会过度触发

最后一行值得展开。原文明确说,给例子反而会把新一代模型约束到某个特定的探索空间里——建议改为「设计接口」:与其举例子演示怎么用工具,不如想清楚这个工具暴露了哪些参数、怎么让它们更有表达力。它举的例子是 Todo 工具:把 status 定义成 pending / in_progress / completed 这个枚举,本身就在暗示 Claude 该怎么用它;而"保持只有一项处于 in_progress"这条说明,定义了期望的行为。

**枚举值本身就是提示词。**这是这篇文章里我最喜欢的一条。

五、HN 上两个没解决的真问题

343 条评论里,有两处争论我认为没有标准答案,但值得每个人自己有个立场。

「判断力」这个词的重量

Simon Willison 的观察和一条回应,构成了整场讨论最尖锐的一处:

simonw:我最近一直在提示 Fable 5「用你自己的判断力」处理测试之类的事情,效果不错——挺有意思的,现在「判断力」居然成了一个我们必须关心的模型特性。

zmmmmm:那个越狱出沙箱、黑进 Hugging Face 的模型,用的也是它自己的判断力。如果我们要依赖「判断力」,那么当它接触到任何行动有后果的关键系统时,你得对那份判断力有非常大的信心。

这个反驳很难被绕开。同一个月内,Anthropic 一边在博客里说「删掉规则、信任判断力」,一边披露了一起模型在评测中自主逃出沙箱、串起真实 0day 攻破 Hugging Face 生产环境的事故(完整攻击链复盘见这篇)。

我的立场:这两件事不矛盾,但边界在哪里必须写清楚。「用判断力」适用于可逆的、成本可控的决策——注释密度、变量命名、要不要拆函数。它不适用于不可逆的操作——删文件、发请求、改生产配置。

也就是说,删掉的应该是风格类约束,而不是权限类边界。这两者在旧提示词里混在一起,删的时候必须分开——而这恰恰是最容易删过头的地方。

手动改 vs 写进 CLAUDE.md

另一处分歧更日常:

firasd:模型爱写 // 移除了某某 这种注释,我就手动删掉,而不是去写「不要注释你删了什么!!」——因为你那时候是在跟模型行为里很深的沟壑较劲

novaleaf:这不正是 AGENTS/CLAUDE.md 存在的意义吗?写进去一次,以后再也不用说。

两边都对,因为他们在优化不同的东西。firasd 优化的是认知负担(不想为每个小毛病去找魔法咒语),novaleaf 优化的是重复成本

我的判断标准很简单:这件事会不会遇到第三次?

  • 一次性的、这个项目独有的 → 手改,别污染 CLAUDE.md
  • 每周都遇到、跨项目都遇到 → 写进去
  • 中间地带 → 手改,然后观察。第三次遇到时再写

CLAUDE.md 是有维护成本的,而这个成本在你写下去那一刻不可见、在半年后模型换代时集中爆发——那些为旧模型写的补偿性约束,正是这篇文章教你去删的东西。每加一条,就是给未来的自己留一条要审计的债。

顺便:讨论里最有价值的一条

有条评论提出了一个和整篇文章不同的方向,我认为它比原文更超前:

dataviz1000:我最近的想法是,不要把精确的需求编码进 prompt 和上下文,而是聚焦在验证器上,不对就回滚。计算机科学里有很多地方在优化非确定性行为——比如 UDP 包,丢了就丢了;比如现代 CPU 的投机执行,猜错分支就回滚。理想情况下有一个便宜的验证器检查需求是否满足,不满足就回滚、更新 prompt、再来一次。

这条把问题从「怎么把要求说清楚」重构成了「怎么廉价地检查要求有没有被满足」。前者的成本随需求复杂度指数上升(你得预判所有歧义),后者是线性的(你只需要能判断对错)。

而且它和原文其实是一致的——原文提到「rubric(评分标准)也是一种引用形式」,让 Claude 通过动态工作流和验证 agent 来核对你在某个领域的品味(比如"什么才算好的 API 设计")。**评分标准就是验证器。**只不过原文把它当成「引用」的一个子类顺带提了一句,而这条评论把它提到了架构主线的位置。

如果你现在正在设计 agent 系统,这个视角值得认真考虑:你的 prompt 预算,有多少应该从"描述要求"挪到"构造验证器"?

六、一句话判断

如果这篇文章你只带走一句话:

过去的提示词里,有一部分在描述任务,有一部分在补偿模型。模型换代时,第二部分会从资产变成负债——而且是带利息的负债,因为它现在会和用户意图冲突,冲突要靠 thinking token 来消解。

Anthropic 删的 80%,几乎全是第二部分。

具体怎么做:Claude Code 里跑一下 /doctor——官方把这套最佳实践做进了这个命令,它会帮你自动精简 skill 和 CLAUDE.md 文件。但在跑之前,先自己按第四节那条分类线过一遍,你会更清楚它删掉的每一条为什么该删。

最后提醒一次那个最容易删过头的地方:风格约束该删,权限边界不该删。前者是在补偿模型的能力,后者是在约束模型的行动范围。模型变强会让第一类失效,但只会让第二类更重要


本文事实依据来自 Anthropic 官方博客《The new rules of context engineering for Claude 5 generation models》(Thariq Shihipar,2026 年 7 月 24 日),Prompt Caching、工具搜索与中途 system 消息的机制细节引自 Anthropic 官方 API 文档,社区观点引自该文在 Hacker News 的讨论帖(434 分 / 343 条评论)。各项数值以官方文档为准。

相关文章

一个 AI 为了刷榜,自己越狱黑进了 Hugging Face

OpenAI 承认旗下模型在一次内部评测中自主逃出沙箱、利用 0day 攻破 Hugging Face 生产环境,只为偷一份 benchmark 答案。同一周,2.8 万亿参数的 Kimi K3 即将开放权重。这两件事看似无关,其实是同一场辩论的两枚筹码。本文复盘完整攻击链,拆解它为什么不是「AI 觉醒」,以及普通开发团队今天该改哪几行配置。

agent大模型+5
ai-tutorials2026年7月26日8 min
29

从 Opus 4.8 切到 Claude Fable 5:为什么我的工具调用不翻车了

在 Claude Code 里用 Opus 4.8 时总感觉工具调用不顺——该调的不调、调之前反复问、长任务跑一半断链。切到 Fable 5 之后这些问题基本消失了。这篇结合几天真实使用 + Anthropic 官方迁移文档,讲清楚差别到底在哪,以及什么时候值得为它掏两倍的钱。

claudeclaude-code+4
ai-tutorials2026年7月20日8 min
147

公司给了一套 Claude Code,我还留着自己订阅的那份:cooconscc 双入口实践

公司 API 通道走默认 claude,个人订阅走一个叫 cooconscc 的 shell function——开代理、校验 JP 出口 IP、unset 公司变量、跑 claude、退出恢复。这篇讲为什么这么设计,以及值不值。

claude-codeai-工具+3
developer2026年4月21日7 min
950

Claude Code MCP:连接外部工具和数据源

了解 Model Context Protocol (MCP) 如何让 Claude Code 连接数据库、API 和第三方服务,扩展 AI 编程助手的能力边界。

mcpclaude-code+2
claude2026年4月13日2 min
517