Anthropic 官方开发团队分享如何让 Claude API 降本不降质:缓存、提示词与 Effort 的三类优化策略

降本与性能并非只能二选一:先排除重复计算、无效指令和不匹配的思考投入,再决定是否更换模型。

作者:Anthropic09-09 · 13 分钟
阅读要点
  • 缓存读取要求请求前缀按字节一致,并受模型绑定与 TTL 限制。
  • 旧模型时代的核验仪式、强制步骤和矛盾规则,可能让前沿模型多做无用工作。
  • Effort 应通过自己的评测逐档校准,更高并不必然更好。
  • prompt-audit、cost-optimize 与 hillclimb 分别处理提示词、整体成本和配置搜索。

Anthropic 官方开发团队给出的核心判断是:Claude API 的降本,不必先从牺牲模型能力开始;先找出缓存重算、提示词遗留规则和 Effort 失配,往往更划算。


为什么账单变贵了,效果却没有同步变好?

很多团队看到 Claude API 账单上涨,第一反应是换更便宜的模型、缩短输入,或者让模型少思考。但这些做法都可能直接伤到结果质量,于是降本与性能看起来像一道单选题。

Anthropic 官方开发团队提醒:在做这道选择题之前,应该先排除另一种情况——系统正在为没有产生额外价值的工作付费。

你应该检查一次请求中的三个层面:

  • 输入层:重复内容被重新 Prefill:检查缓存前缀、模型绑定和 TTL。
  • 指令层:旧规则与新模型能力不再匹配:检查核验仪式、强制步骤、陈旧样例和冲突规则。
  • 推理层:思考投入与任务难度不匹配:用自己的评测扫过多个 Effort 和模型组合;过高可能浪费,过低则可能损害表现。

后文的缓存优化、提示词清理和 Effort 校准正对应这三层。它们没有固定顺序:缓存命中异常就从输入层查,刚升级模型就先审提示词,已有评测集则直接比较模型与 Effort;需要系统降本时,再把缓存、批处理、输出长度和模型选择放进同一张账单里审计。


缓存开了,为什么还是在重复付费?

在大语言模型的交互中,生成回复之前必须经历一个“预填充(Prefill)”阶段。模型需要将你输入的所有文字、历史对话和工具定义转化成内部的工作状态,即键值缓存(KV Cache)。Prefill 是处理输入时成本较高的步骤。

提示词缓存(Prompt Caching)的核心逻辑非常朴素:如果当前请求的前半部分与之前某次请求的前缀完全一致,Claude 就可以直接把内存中保存的 KV 状态读取出来,而无需重新计算一遍。缓存读取的费用仅为完整输入价格的一小部分。

但接入缓存并不等于一定命中。要看清成本为何没有下降,先要理解三个约束。

先弄清缓存为什么会失效:三个硬约束

  1. 缓存绑定具体模型:同一份提示词缓存不能跨模型读取。
  2. 前缀按字节一致(Byte-exact):缓存读取要求对应的请求前缀按字节一致;前缀发生变化,相关部分就可能无法命中。
  3. 有限的生命周期(TTL):默认缓存生命周期只有 5 分钟(从请求开始计时)。如果一个智能体(Agent)中途执行复杂工具调用或等待子智能体返回超过 5 分钟,父级上下文的缓存就会超时失效。

再排查是谁破坏了前缀:四个常见来源

  • 对话途中变更 Effort 设置:Effort 设置会被渲染在具体内容之前,属于缓存前缀的一部分。中途修改会改变前缀;目前只有包括 Opus 5、Fable 5.1 在内的部分模型支持对话中途更新 Effort而不破坏缓存。
  • 在前缀中放入动态变量:系统提示词里的时间戳或请求 ID 每次变化,前缀也随之变化,可能导致缓存未命中。
  • 工具定义发生变化:Claude Messages API 按固定顺序组装提示词,并把工具定义放在前面。工具顺序、描述或定义变化,会改变后续可复用的前缀。
  • 子任务分支(Forking)未对齐环境:创建分支对话或调度 Subagent 时,只有在模型型号、Effort 强度、历史前缀字节完全一致的情况下,分支才能复用主进程的缓存。

