新人 免费注册,送 10 次调用,最高 $1,无需绑卡。

Claude Code 子代理费用:一次 $0.17 运行的钱花在哪

通过网关完成一次 Claude Code 运行,并按三个代理分别拆解调用费用:三个代理各自的首次调用合计占总账单的 72%。本次总费用为 $0.17,首次调用合计约 $0.1224,其余调用占 28%,约 $0.0476。网关接入配置只需设置两个环境变量。

我们的推荐

实时价格
模型 结论 价格
Claude Sonnet 5.5 一次 Claude Code 运行包含 11 次调用和两个子代理,冷缓存时费用为 $0.1728,半分钟后为 $0.0812。缓存写入占冷缓存运行费用的 77%。 演示中的模型 低至 $2/百万
目录
  1. 如何让 Claude Code 通过网关访问模型?
  2. 不做其他配置,网关能看到什么?
  3. 这 $0.17 花在哪了?
  4. 第二次运行要花多少钱?
  5. Claude Code 自己显示的费用和账单一致吗?
  6. 如何按开发者或仓库拆分费用?
  7. 如何跨会话查看代理费用?
  8. 这套配置不能提供什么?
  9. 常见问题
  10. 一次 Claude Code 会话要花多少钱?
  11. 如何追踪团队的 Claude Code 费用?
  12. Claude Code 子代理会增加费用吗?
  13. Claude Code 打印的费用准确吗?
  14. CLAUDE_CODE_GATEWAY_HINT_HEADERS 有什么作用?
  15. 延伸阅读

Claude Code 会告诉你一次会话花了多少钱,但不会告诉你钱花在会话的哪个环节。团队开始使用后,账单属于哪个仓库、哪个开发者,也无从判断。让 Claude Code 通过网关访问模型就能解决这两个问题,不需要插件或封装程序。网关是 Claude Code 与模型提供商之间的代理,本来就能看到每个请求;Claude Code 也已经在请求中附带了会话 ID 和代理 ID。本文通过 Synthorai 网关运行一个小任务,再查看费用明细:11 个请求共花费 $0.1728,三个代理各自的首次调用占了总费用的 72%。

TL;DR

  • 通过网关在 Claude Sonnet 5.5 上运行一次 Claude Code,使用两个子代理,费用为 $0.1728;半分钟后重复运行,费用为 $0.0812。
  • 首次运行中,缓存写入占费用的 77%,三个代理各自的首次调用占 72%。
  • 两个子代理占会话费用的 39%。
  • 两个环境变量就能让 Claude Code 通过网关访问模型,第三个变量用于标明各子代理的类型。

代码位于 github.com/synthorai-io/use-cases 的 coding-agent-spend/ 目录中。需要 Python 3.10 或更高版本,以及 2.1.280 或更高版本的 claude 命令,这是该模型的版本要求。

git clone https://github.com/synthorai-io/use-cases
cd use-cases
cp .env.example .env    # put your API key in it
cd coding-agent-spend
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python run.py --hints --label repo=shipping --label _user=dev_1

脚本会复制一个小型示例仓库,再启动 Claude Code;仓库中有一个测试未通过。网关地址和密钥只会设置在该进程的环境中,配置目录也是空的,因此不会读取或修改你现有的 Claude Code 配置。一次运行约需半分钟。脚本通过 --max-budget-usd 将单次运行费用限制为 $0.60;如果一次运行可能让累计费用超过 $2,脚本就不会启动它。

控制台中的一次会话:11 次调用,$0.1728,212k 输入 token,缓存命中率 74.9%,客户端显示为 Claude Code 2.1.296,标签为 _user dev_1 和 repo shipping;代理表中主对话费用为 $0.1053,Explore 子代理为 $0.0575,自定义子代理为 $0.0101

本文数据来自 2026 年 10 月 10 日的运行,使用 Claude Code 2.1.296 和 Claude Sonnet 5.5。

如何让 Claude Code 通过网关访问模型?

设置两个环境变量即可。Claude Code 使用 Anthropic 的 Messages API,网关在自己的地址上提供相同的 API:

export ANTHROPIC_BASE_URL="https://synthorai.io"   # no /v1: Claude Code adds /v1/messages itself
export ANTHROPIC_API_KEY="<your gateway key>"

其他配置不变。具体说明见 Claude Code 集成文档。设置后,每个会话的每次模型调用都会进入网关请求日志,并在控制台中分组显示。

不做其他配置,网关能看到什么?

网关能看到会话、会话中的 trace、客户端和各个子代理。Claude Code 的每个请求都带有自己的会话 ID,因此一次 claude 运行在控制台中对应一个会话,会话页面会将客户端显示为“Claude Code 2.1.296”。请求在控制台中还会显示 trace ID,所以会话页面也会列出所属的 trace:本次运行有两个,分别包含 6 次和 5 次调用。“Agents in this session”表格已经按代理拆分了调用,主对话和各个子代理各占一行。

