账单结构剖析
以一次 $0.19 的 agent 任务为样本,分解 system prompt、tool descriptions、history、tool results、output 五类来源的成本占比,并对比同任务在不同模型上的成本变化。
关于数据:本页所有 token 数与金额为合成示例(synthetic example),按 Claude Sonnet 4.6 公开单价(input $3/MTok、cache write $3.75/MTok、cache read $0.30/MTok、output $15/MTok)与一个 12 步典型任务的量级推算得出。用途为演示账单结构——绝对值不可作为报价依据。Agent 产品真实任务的分项占比与下表接近,绝对值因任务复杂度变化在 3-5 倍区间。
任务场景
样本任务:用户请求 agent 整理 Gmail 收件箱,将最近 20 封邮件按所属项目分类。Agent 在 12 步内完成——4 次 extract 读取邮件元数据,8 次通过浏览器自动化工具的 click 应用标签。
选取 12 步作为样本的依据:该长度落在中等任务区间。1-2 步的极短任务系统 prompt 占比异常偏高(启动开销未被摊薄),数十步的长任务 history 占比显著上升(累计基数增大)。本节结论对中等长度任务的代表性最强。
分项成本表
每一行表示一类 token 的累计用量与对应成本:
| 来源 | Token 用量 | 单价 | 成本 | 占比 |
|---|---|---|---|---|
| System prompt(cache 命中) | 2.5K 写入 + 27.5K 命中 | 写 $3.75 / 读 $0.30 | $0.018 | 9% |
| Tool descriptions(cache 命中) | 1.2K 写入 + 13.2K 命中 | 写 $3.75 / 读 $0.30 | $0.008 | 4% |
| Conversation history(未 cache) | 26.4K | $3.00 / MTok | $0.079 | 41% |
| Tool results(未 cache) | 14.4K | $3.00 / MTok | $0.043 | 22% |
| Model output | 3.0K | $15 / MTok | $0.045 | 23% |
| Sandbox + 存储 | 1 session、~1MB R2 | 集群分摊 | ~$0.001 | <1% |
| 合计 | — | — | $0.194 | 100% |
表中”cache 命中”指 Anthropic Prompt Caching 在重复发送相同前缀时的命中机制。System prompt 与 tool descriptions 是每步重复发送的静态前缀,首次写入 cache 后,后续 11 步全部命中。
三项核心观察
History 是最大成本项
41% 的成本用于重复发送历史对话。Agent 每执行一步,前序所有步骤的 user message、assistant message、tool result 均作为 input 重新发送。12 步累计后,history input 达到 26.4K——约为 model output 的 9 倍、system prompt 的 10 倍。
累计成本随步骤数 O(n²) 增长:第 N 步需重发前 N-1 步全部历史,总和为 1 + 2 + ... + (n-1)。几乎所有成熟 agent 产品都有 prompt compaction 这一独立机制(参考实现:compaction)——未启用历史压缩时,账单按任务长度的平方放大。
静态前缀的 cache 命中收益显著
System prompt 部分若未启用 cache,理论成本为 $3 × 30K / 1M = $0.09;启用 cache 后实际成本 $0.018——节省约 80%。Tool descriptions 同理。
prompt-system 将所有每步重复的内容前置即基于此考量,使 Anthropic / OpenAI 的 prompt cache 从第二步开始命中。Cache 命中率是连续变量而非二值开关:从 60% 提升至 80% 的节省幅度通常大于手动缩减 prompt 的节省幅度,因为该百分比作用于整段静态前缀,而手动缩减仅能减少局部内容。
Output 单价为 input 的 5 倍
$15 / $3 = 5。良好的 agent 提示设计因此倾向于减少推理输出、增加工具调用——降低长篇分析,提高直接 tool_call 比例;工具返回精炼数据而非由模型复述。
Agent 产品工具的常见设计模式都基于该原则——browser 工具 以短 uid 替代长 CSS selector、extract 默认返回 markdown 而非 raw HTML、read_file 按 page 截断而非完整传回模型。每项设计在压缩 input 的同时间接压缩 output——模型可见信息减少,复述内容相应减少。
同任务在不同模型上的成本对比
成本表中仅存在一项乘法调整:模型切换。其他优化均为加法调整(减少 token、扩大 cache 命中范围),切换模型直接按比例缩放整张表。
| 模型 | Input | Cache write | Cache read | Output | 本任务估算 |
|---|---|---|---|---|---|
| Claude Haiku 4.5 | $1.00 | $1.25 | $0.10 | $5.00 | ~$0.065 |
| Claude Sonnet 4.6 | $3.00 | $3.75 | $0.30 | $15.00 | $0.194 |
| Claude Opus 4.7 | $15.00 | $18.75 | $1.50 | $75.00 | ~$0.970 |
估算假设三个模型 token 用量一致。实际场景中,小模型完成同任务通常需要更多步骤(推理质量较弱、绕路较多),因此 Haiku 实际成本接近 Sonnet 的 1/2 而非 1/3;Opus 反之——单次推理更精确、步骤数更少,单步费用大幅上升。
Tier 系统的本质即模型预算的分层:Lite 默认配置 Haiku,覆盖常规任务;Ultra 默认配置 Opus,预留给需要深度推理的复杂场景。将 Haiku 可处理的任务路由至 Opus,账单近似乘以 15。
后续阅读
- 成本上限设置与 ROI 测算:controls-and-roi
- History 失控机制与压缩策略实现:compaction、memory-system
- 实际环境的真实数据:Grafana 的
agent_token_usage面板(operations/dashboards)