用 Claude Code 的三个命令
优化 API 成本
prompt-audit 检查旧提示词,cost-optimize 审计 API 开销,hillclimb 根据评测结果搜索配置。在 Anthropic 的客服基准实验中,hillclimb 从 Opus 4.8 换到 Sonnet 5,再根据失败工单修改提示词,最终在测试集上提高了准确率,成本约为原来的五分之一。
检查提示词、审计成本、搜索配置
检查旧提示词、追踪 token 开销、反复测试模型与配置,Claude Code 中的三个命令分别承接这些工作。prompt-audit 清理旧提示词中不再适用的写法,cost-optimize 查找 API 应用的降本空间,hillclimb 则根据评测结果持续调整配置。
三个命令来自 Anthropic 开源仓 anthropics/skills 中的 claude-api skill,Claude Code 加载其中的说明与脚本后即可使用。Anthropic 负责 Claude Platform 与这项 skill 的工程师 Lance Martin,在 2026 年 9 月 8 日的官方博客中介绍了它们的分工与实测结果。缓存、旧提示词与 effort 的降本机制已在前篇《按每个任务算成本》中展开,这篇接着看命令如何执行这些优化。
三个命令对评测集的要求不同。这里的 eval 指一组用于衡量配置准确率与成本的任务。
检查工作目录中的提示词、skill 和工具描述,删除为旧模型编写、如今不再适用的写法。范围既包括 Claude API 应用代码,也包括 CLAUDE.md、skills 等 Claude Code 配置。
先统计 token 开销,再检查缓存、精简请求内容、限制输出,并将无人值守任务交给 Batch API;其中也会运行 prompt-audit。有 eval 时,再比较不同 effort 和模型的成本与表现。
把 eval 拆成训练集和测试集。根据训练集中的失败样本调整配置,最后用未参与搜索的测试集验收。
官方按上述顺序介绍了适用场景:模型升级后检查提示词,API 应用需要降本时审计成本,有评测集时再搜索配置。这些命令并非都要等评测集准备好才能使用。
清理旧提示词:成本下降,准确率上升
模型升级了,为旧模型补短板的指令却可能一直留在提示词里。新一代 Claude 更严格地按字面执行时,原本的补救措施可能增加 token 消耗,甚至引发错误。博客把这类不再适用的写法称为反模式,列出了六类。
| 反模式 | 例子 | 前沿模型上的表现 |
|---|---|---|
| 核验仪式 | double-check your work、verify twice before responding | 往往会被模型按字面执行,增加 token 消耗 |
| 强调与加码 | Be maximally thorough、CRITICAL: YOU MUST ALWAYS… | 可能让回答更长,并增加工具调用 |
| 强制流程与 scratchpad 脚手架 | think step by step in a scratchpad | 可能与模型的内建推理叠加,增加 token 消耗 |
| 过时的少样本示例 | 按旧模型失败模式挑出来的范例 | 可能让新模型在不需要时模仿较长的推理过程 |
| 互相矛盾的规则 | always refund within policy 对 never issue refunds without escalation | 可能被指令跟随能力更强的新模型更严格地执行,表现变差 |
| 过时的配置 | 旧模型使用的手工 thinking 预算 | 升级后可能被 Claude Platform 直接拒绝 |
Anthropic 在一个客服基准上测试了 Opus 4.8 → Opus 5 的迁移。实验从一份干净提示词出发,每次只植入一个反模式,形成六份旧提示词:一个已弃用的 thinking 设置、一对矛盾的退款规则、一个手工 scratchpad、verify twice、be maximally thorough,以及一个强制六步流程。
每份提示词都在三种配置下评测:使用 Opus 4.8;只更换 model ID,改用 Opus 5;先运行 /claude-api prompt-audit,再改用 Opus 5。图 3 展示六份提示词的平均结果。
审计后,平均成本降 14.6%,准确率升 5.3%。图中的三个点分别是:Opus 4.8 旧提示词 2.52¢ · 89.4%;Opus 5 未审计 3.43¢ · 91.7%;Opus 5 审计后 2.93¢ · 97.0%。图内把审计这一步标为 +5.3 点、−0.49¢。
同一句「核验两遍」,在 Opus 5 上变成了每次退款都查询两遍订单;「尽可能彻底」则触发了几十次不必要的知识库搜索。博客将成本下降归因于删除了这些多余调用和重复推理。
准确率的改善,博客追溯到了三个具体故障:
- 已弃用的 thinking 设置让 API 拒绝了所有路由请求。
- 两条退款规则互相矛盾,Opus 5 因而暂扣了四笔本应退还的款项,转而要求客户确认。
- 手工 scratchpad 要求模型把推理过程写出来,却与内建 thinking 互相干扰。三张工单中的工具调用只写进了推理过程,没有执行。
站内 《提示词在给 coding agent 派活》讨论的是用户在 prompt 中的措辞让 agent 承担了多余的工作量;这里审计的是为旧模型写的话被新模型照字面执行,两者机制不同。
这次实验中的 5.3 点和 14.6% 都来自 eval 测量。没有 eval,prompt-audit 仍能删除反模式,却无法衡量这些改动对任务表现的影响;effort 的取舍同样需要 eval 才能判断。
提高 effort,增加的成本换来了什么
effort 控制模型在推理上投入多少:从 low、medium、high、xhigh 到 max,低档通常更快得出结论,高档会花更多时间推敲、核验和探索替代方案。博客给出的三组实测,分别展示了提高档位的收益、最后一档的收益递减,以及新模型在低档追平旧模型高档的情况。
在 Cognition 的编码基准 FrontierCode 上,Diamond 子集包含其中最难的 50 题。Fable 5 从 low 的 11.5%、每任务 $5.35,升到 max 的 30.9%、每任务 $19.00:成本增至约 3.5 倍,分数增至约 2.7 倍(+19 点)。图 4 标注的差值为 +19.4 点,中间三档没有标注具体点值。
Fable 5.1 的最后一档收益则明显缩小。在 Humanity's Last Exam 上,low 约 53%、每题约 $0.30,max 约 61%、每题约 $2.23。这项由 Center for AI Safety 与 Scale AI 联合推出的基准包含 2,500 道专家级跨学科题目,博客中的测试不使用工具。最后一步升到 max 只增加约半分,成本却提高 46%。这点增益仍未超出重复运行时分数的自然波动范围,博客据此判断,增加的成本没有带来可测的收益。
换一代模型,结果又不同。在 Cursor 基于真实会话构建的编码 agent 基准 CursorBench 3.2 上,Fable 5.1 的 low 追平 Fable 5 的 high,成本只有三分之一。博客给出了两个原因:低档每项任务做的工作更少,缓存读取也更便宜。Fable 5.1 的缓存读价为每百万 token $0.25,Fable 5 为 $1.00。即使按 Fable 5 的价格计算,Fable 5.1 的低档仍便宜约 40%。图 5 没有标注各点的具体数值。
| 模型 · 基准 | low | max | 博客口径 |
|---|---|---|---|
| Fable 5 · FrontierCode Diamond(最难 50 题) | 11.5% · $5.35 / 任务 | 30.9% · $19.00 / 任务 | 分数约 2.7x(+19 点),成本约 3.5x;图 4 标 +19.4 点 |
| Fable 5.1 · Humanity's Last Exam(无工具) | 约 53% · 约 $0.30 / 题 | 约 61% · 约 $2.23 / 题 | 最后一步到 max 仅增加约半分,成本提高 46%,增益在运行噪声内 |
| Fable 5.1 对 Fable 5 · CursorBench 3.2 | 5.1 的 low ≈ Fable 5 的 high,成本三分之一 | 图 5 无数值标注 | 缓存读 $0.25 对 $1.00 每百万 token;按 Fable 5 价格算仍便宜约 40% |
博客提醒,effort 过高或过低都可能影响质量:过高时,模型可能在任务已经不需要继续推敲的地方反复思考,增加成本和延迟;过低时,又可能证据不足就停止,只看第一条搜索结果而不再查看第三条,或跳过原本会自行执行的检查。回答看似完整,依据却不充分。
校准时,官方建议既测试更强模型的低档配置,也在同一任务上逐档评测 effort。如果评测得分尚未达到上限,提高 effort 后表现仍无变化,就提示这项任务可能不受推理投入限制。跨模型、跨档位反复运行评测的工作,可以交给 hillclimb。
hillclimb:换模型后,再根据失败工单改提示词
hillclimb 会提出配置改动,并查看训练集中的失败样本,据此继续修改。另留一组测试样本,搜索期间不接触,结束后才用于验收,这组样本称为 held-out 测试集。Anthropic 在一个客服基准上展示了整个过程,衡量的是决策准确率(decision accuracy)。
起点:Opus 4.8,默认 high effort
图 6 标出的训练集起始准确率为 74.4%;起点成本没有数字标注。
Opus 5 · low:升级模型并审计提示词
运行 prompt-audit,删除强制工具调用的仪式、scratchpad 步骤和矛盾规则。训练集准确率升至 98.9%,超过 Opus 4.8 基线,成本降到每工单 2.6 分。
Sonnet 5 · low:继续降低成本
成本降到每工单 1 分,准确率随之降到 88.9%。
读取失败工单,补充提示词
Claude 在提示词中加入路由规则,并补充对退款上限的引用。Sonnet 5 的训练集准确率回到 98.9%,成本不变。
换成 Sonnet 5 后,训练集准确率一度下降;Claude 随后读取失败工单、补充规则,才在不增加成本的情况下恢复到 98.9%。这次搜索同时调整了模型、effort 和提示词。
最后,用搜索期间未见过的 14 张工单测试:新配置准确率为 90.5%,原配置为 78.6%,成本约为原来的五分之一。这与训练集上的 98.9% 对 74.4% 是两组结果。
cost-optimize:四个基准,降本手段各不相同
cost-optimize 审计调用 Claude API 的应用代码,先确认成本花在何处,再依次应用降本手段。它优先使用 Claude Admin API key 获取组织级用量与成本报表;如果应用保存了每次响应的 usage 对象,就读取其中的 token 用量;两者都没有时,才根据构造请求的代码进行估算。
优化顺序相对固定:先检查缓存,再精简每次请求携带的内容,其中包括运行 prompt-audit;随后限制输出,并把无人值守的工作交给 Batch API。只有提供 eval 后,它才会继续计算 effort 与模型选择带来的成本和性能取舍。
四个公开基准都以 Sonnet 5 为起点,但采用的降本手段不同。
在法律分类基准 LegalBench 上,cost-optimize 建议跨任务共享缓存前缀、使用 low effort,并通过 Batch API 执行任务。thinking token 从 102,779 降到 8,284,pass rate 的变化未超出运行噪声范围,成本约降 58%。
在客服 agent 基准的零售场景 tau2-bench retail 上,优化集中在提示缓存和显式 breakpoint,成本降 73%,pass rate 持平。
在文档问答基准 OfficeQA Pro 上,加入批处理和文档缓存后,成本从 $136.20 降到 $64.87,约降 52%。
在编码 agent 基准 SWE-bench Verified 上,原配置已经正确使用缓存,节省来自将 effort 调到 medium,并把 agent 输出限制为几句简短的话。每项任务的中位步数从 29 降到 17,prompt token 从 75.2M 降到 33.7M,成本约降 55%。
| 基准 | 降本手段 | 成本变化 | 绝对成本 | 分数变化 |
|---|---|---|---|---|
| tau2-bench retail | 缓存 + 显式断点 | −72.7% | $25.88 → $7.05 | +1.3pp(95% CI −4.6 到 +7.2) |
| LegalBench | 共享前缀缓存 + low + Batch API | −57.6% | $13.67 → $5.79 | −0.3pp(95% CI −0.8 到 +0.3) |
| OfficeQA Pro | 批处理 + 文档缓存 | −52.4% | $136.20 → $64.87 | +4.5pp(95% CI −2.1 到 +11.1) |
| SWE-bench Verified | medium + 限制输出 | −55.1% | $39.74 → $17.86 | −3.3pp(95% CI −9.6 到 +3.1) |
成本与分数变化取自图 7;「降本手段」取自正文。起点均为 Sonnet 5。pp 表示百分点,95% CI 是分数变化的统计不确定范围。
四个基准的分数变化置信区间都跨零。成本虽都下降,节省的来源却不同:tau2-bench 靠缓存,SWE-bench Verified 的缓存原本已正确,改的是 effort 和输出长度。cost-optimize 先检查应用的实际开销,再选择优化手段。
缓存:查未命中原因,把握更新时机
缓存未命中时,Claude Console 可以显示原因;缓存诊断 API 则能指出相邻两次请求从哪个位置开始不同。博客在缓存机制之外,还给出了请求排布、预热和更新时机的具体做法。机制详见站内《从零自建 agent harness》。
请求中,工具定义和系统提示等稳定内容放在前面,持续增长的对话放在后面。为保持前缀不变,博客给出了两项配套做法:不常用的工具标记为 defer_loading,保留声明,但等 Claude 通过工具搜索找到后再加入对话;系统指令需要更新时,以新消息追加,不改原有系统提示。
换模型或调整 effort 的时机,也会影响缓存开销。博客建议等到缓存本来就要重写时再改,例如对长对话做 compaction(压缩重写)时。对话持续增长后,缓存断点也要后移;Claude Platform 的自动缓存可以将断点放在最后一个可缓存块上。
预热则可以提前完成:发送带显式缓存断点的 max_tokens: 0 请求,只处理提示词、写入缓存,不生成内容。第一个真实请求就能直接读取已准备好的缓存。
等待工具或子 agent 返回的时间,也计入缓存的有效期。默认的 5 分钟 TTL 从请求发出时开始计时;工具调用或子 agent 请求若耗时超过 5 分钟,父级缓存可能在结果返回前过期。下一轮便要重新写入缓存,价格为正常输入价的 1.25 倍,1 小时档则为 2 倍。针对这类长时间等待,博客建议考虑为前缀设置 1 小时 TTL。
通常,修改 effort 或 thinking 设置会改变缓存前缀。Opus 5 与 Fable 5.1 是例外,可以在不中断缓存的情况下调整 effort。fork 出的子 agent 只有在前缀字节、模型和 effort 全部相同时,才能共享父级缓存。
口径与出处
全部实测结果都来自 Anthropic 自测,并非第三方复现。博客未附运行次数与噪声带;图 7 单独给出了四个基准分数变化的 95% 置信区间,均跨零。以下列出博客正文、图表与前篇文档页之间需要区分的口径。
| 口径项 | 说明 |
|---|---|
| 与文档页数字的一处差异 | 图 3 里 Opus 4.8 旧提示词与 Opus 5 未审计两点的准确率分别是 89.4% 与 91.7%;文档页《Optimizing for cost and intelligence》(站内前篇的表格)写的是 89.5% 与 91.8%,差 0.1 点。成本 2.52¢ / 3.43¢ / 2.93¢ 两处一致。本篇以博客图为准,不改前篇。图内标注的「审计一步 −0.49¢」与正文的「成本降 14.6%」各归其位,不做算术换算。 |
| 训练集与测试集 | hillclimb 那组的 74.4% 是训练集起始读数(图 6 标注),78.6% 是 14 张 held-out 工单上原配置的读数(正文)。98.9% 是训练集、90.5% 是 held-out。 |
| 未标注数值的图表点 | 图 4 的 med / high / xhigh 三点、图 5 全部点、图 6 起点的成本,图上都没有数字;重画仅保留曲线形态,不补写数值。 |
| 正文与图的口径并列 | FrontierCode Diamond 那组正文写「+19 点」,图 4 标 +19.4 点;四个基准正文写约 58% / 73% / 约 52% / 约 55%,图 7 标 −57.6% / −72.7% / −52.4% / −55.1%。 |
| 缓存读价 | 博客只写缓存读「按完整输入价的一部分计费」,未给倍率;0.1 倍是文档页的数字,不属本篇。CursorBench 那组给的 $0.25 对 $1.00 每百万 token 是两个模型的缓存读牌价。 |
| 评测名称按博客原文 | customer support benchmark(本篇写「客服基准」)、FrontierCode Diamond(the hardest 50 tasks)、Humanity's Last Exam(without tools)、CursorBench 3.2、LegalBench、tau2-bench retail、OfficeQA Pro、SWE-bench Verified。博客未说明 hillclimb 所用客服基准与 prompt-audit 实验所用是否同一份数据集,本篇写「同样在一个客服基准上」指名称相同。三个基准的来路(Cognition / Cursor / Center for AI Safety 与 Scale AI)取自各自官网,不是博客内容。 |
| 作者身份 | Lance Martin 的身份取自 ai.engineer 讲者页(Anthropic member of technical staff,负责 Claude Platform 与 Claude Code 里的 claude-api skill,此前是 LangChain 早期工程师),不是博客正文内容。 |