子代理是 Claude Code 为完成任务中的一部分工作而启动的另一个代理,有独立的指令和上下文。示例任务要求使用两个子代理:内置的 Explore 子代理负责找到规则所在的位置,自定义的 test-runner 子代理负责运行测试。

默认情况下,子代理以 a05e467acd14b25e6 这样的 ID 显示。你能看出有两个子代理,却分不清各自负责什么。再加一个变量即可解决:

export CLAUDE_CODE_GATEWAY_HINT_HEADERS=1
默认配置设置提示变量后
会话、trace、客户端和费用有有
按 ID 单独列出子代理有有
子代理类型(Explore、custom)无有
每次调用的类别,以及调用前运行的工具无有

启用后,表格会按类型标识各个子代理。在 Logs 中打开一次调用,可以看到调用类别(subagent:Explore),以及“Tools before this call”列表,其中列出各工具的名称和运行耗时,例如 Read 7 ms。网关保存的是代理类型,而不是你给它起的名字,因此 test-runner 会显示为 custom。工具名称和运行耗时会被保存,工具读取或写入的内容不会。

这 $0.17 花在哪了?

费用分摊到三个代理上,大部分花在各自的首次调用。

代理调用次数输入 token缓存命中率费用
主对话6159k78.9%$0.1053
Explore 子代理347.5k64.7%$0.0575
custom 子代理(test-runner)25,32348.1%$0.0101
会话11212k74.9%$0.1728

两个子代理共花费 $0.0676,占会话费用的 39%,但它们负责的只是任务中最小的两项工作:在只有三个源文件的库中找到一条规则,以及运行五个测试。修复本身只改了一个字符,将 > 改为 >=。

原因可以从 Claude Code 在运行结束时打印的 token 数量中看出来:

claude-sonnet-5-5                20 in   158612 cache read   53058 cache write   2425 out  $0.1728

按该模型每百万 token 的价格计算(输入 $2、输出 $10、缓存读取 $0.10、缓存写入 $2.50),这四项的费用如下:

token 类型token 数量费用占比
缓存写入53,058$0.132677%
输出2,425$0.024314%
缓存读取158,612$0.01599%
未缓存的输入20$0.00000%

缓存写入占账单的 77%。首次发送某个 prompt 前缀时会写入缓存,费用是输入价格的 1.25 倍;后续请求读取该缓存,在这个模型上的价格只有输入价格的二十分之一。编码代理的 prompt 包含系统提示词和所有工具的定义,所以在你输入任何内容之前,它就已经很长了。这也使得代理的首次调用最贵。

每个代理都有自己的初始 prompt,因此都要支付首次调用的费用:

首次调用所属代理输入 token缓存命中率费用
主对话30.0k0%$0.0772
Explore 子代理14.9k0%$0.0391
custom 子代理2,5620%$0.0077

这三次调用共花费 $0.1240,占整次运行的 72%。之后的调用都很便宜:Explore 子代理的第二次和第三次调用有 94% 的输入来自缓存,费用分别为 $0.0052 和 $0.0132。

如果子代理能让主对话的上下文少装入大量读取内容,它的冷启动费用就值得支付。这也是 Explore 在真实代码库中的用途。如果一项工作只需要一两次调用,在主对话中完成就能省去一次缓存写入。这里使用的只是一个小仓库,调整工作方式之前,先看看你自己会话中的费用分布。

第二次运行要花多少钱?

如果启动时缓存还有效,费用大约只有一半。我们在半分钟后再次运行了相同任务。第二次同样发起了 11 次调用,但缓存读取占输入的比例从首次的 74.9% 升至 93.1%,费用从 $0.1728 降至 $0.0812。三个代理的首次调用分别有 82%、81% 和 71% 的输入来自缓存,因为它们的初始 prompt 已经在上一次运行中写入缓存。

Anthropic 缓存条目的默认有效期为五分钟,每次读取都会续期。开发者持续在同一个仓库中工作时,大部分调用按缓存已预热的费用计费。每小时执行一次的定时任务,则每次都要支付冷缓存费用。

Claude Code 自己显示的费用和账单一致吗?

在 2.1.296 上,两边精确到小数点后四位都一致:冷缓存为 $0.1728,热缓存为 $0.0812。是否一致取决于版本。Claude Code 使用自己的价格表计算费用。2.1.278 在 10 月 8 日仍能运行这个模型,但它使用的输入和输出价格分别为每百万 token $5 和 $25,实际账单则按 $2 和 $10 计费,因此显示的费用约为实际扣费的 2.7 倍。每次两边的 token 数量都完全一致。

这会影响一个设置:--max-budget-usd 在 Claude Code 自己计算的费用达到上限时停止运行。旧版本中,一次运行在 Claude Code 计数达到 $0.60 时被停止,实际账单只有这个数的约三分之一。升级后,对照会话页面核验一次费用。真正要依赖的费用上限,应设置在实际计费的位置,也就是 API key 的支出限额。

如何按开发者或仓库拆分费用?

