转译:用 Claude Platform 降低成本并提升性能

01.jpg

译自 Claude Blog 原标题:Reducing cost, and the improving performance with Claude Platform

作者:Lance Martin(@RLanceMartin)、Brad Abrams(@brada)、Isabella He(@IsabellaKHe)、Ben Lehrburger(@benlehrburger)。

调好提示缓存、指令和 effort,就能在不牺牲应用性能的前提下把 Claude 的 token 消耗降下来。

性能和成本常被看成是二选一的取舍:想少花钱,就得接受更差的结果。但是,实践里我们发现,很多跑在 Claude Platform 上的应用其实不是这样。只需要做处调整,就能降本、性能还不丢:提高提示缓存(prompt cache)命中率;升级到前沿 Claude 模型时,清掉提示词里的反模式(anti-pattern);按任务复杂程度校准 effort(努力程度)。这些做法我们已经写进 claude-api skill。这篇文章会展示:Claude Code 配上这个 skill,往往能找到既降成本、又保住甚至提高效果的办法。

提示缓存

Claude 在生成回复之前,会先把提示词处理成一份内部工作状态。这一步叫预填充(prefill),也是处理输入里最贵的部分。提示缓存会把这份状态存下来(也就是 KV 缓存):当下一次请求以相同前缀开头,Claude 直接读缓存,而不是重新算一遍。缓存读取按完整输入价的一小部分计费。

要让提示缓存真正管用,有几条实务约束。第一,缓存绑定到具体模型。第二,缓存读取要求整个前缀逐字节完全一致。第三,缓存有有限的存活时间(TTL)。

记住这三点,有几条能落地的建议:

  • 对话中途改 effort 要小心。 这些设置会渲染进提示词、排在你的内容前面,它们也是缓存前缀的一部分。目前只有部分 Claude 模型(包括 Opus 5 和 Fable 5.1)能在对话中途更新 effort而不打断缓存。

  • 别把易变的值放进前缀。 系统提示词里的动态时间戳或 ID,在不同模型调用之间一变,缓存就会失效。

  • 避免工具定义自己重排顺序。 用 Claude Messages API 时,提示词按固定顺序组装,工具定义排在最前面。工具定义任何改动都会打断缓存。

  • 对话分叉时要小心。 子智能体和分支只有在分叉后的前缀字节级相同、同一模型、同一 effort 时,才能共用父级缓存。

怎么改

我们在提示缓存管理上积累了几条经验:

02.jpg

图 1 | Claude Console 对比请求,找出提示词前缀从哪一分叉,用来诊断意外的缓存未命中。

  • 低频工具延后加载。 工具可以一次性全部声明,但把很少用到的标成 defer_loading:它们不进缓存前缀,只有 Claude 用工具搜索找到时才追加进对话,缓存就能保住。

  • 系统提示词的更新改用消息追加。 部分 Claude 模型允许你在对话中途把系统指令当成一条消息加进去,而不是去改系统提示词本身,这样缓存还在。

  • 请求布局要让稳定的部分一直稳定。 静态上下文(工具定义和系统提示词)放前面,往后增长的对话放后面(图 2)。

03.jpg

图 2 | 组织提示词时把缓存考虑进去。

  • 等提示缓存本来就要失效的时候,再改模型或 effort。 有些操作,比如 compaction(压缩),本来就会重写缓存里的大部分对话。这是换模型或 effort 的好时机——反正这次未命中的钱已经要付了。

  • 对话变长时,把缓存断点往后移。 在 Claude Platform 上,可以打开自动缓存,把缓存断点打在最后一个可缓存块上。

  • 预热缓存。 想降延迟,可以发一个 max_tokens: 0、带显式缓存断点的请求,effort 与真实流量相同。这样会处理提示词并写入缓存,但不会生成任何内容。如果在会话开始时就做(比如用户还在打字),第一条真正的请求就能命中热缓存。

  • 别超过提示缓存的 TTL。 5 分钟 TTL 从请求开始计时。如果智能体在工具调用或子智能体请求上阻塞超过 5 分钟,父级缓存会在结果回来之前过期。这种情况下,考虑给前缀设 1 小时 TTL。

指令