最后修请求结构与运行时机:六种做法

针对上述问题,可以从请求结构和运行时机入手调整。

做法 1:静态内容前置,动态内容后移

组装 Prompt 时,把最稳定的静态上下文(工具定义、系统全局规则)放在前面,再接逐步增长的多轮对话和动态输入。

提示词结构布局与缓存设计

做法 2:低频工具延迟加载(defer_loading)

可以预先声明所有工具,同时把低频工具标记为 defer_loading。这些工具定义不进入缓存前缀,只有 Claude 通过 Tool Search 找到它们时才追加到对话中,从而保留已有缓存。

做法 3:把系统提示词变更转成追加消息

对话中途需要补充全局指示时,直接修改最前面的 System Prompt 会改变前缀。部分 Claude 模型支持把系统指令作为消息追加,而不是编辑原 System Prompt,从而保留前面的缓存。

做法 4:在上下文压缩(Compaction)时切换配置

当长会话触发上下文压缩归纳(Compaction)时,对话历史会被大范围重写,缓存本就会发生未命中。如果需要切换模型或调整 Effort,这是一个合适的时机,因为无论如何都要承担这次缓存未命中。

做法 5:推进缓存断点,并提前预热

  • 动态推进断点:缓存断点决定前缀写入缓存到哪里。随着对话增长,使用自动缓存(Automatic Caching),让断点跟随最后一个可缓存的数据块,新增消息就能接在已缓存前缀之后,而不是让越来越长的历史重新计算。
  • 预热缓存:在用户刚建立会话或正在前端打字时,后台可以先行发出一条显式指定断点、设置 max_tokens: 0 的空请求,并使用与真实流量相同的 Effort。该请求只做 Prefill 写入缓存而不生成回答。当用户真正按下发送键时,首个真实请求可命中同一份预热缓存,从而降低延迟。
  • 针对长阻塞考虑 1 小时 TTL:如果工具或子代理耗时超过默认 5 分钟,父级缓存可能在结果回来前过期。此时可考虑为前缀设置 1 小时 TTL。

做法 6:用控制台与 API 找到具体分歧点

开发者无需只靠代码猜测缓存是否生效。先持续观察缓存命中率;出现异常后,再用 Claude Console 和 Cache Diagnostics API查看未命中原因,并定位两个请求从哪里开始分歧。

Claude 控制台缓存诊断界面

模型升级了,为什么旧提示词可能反而拖后腿?

当应用从上一代模型(如 Opus 4.8 或更早版本)迁移到前沿模型(如 Opus 5、Fable 系列)时,很多开发者会直接保留旧项目的 Prompt。然而,这些经过反复修补、堆叠的提示词,往往充斥着针对旧模型缺陷所打的“补丁”。

前沿模型更擅长遵循指令,也有原生推理能力。过去用于修补旧模型弱点的规则,可能与这些能力叠加,造成额外 token、工具调用或性能下降,这就是这里所说的提示词“反模式(Anti-patterns)”。

先找出六类与新模型能力不再匹配的规则

