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.1 倍,消费者输入价 $0.20/M)约 0.51 美元,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.012 美元,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 模型——哪个是哪个,只有你自己的任务清单能告诉你。