提示词里会慢慢堆上一些指令,专门拿来补模型的短板。这些指令可能跟最新 Claude 模型的能力脱节。下面这些常见的提示反模式,会拖累前沿 Claude 模型,还可能无意中把成本抬上去:

  • 核验仪式。 「double-check your work」或「verify twice before responding」这类指令,前沿模型往往会照字面做,白白烧掉 token。

  • 「务必详尽」类强调助推。 「Be maximally thorough」「CRITICAL: YOU MUST ALWAYS…」用在前沿模型上,容易写太长、多调工具。

  • 强制流程和草稿纸脚手架。 固定步骤(比如「think step by step in a scratchpad」)或推理模板,是前沿模型不需要的仪式。这层脚手架会叠在模型自带的推理之上,多用没有必要的 token。

  • 过时示例。 针对旧模型失败模式调过的 few-shot 示例(少样本),可能教会前沿模型在根本不需要的请求上,也去模仿很长的推理链。

  • 互相矛盾的规则。 前沿模型更擅长遵循指令。互相打架的规则(「always refund within policy」对上「never issue refunds without escalation」)会被执行得更死,效果反而变差。

  • 过时配置。 给上一代 Claude 写的设置(比如手动思考预算),在较新模型上可能被 Claude Platform 直接拒绝。

怎么改

我们给 claude-api skill 加了一条新命令,专门盯这些反模式。在 Claude Code 里,对你的提示词、skill 或工具描述跑 /claude-api prompt-audit。审计范围覆盖工作目录里的所有东西,包括调用 Claude API 的应用代码,以及 Claude Code 自己的配置(例如 CLAUDE.md 或 skill)。

举个例子。我们在一份客服评测上,测了从 Opus 4.8 迁到 Opus 5。起点是一条干净提示词,然后一次只埋进一种反模式(已废弃的思考设置、一对互相矛盾的退款规则、手动草稿纸、「verify twice」、「be maximally thorough」,以及强制六步流程),得到六条遗留提示词。

每条都跑三遍:Opus 4.8;只改模型 ID 的 Opus 5;以及每条提示词跑一次 /claude-api prompt-audit 之后的 Opus 5(图 3 是六条的平均值)。

04.jpg

图 3 | 从 Opus 4.8 迁到 Opus 5 时,提示反模式的影响。

在 Opus 5 上,核验仪式(「verify twice」)会在每笔退款里重复查一遍订单,多用没有必要的 token。「务必详尽」类强调(「be maximally thorough」)会变成几十次用不上的知识库搜索。

跑完 /claude-api prompt-audit,反模式被清掉,成本平均降了 14.6%,准确率平均升了 5.3%。成本下来,是因为多余的工具调用和重复推理没了。准确率上去,有三个原因。已废弃的思考设置会让 API 把每一条路由请求直接拒掉。互相矛盾的退款规则让 Opus 5 扣住了四笔本该退的款,同时去让客户确认。手动草稿纸和 Opus 5 自带的思考撞车:有三张工单,它把工具调用写进了推理过程,却从来没有真正执行。

Effort

Effort 告诉 Claude「这件事要下多大功夫」。low effort 下,Claude 通常更快得出结论。high effort 下,它会先斟酌、核验、把替代方案摸一遍,再回答。

同一模型在不同 effort 档位上,成本与性能可以差得很开。例如 Claude Fable 5 在 FrontierCode Diamond(最难的 50 个任务)上,low effort 得分 11.5%,每个任务 $5.35;max effort 得分 30.9%,每个任务 $19.00。改 effort,分数大约提到 2.7 倍(+19 个百分点),成本大约变成 3.5 倍(图 4)。

在 Claude Fable 5.1 上,Humanity's Last Exam(人类最后的考试)(无工具)曲线很陡,最后一档收益却在变少。low effort 大约 53%,每题约 $0.30;max effort 大约 61%,每题约 $2.23。升到 max 的最后一步只多大约 0.5 个百分点,成本却多 46%。这点增益落在评测的两次运行噪声里,等于多花钱、质量不会好太多。

05.jpg

图 4 | Fable 5 在 FrontierCode Diamond 上,不同 effort 档位的性能与成本。

effort 两个方向都可能校不准:

  • 默认越高越好。 high effort 会过度思考。Claude 花在斟酌上的时间超过任务所需,成本和延迟都上去,答案质量还可能变差。斟酌只有在还有证据可挖的时候才有用。

  • 习惯性压到 low。 设太低,Claude 会在证据还不够时就停。工具调用变少,可能看完第一条搜索结果就答,而不是看到第三条。难步骤上想得更少,也跳过它本来会自己做的检查。答案看起来写完了,其实建立在不完整的信息上。

怎么改

有一些校准 effort 的实用办法:

  • 用更强的模型跑更低的 effort。 更强模型的 low effort,可以比弱模型高投入跑 high effort 更便宜。例如在 CursorBench 3.2 上,Claude Fable 5.1 的 low effort 打平 Fable 5 的 high effort,成本只有三分之一(图 5)。新模型更便宜,有两件事在起作用:low effort 下每个任务干的活更少;Fable 5.1 的提示缓存读取价是每百万 token $0.25,Fable 5 是 $1.00。就算按 Fable 5 的价格算,Fable 5.1 的 low effort 也大约便宜 40%。