核验仪式(Verification rituals):“请在回答前仔细核对两遍”、“回答前务必再次验证”。前沿模型可能按字面执行;在材料中的退款实验里,这导致每次退款都重复查询订单。
强调与详尽催化剂(Thoroughness & emphasis boosters):“务必竭尽全力”、“CRITICAL: YOU MUST ALWAYS…”。这类大写加粗的催促词,会导致前沿模型产生极端的啰嗦倾向,在原本只需简单回答的场景下,触发几十次不必要的知识库搜索。
强制解题步骤与外挂草稿本(Mandatory procedures & scratchpads):“请在 <scratchpad> 标签里严格按 6 步思考”。这类脚手架会叠加在模型的原生推理之上,增加 token;在实验的 3 张工单中,模型把工具调用写进推理而没有真正执行。
陈旧的 Few-shot 样例(Stale examples):针对旧模型失败模式调出来的样例,可能已经不适合前沿模型;新模型模仿其中的冗长推导后,会在简单问题上生成不必要的长篇推理。
互相冲突的规则条目(Contradictory rules):例如系统提示词同时要求“按政策退款”与“未经升级处理不得退款”。在实验中,这类冲突让 Opus 5 扣留了 4 笔本应发放的退款,并要求客户确认。
过时的 API 配置参数:例如上一代遗留的手动思考预算(Manual Thinking Budget)参数,在新一代 API 接口中可能会被直接拒收报错。

再看一次迁移实验:清理后为何更省也更准

为了验证这些反模式的具体危害,官方在客服基准测试(Customer Support Benchmark)中做了一组对照实验。研究团队从干净的基准提示词出发,每次只植入一种典型的历史反模式,构建出 6 组遗留 Prompt。

对比三组运行结果:

  • 基线组:运行在老模型 Opus 4.8 上;
  • 裸迁组:直接将模型 ID 换成 Opus 5,提示词原封不动;
  • 优化组:在 Opus 5 上运行 /claude-api prompt-audit,清除反模式后再跑。
Opus 4.8 迁移至 Opus 5 时提示词反模式的影响

实验数据显示,通过 /claude-api prompt-audit 清理反模式后,平均运行成本下降 14.6%,业务准确率提高 5.3%。

为什么成本下降? 因为移除了“再三检查”和“绝对穷尽”等要求,减少了重复工具查询与冗余推理。

为什么准确率反而上升?

  • 移除了废弃的思考配置后,API 不再拒绝实验中的每一个路由请求;
  • 清理了矛盾的退款规则后,Opus 5 不再扣留本应发放的退款;
  • 移除了 <scratchpad> 草稿本约束后,不再出现实验中 3 张工单把工具调用写入 reasoning、却没有真正执行的问题。

Effort 拉满,为什么不一定换来更好结果?

在 Claude 平台中,effort 用来告诉模型“这项任务要投入多少工作”:

  • 低 Effort(Low):模型通常更快得出结论;
  • 高 Effort(High / Max):模型更倾向于在回答前推演、验证并探索替代方案。

算力、准确率与成本之间的关系并非单调线性上升。盲目把 Effort 拉到满格,或者为了省钱一律调到最低,都会落入工程陷阱。

先看任务曲线:更多思考何时有用,何时浪费

在不同模型和不同任务难度下,Effort 的投资回报率截然不同:

  1. 高难任务的算力表现:在包含 50 道极难代码任务的 FrontierCode Diamond 基准测试中,Claude Fable 5 在 Low Effort 下得分仅为 11.5%,单个任务成本 5.35 美元;调至 Max Effort 时,得分提升至 30.9%(提升约 2.7 倍,+19 个百分点),单任务成本达 19.00 美元(约 3.5 倍)。
Fable 5 在 FrontierCode Diamond 上的性能与成本曲线
  1. 边际回报陷阱:在无工具参与的 Humanity’s Last Exam 测试中,更先进的 Claude Fable 5.1 展现出了一条陡峭后迅速走平的曲线: - Low Effort 阶段:耗费约 0.30 美元,准确率约 53%; - Max Effort 阶段:耗费约 2.23 美元,准确率约 61%; - 边际回报最低的一段跃迁:从 High 迈向 Max,成本增加了 46%,但准确率仅微增 0.5 个百分点;这半个百分点落在测试的随机波动范围内,也就是没有测出稳定收益。