给每个请求加上标签即可。Claude Code 已经支持通过环境变量发送自定义请求头:

export ANTHROPIC_CUSTOM_HEADERS='X-Synthorai-Metadata: {"repo":"shipping","_user":"dev_1"}'

X-Synthorai-Metadata 是网关用于接收标签的请求头。它接受一个扁平 JSON 对象,最多包含 10 个短字符串,其中 _user 用于标识请求是为谁发起的。示例中的 --label 参数设置的正是这个请求头,上面的会话页面也以标签形式显示了这两个值。

在各开发者的 shell 配置文件中设置个人标签,在项目加载环境变量的位置设置仓库标签,就能使用两个视图:

  • 在 Traces 的搜索框输入 metadata.repo = shipping,即可列出该仓库的会话。
  • 在 Analytics 的 Breakdown 标签页中,Cost by metadata 卡片按指定键的各个值汇总请求数和费用。选择 repo 可查看各仓库的账单,选择 _user 可查看各开发者的账单。

共用一个 key 也能做到这些。给每个开发者分配独立 key,同样能拆分账单,还能单独设置支出限额,代价是需要管理更多 key。

如何跨会话查看代理费用?

使用 Analytics 的 Breakdown 标签页中的 Cost by agent 卡片。会话页面只拆分单个会话,这张卡片则按代理类型汇总所选时间范围内的所有会话:

Cost by agent 卡片有两行:Explore 共 2 个,6 个请求,95.1k 输入 token,费用 $0.0871;custom 共 2 个,4 个请求,10.9k 输入 token,费用 $0.0170

Explore × 2 和 custom × 2 对应上面的冷缓存和热缓存运行,按代理类型汇总了两个会话。Share 列表示该行占所选时间范围内全部费用的比例,这个范围内还包含其他会话。不设置提示变量时,子代理不会上报类型,会统一计入名为“Sub-agent”的一行。你自己的程序如果像 追踪 LLM 代理 中的示例那样自行设置 X-Agent-Id,就会以发送的名称单独显示一行。

查看团队一周的会话数据,就能知道子代理在账单中占比高不高,以及费用主要来自哪种类型。

这套配置不能提供什么?

它不能提供 span ID、自定义代理名称、隔离运行的快捷方式,也不能展示实际工作内容。

  • 没有 span ID。Claude Code 2.1.296 的请求带有会话 ID 和 trace ID,但没有 span ID,因此调用的 span 字段显示为“not sent”。可用于分析的单位是会话、会话中的 trace 和代理。
  • 没有自定义代理名称。所有自定义子代理都显示为 custom。如果运行了多种自定义代理,需要区分它们,会话页面上的代理 ID 是唯一可用的标识。
  • 没有隔离运行的快捷方式。--bare 看起来可以让 Claude Code 不加载你自己的插件和设置,但它也会禁用子代理,整个会话只剩一个代理,无从拆分。示例改用空的 CLAUDE_CONFIG_DIR 来隔离运行。
  • 看不到实际工作内容。网关记录模型调用、工具名称和运行耗时,不记录文件内容、diff 或命令输出。

常见问题

一次 Claude Code 会话要花多少钱?

费用取决于模型、仓库大小、参与的代理数量,以及缓存是否已预热。本文通过 Claude Sonnet 5.5 运行了 11 个请求,使用两个子代理修复一个字符的 bug。冷缓存时费用为 $0.1728,半分钟后重复运行则为 $0.0812。

如何追踪团队的 Claude Code 费用?

通过 ANTHROPIC_BASE_URL 将所有开发者的 Claude Code 指向网关,再通过 ANTHROPIC_CUSTOM_HEADERS 添加开发者和仓库标签。网关就能按会话、标签值和代理类型汇总费用,无需在 Claude Code 中安装任何东西。

Claude Code 子代理会增加费用吗?

每个子代理都有自己的初始 prompt,也要单独支付缓存写入费用。在使用 Claude Sonnet 5.5 的示例中,Explore 子代理的首次调用花费 $0.0391,后两次分别为 $0.0052 和 $0.0132。两个子代理合计占会话费用的 39%。这笔费用换来的是独立上下文,适合大范围探索,不适合一次调用就能完成的工作。

Claude Code 打印的费用准确吗?

每个版本都核验一次。Claude Code 2.1.296 打印的 $0.1728 与实际账单一致。Claude Code 2.1.278 对 Claude Sonnet 5.5 使用的价格是每百万 token $5 和 $25,账单实际按 $2 和 $10 计费,因此打印的费用约为账单的 2.7 倍。两个版本的 token 数量都与账单一致。

CLAUDE_CODE_GATEWAY_HINT_HEADERS 有什么作用?

它让 Claude Code 在每个请求中多发送三类信息:代理类型、调用类别,以及调用前运行的工具名称和耗时。不设置它,网关仍能看到会话和各个子代理,但只能通过 ID 区分子代理。

延伸阅读

← 使用场景