06.jpg

图 5 | Fable 5 与 Fable 5.1 在 CursorBench 3.2 上、不同 effort 档位的对比。

  • 看清任务形态。 在一档档 effort上测应用表现,能看清你这个任务自己的成本-性能取舍。如果评测还没饱和,而成本-性能曲线在各档 effort 上是平的,说明任务并不受思考算力约束;加 effort 没有好处。

这种校准,通常要在不同模型和 effort 档位上跑评测。在 Claude Code 里,/claude-api hillclimb(爬山搜索)会替你做这次搜索:把评测拆成训练集和测试集,提出配置改动,并读失败的训练样本,按找到的问题改。

我们在一份客服评测上跑过。起点是 Opus 4.8、默认(high)effort。爬山搜索器先试 Opus 5 的 low effort,并用 prompt-audit 清掉强制工具调用仪式、草稿纸步骤和互相矛盾的规则。这一步就超过了 Opus 4.8 基线:训练集准确率 98.9%,成本降到每张工单 2.6 美分(图 6)。

07.jpg

图 6 | 爬山搜索同时改善成本和性能。

接着降到 Sonnet 5 的 low effort,更便宜,每张工单 1 美分,但准确率掉到 88.9%。读过失败的训练工单后,Claude 往提示词里加了路由规则和退款上限对照,Sonnet 5 回到 98.9%,成本没变。

在搜索从未见过的 14 张留出工单上,最终配置得 90.5%,原配置是 78.6%,成本大约是原来的五分之一。

把降本自动化

提示缓存、指令和 effort,是常见的降本杠杆。我们的文档里还有更多。要对调用 Claude API 的应用代码做一次整体成本审计,我们加了 /claude-api cost-optimize:它会摸清钱花在哪、落实降本措施,如果你提供评测,还会展示省下的钱和性能怎么换。

cost-optimize 先找 token 花在哪:有 Claude Admin API key,就读组织的用量和成本报告;应用如果记下了每次 API 响应里的 usage 对象,就用它;两样都没有,就读你的请求组装代码来估算。

然后给能省的钱排优先级:从提示缓存开始,再精简每条请求携带的内容(包括一次 prompt-audit),限制输出,并把无人值守的活走 Batch API。如果你提供评测,它会再往前走一步,算出不同 effort 档位和模型选择下的成本与性能。我们以 Sonnet 5 为基线,在四个公开评测上跑过(图 7):

  • LegalBench(成本约低 58%): cost-optimize 建议跨任务缓存共享前缀、设 low effort、用 Batch API 处理任务。思考 token 从 102,779 降到 8,284,通过率落在噪声范围内,成本大约降了 58%。

  • tau2-bench retail(成本约低 73%): 用显式断点落地提示缓存后,cost-optimize 把花费降了 72%,通过率持平。

  • OfficeQA Pro(成本约低 52%): 加上批处理和文档缓存,成本从 $136.20 降到 $64.87。

  • SWE-bench Verified(成本约低 55%): cost-optimize 发现默认配置已经缓存正确。省下来的钱来自把 effort 设成 medium,并把智能体输出限制成几句短话。每个任务的中位步数从 29 降到 17,提示 token 从 75.2M 降到 33.7M。

08.jpg

图 7 | 跑 /claude-api cost-optimize 后,各评测上的成本与性能变化。

怎么开始

已经迁到前沿 Claude 模型、想检查现有提示词,从 /claude-api prompt-audit 开始。它会扫工作目录里的提示词、skill 和工具描述。对象可以是调用 Claude API 的应用代码,也可以是 Claude Code 的配置(CLAUDE.md、skill)。它会清掉那些拖累前沿模型的常见反模式。

应用在用 Claude API、想做一次成本审计,就用 /claude-api cost-optimize。它会摸清 token 花在哪,再试不同杠杆:会跑 prompt-audit,也会看提示缓存、无人值守批处理、限制输出能不能把成本压下去。如果你提供评测,它会衡量 effort 和模型选择的取舍。

最后,用 /claude-api hillclimb 在成本和性能上做一次搜索。给一份评测,Claude 会拆成训练集和测试集,再提出旨在降本、同时保住基线性能的应用改动。Claude 会读失败的训练样本来引导搜索,最终配置在留出测试集上打分。

延伸阅读:

  • 文档见这里

  • 降本 cookbook 见这里

  • claude-api skill 见这里;该 skill 也内置在 Claude Code 中