两个方向都可能配错:过度思考与过早停止

  • 误区一:认为越高越好(过度深思 / Over-thinking):高 Effort 会导致过度深思。Claude 会花费超过任务所需的时间进行推演,增加成本与延迟,并可能降低答案质量。推演仅在仍有证据可供寻找时才有帮助。
  • 误区二:偏向极低 Effort:Effort 设得过低时,Claude 会在掌握充足证据前停止。它会减少工具调用,可能依据第一条搜索结果而非第三条直接作答;在困难步骤上思考减少,并跳过通常会自行运行的检查。答案表面上看已完成,却建立在不完整的信息之上。

不只调档位:比较“新模型低 Effort”与“旧模型高 Effort”

一个值得实测的组合是:更强的模型搭配较低 Effort,可能比弱模型搭配高 Effort 更便宜,同时保持相近表现。

以 CursorBench 3.2 编程基准测试为例,Claude Fable 5.1 在 low effort 下表现相当于上一代 Fable 5 在 high effort 下的水平,而成本约为后者的三分之一(图 5)。

新模型更便宜的原因主要有两点:

  1. Low Effort 下任务工作量更少:模型在 low effort 下每个任务做的工作更少;
  2. 提示词缓存定价差异:Fable 5.1 的提示词缓存读取价格为每百万 token $0.25,而 Fable 5 为 $1.00。即使按 Fable 5 的价格计算,Fable 5.1 在 low effort 下的成本仍约低 40%。
Fable 5 与 Fable 5.1 在 CursorBench 3.2 上的算力与成本对比
  • 理解任务形态(Effort sweep):测量应用在多个 Effort 档位扫描(sweep of effort levels)下的表现,是理解特定任务成本—性能权衡的有效方法。这里有一个重要前提:评测必须尚未“触顶”,仍能区分不同配置的好坏。此时如果跨 Effort 档位的曲线近乎平坦,才说明任务不受 thinking compute 限制;如果评测本身已经饱和,平坦曲线不能支持这个结论。

有了评测集,再用 hillclimb 搜索配置

这种校准通常需要在不同模型与 Effort 档位间运行评测。在 Claude Code 中,/claude-api hillclimb 可以代为执行这种评测驱动的配置搜索:它将评测集划分为训练集与测试集,提出配置变更,并读取失败的训练样例来针对性修复发现的问题。需要注意的是,这是一种配置搜索策略,并非模型训练、自愈机制,也不保证必然追平基准。

在客服基准上的实验过程如下:

基线状态:从 Opus 4.8 及其默认(高)Effort 开始;
第一步尝试:尝试 Low Effort 下的 Opus 5,并应用 prompt-audit 去除强制工具调用仪式、草稿暂存(scratchpad)步骤与相互矛盾的规则。这以 98.9% 的训练集准确率超过了 Opus 4.8 基线,且每张工单成本降至 2.6 美分(图 6);
第二步降级:进一步降至 Low Effort 下的 Sonnet 5,工单成本进一步降至 1 美分,但准确率下滑至 88.9%;
针对性修复:读取失败的训练工单后,在 Prompt 中补充了路由规则(routing rules)与退款上限交叉引用(refund-cap cross-reference),在维持单工单 1 美分成本的同时,将 Sonnet 5 的训练集准确率恢复至 98.9%;
留出集验证:在搜索过程从未见过的 14 张留出工单(held-out tickets)上,最终配置取得了 90.5% 的得分,而最初配置仅为 78.6%,且成本约为原本的五分之一(~1/5)。
Hillclimber 自动化爬山调优过程

三处单点查完,怎样审计整张账单?

把提示词缓存、反模式清洗、Effort 校准、批量处理(Batching)和输出长度约束结合起来,可以形成一套常用的综合成本优化流程。

为了让这套流程标准化,官方提供了全局成本审计命令:/claude-api cost-optimize。它不仅定位成本,还会应用适合当前应用的削减措施;如果提供评测集,它会同时展示节省与表现之间的权衡。

