Agent 用什么模型:工具调用、上下文膨胀与账单

这里所有文本模型都支持工具调用。跑 40 轮循环时真正拉开差距的是上下文余量和输入单价——每一轮都会把整段对话重新计费一次。

工具调用是标配,差别在别处

选 agent 模型时,「能不能调工具」根本不是个问题。目录里每一个文本模型都带 tools 能力,12 个 Claude、7 个文本类 OpenAI、3 个文本类 Grok、5 个 Gemini,一个不落。

真要说区别,只有两个 id 是「text + tools」到此为止——Grok Composer 2.5 Fast 和 Claude Haiku 4.5 Stable;其余文本 id 都额外带 extended thinking。至于工具调用之间要不要让模型多想一步,取决于每一步需要多少规划,而想这一步无论如何都要花输出 token。

图像和视频那几个 id 不在讨论范围内:gpt-image-2、grok-imagine-image、grok-imagine-image-quality、grok-imagine-video-1.5 的能力字段里只有 image 或 video,它们是 agent 调用的工具,不是驱动 agent 的模型。

工具调用循环的一轮:给模型一个工具,模型返回一次调用。
export TOKEN_SHARE_KEY="<your-pool-api-key>"

curl -sS https://token-share.app/v1/chat/completions \
  -H "Authorization: Bearer $TOKEN_SHARE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "grok-4.6",
    "messages": [
      {"role": "user", "content": "What files changed in the last commit?"}
    ],
    "tools": [{
      "type": "function",
      "function": {
        "name": "run_shell",
        "description": "Run a read-only shell command in the repo",
        "parameters": {
          "type": "object",
          "properties": {"command": {"type": "string"}},
          "required": ["command"]
        }
      }
    }]
  }' | jq '.choices[0].message.tool_calls, .usage'

每一轮都要为整段对话重新付一次钱

很多人是按聊天的直觉估 agent 成本的,于是估错。agent 的每一轮都要把此前的全部内容再发一遍——system prompt、工具 schema、之前每一次调用和每一个工具返回,跑到第 40 轮,等于把第 1 到 39 轮又付了一次钱。花销不随轮数线性增长,随累计长度增长。

算个具体的:初始 prompt 5000 token,每轮增加 3000 token(这已经是很克制的工具返回了)。到第 40 轮,单次请求带着约 12.2 万 token,而整个 40 轮累计计费约 254 万输入 token。折算下来,Grok 4.6(0.2 倍,消费者输入价 $0.40/M)约 1.02 美元,Claude Opus 5(0.1 倍,$0.50/M)约 1.27 美元,Gemini 3 Flash(0.1 倍,$0.050/M)约 0.13 美元。

输出侧几乎可以忽略:40 轮每轮 500 token 合计 2 万 token,Grok 4.6 上 0.024 美元,Claude Opus 5 上 0.05 美元。真正会在账单上炸开的,永远是输入。

上下文余量决定循环撞墙的位置

同一条增长曲线也决定了 agent 能跑多久才把窗口塞满。还是初始 5000、每轮 3000 token:20 万窗口(Claude Sonnet 4.6、Grok Composer 2.5 Fast、Claude Haiku 4.5 Stable)第 66 轮塞满;50 万窗口(Grok 4.6 / 4.5)第 166 轮;100 万窗口(100 万上下文的 Claude、全部 Gemini)第 332 轮。

窗口最大的是 GPT 6 Astra Stable,105 万 token,但它是 0.2 倍的 stable 通道而非 0.1 倍:消费者输入价 $2.00/M,而 Claude Opus 5 是 $0.50/M(Astra 官方价 $10/M,Opus 官方价 $5/M)。余量和倍率是两个互相独立的维度,都要在模型页上各看一眼。

撞墙不是唯一该压缩对话的理由。既然每轮都要为之前的内容重新付费,裁掉过时的工具输出就同时买到两件事:跑得更久,花得更少。每十轮自我总结一次的循环,两条曲线一起改善。

接口形态,以及怎么比两个候选

agent 在这里面对三种请求形态。Grok 和 Gemini 走 /v1/chat/completions,用 Authorization: Bearer。OpenAI 走 /v1/responses,同样的头。Claude——以及按 Anthropic 形态路由的 GPT 6 Astra Stable——走 /v1/messages,用 x-api-key 加 anthropic-version: 2023-06-01。三种形态的工具定义写法不同,所以针对某一种写的 harness 换形态时要加一层适配。

同一形态内换 id 只改一个字段。这让诚实的对比变得很便宜:同一批任务跑两个候选,记录「每完成一个任务花了多少 token」而不是「每轮多少 token」,再乘上各自的消费者单价。

「每完成一个任务的 token 数」才是关键数字,而这恰恰是价格表给不了的。一个 12 轮解决问题的 $0.50/M 模型,完全可能赢过一个瞎折腾 60 轮的 $0.050/M 模型——哪个是哪个,只有你自己的任务清单能告诉你。

常见问题

agent 需要 extended thinking 吗?
除了 Grok Composer 2.5 Fast 和 Claude Haiku 4.5 Stable 这两个「只有 text + tools」的 id,其他文本模型都支持。thinking 是在两次工具调用之间花输出 token 做规划:下一步走错代价很大时值回票价,下一步显而易见时就是白花钱。同一批任务开关各跑一遍,比「每完成一个任务的 token 数」。
为什么 agent 的实际花费是我按单轮价格估算的十倍?
因为按单轮估算默认每轮只发新消息,实际上每轮发的是整段对话。40 轮、每轮增长 3000 token,累计计费约 250 万输入 token,而不是最后那次请求携带的 12.2 万。要估的是累计量,不是最后一次请求的大小。
stable-* 通道能让 agent 更稳吗?
stable-* 是同一个上游模型的专用通道,走我们自己的 key 而不是共享账号池,并且不参与池内故障转移。它更贵:Claude 上是 0.4 倍对 0.1 倍,GPT 6 Astra Stable 是 0.2 倍。两条路径都没有公布可用率数字,所以把它当成路由选择,而不是可靠性评级。