它先找钱花在哪里,再排序节省杠杆

  1. 定位 Token 消耗来源:该工具首先定位 Token 消耗去向。数据来源优先级依次为:若持有 Claude Admin API key,优先从组织的 usage and cost reports(使用量与成本报告)获取;若应用记录了日志,则从每次 API 响应携带的 usage 对象获取;若两者皆无,则通过读取请求构建代码进行估算。最后一种只是估算,不能当成真实账单。
  2. 排序可用节省项:建立分析后,自顶向下对可用的节省杠杆进行排序:优先采用提示词缓存(prompt caching),裁剪每次请求携带的内容(包括 prompt-audit),限制输出长度(bounding output),以及将无人值守任务转移至批处理(batching)。
  3. 结合评测权衡成本与表现:如果开发者提供了评测集(evaluation),它会进一步计算并比较不同 Effort 级别与模型选择下的成本与表现,展示开销节省与性能表现之间的权衡。

四项公开基准说明:不同任务,节省手段并不相同

以常用的主力模型 Sonnet 5 作为基线,运行 /claude-api cost-optimize 在四个公开基准测试中测试了优化效果(图 7):

4 项公开基准测试的成本与表现变化
  • LegalBench 法律合规推理(降本 ~58%): cost-optimize 建议缓存跨任务的共享前缀、将 effort 设为 low,并通过 Batch API 处理任务。思考 Token(Thinking tokens)从 102,779 降至 8,284,通过率变化保持在噪声范围内,成本降低约 58%。
  • tau2-bench retail 零售客服场景(降本 ~73%): 通过设置显式断点实现提示词缓存,cost-optimize 将支出降低了 72%(四舍五入约 73%),同时通过率保持持平。
  • OfficeQA Pro 办公文档长问答(降本 ~52%): cost-optimize 引入了批处理与文档缓存,总运行成本直接从 136.20 美元降至 64.87 美元。
  • SWE-bench Verified 软件工程代码修复(降本 ~55%): 检测发现默认配置已经正确进行了缓存。节省来自将 effort 统一设为 medium,并将 agent 的回复输出约束为简明扼要的几句话。单个任务的中位数执行步数从 29 步降至 17 步,Prompt Token 消耗从 75.2M 降至 33.7M,成本降低约 55%。

可以直接带走

把文章变成一次真实排查

先用清单定位缓存问题,再用同一张表比较模型与 Effort。两个工具都可以在页面里编辑。

提示词缓存未命中排查清单

模型与 Effort 评测记录模板

三个工具怎么选:看你从哪类问题开始

这三个命令都属于 claude-api skill,并已内置在 Claude Code 中。它们不是必须依次执行的三道关卡,而是对应不同起点:

模型刚升级,怀疑提示词有历史包袱

/claude-api prompt-audit

扫描工作目录中的应用代码、提示词、CLAUDE.md、Skills 和工具描述,找出可能带来额外 token、工具调用、冲突或报错的反模式。
账单变高,但不知道钱花在哪里

/claude-api cost-optimize

定位 token 去向,并检查缓存、裁剪请求、限制输出和批处理等杠杆;提供评测集后还能比较模型与 Effort 的权衡。
已有可重复评测,想搜索更合适的配置

/claude-api hillclimb

划分训练集与测试集,提出配置改动,并根据失败训练样例继续调整;最终结果仍在留出测试集上验证。

继续实操

来源
Reducing cost and improving performance with Claude PlatformAnthropic / Claude Developers·查看主材料
延伸
claude-api skill 与文中各项官方文档。
本站说明
本文依据 Anthropic 提供的完整材料整理;两份工具按文中方法制作,用于实际排查与评测记录。

实操带走包

滚动查看原始 Markdown,复制后可按团队实际系统与政策修改。

Markdown · 会员
正在载入 Markdown…
↑ 正文结束
✓ 本篇全文免费开放

会员可复制、下载全文 Markdown,还能让你的 AI 订阅和提问。

阅读原文 ↗
📮 新解读第一时间进邮箱

读完觉得有用?留个邮箱,每篇新解读发布就送达,随时退订。