作者发现 Agent 循环中 Token 重复发送才是决定成本的核心因素,而非模型单价。DeepSeek V4 Flash 与 GPT-4o 存在约 28 倍价差,但循环重发会快速放大实际账单。
上个月我上线了一个客服分流 Agent。它读取传入的工单,搜索文档,拟定回复,如果找不到答案就升级给人工,并附上它尝试过的摘要。每个工单 6 次 LLM 往返,没什么花哨的。
真正让我意外的是加上 Token 日志并认真看账单的时候。我原本以为成本故事讲的是模型价格:DeepSeek V4 Flash 输入 0.35 美元/百万 Token,GPT-4o 是 10 美元。价签差距约 28 倍,这是实打实的。但真正决定你 Agent 账单的不是这个:而是同一批 Token 被循环发送了多少次。没人上线前会建模这个,而它叠加得非常快。
聊天补全 API 是无状态的:Agent 循环的每一步都要把到目前为止的整个对话重新发送给模型。我的分流 Agent 每个工单大约走六步:
拉取相关文档(搜索 + 重排)
用指南检查草稿
第一步发送约 2000 Token。第五步发送的还是那约 2000 Token,外加期间 Agent 产生的所有内容——分类结果、文档、草稿、工具调用 JSON。每一步都按全额输入价格计费。Token 数量几乎随步数线性增长,而这种增长纯属开销:模型在重复阅读自己已经写过的东西。
这就是 Agent 的隐藏成本。不是每个 Token 的价格,而是你为同一批 Token 反复付费。
首先,列出我对比的价格(每百万 Token,截止发稿时):
在真实的生产流量一周里,每个工单的平均情况如下:每步约 2000 输入 + 300 输出 Token,六步,外加一条约 500 Token 的最终回复。每个工单合计约 12.2K 输入和 2.3K 输出。
这是我上线前就该写的脚本:
STEPS = 6
IN_PER_STEP = 2_000
OUT_PER_STEP = 300
FINAL_OUT = 500
def agent_cost(p_in, p_out):
total_in = 200 + STEPS * IN_PER_STEP # original ticket + re-sent history
total_out = STEPS * OUT_PER_STEP + FINAL_OUT
return (total_in * p_in + total_out * p_out) / 1_000_000
for name, p_in, p_out in [
("DeepSeek V4 Flash", 0.35, 1.10),
("Qwen3-235B-A22B", 1.60, 6.40),
("GLM-5-130B", 1.20, 4.80),
("GPT-4o", 10.00, 30.00),
]:
print(f"{name:18} ${agent_cost(p_in, p_out):.4f} per ticket")
DeepSeek V4 Flash $0.0068 per ticket
Qwen3-235B-A22B $0.0342 per ticket
GLM-5-130B $0.0257 per ticket
GPT-4o $0.1910 per ticket
单看每个工单,感觉都是零钱——区区几分钱。把它放大到每天 1000 个工单,问题的面貌就变了:
(30 天月份,不扣周末。你的里程会随步数变化——这就是重点。)
上面的数学如果不去测量就毫无用处。我代码库里每个包装器都针对价格表记录每步用量,这样"每个工单成本"就会出现在仪表板上,而不是等到账单来了才知道:
PRICES = {
"deepseek-v4-flash": (0.35, 1.10),
"qwen3-235b-a22b": (1.60, 6.40),
"glm-5-130b": (1.20, 4.80),
"gpt-4o": (10.00, 30.00),
}
def log_step(ledger, model, usage):
p_in, p_out = PRICES[model]
cost = (usage.prompt_tokens * p_in + usage.completion_tokens * p_out) / 1_000_000
ledger.append(cost)
return sum(ledger) # running cost for this ticket
第一次跑的时候,账本告诉了我价格表里没有的东西:第四步(指南检查)在 DeepSeek V4 Flash 上几乎免费,但在 GPT-4o 上仍然要花真金白银——而且那一步纯属冗余。我把它砍了,Token 数量少了六分之一,质量毫无变化。先测量,再优化。
我不想过度吹捧。我让同一个 Agent 在 GPT-4o 上跑了一周,它在价格表无法衡量的地方挣回了溢价:
工具调用可靠性。GPT-4o 首次尝试就能生成格式正确的工具调用,次数比 DeepSeek V4 Flash 更多。廉价模型每次格式错误的调用都意味着一次重试——而重试会重新发送整段历史。在处理混乱 JSON 工作负载时,这吃掉了相当一部分价格差距。
复杂推理。对于真正需要多步推导的升级工单,GPT-4o 的答案明显更稳健。我仍然会把它用在困难的 10% 上——只是不再用于简单的 90%。
吞吐量。GPT-4o 流速约 55 tok/s,而 DeepSeek V4 Flash 约 48 tok/s。对于面向用户的聊天,这是微小但真实的差异;对于批处理任务则完全无关。
真实的结论:对于高容量、结构化的工作,廉价模型在成本上以一个数量级胜出,而且它们的失败模式可以用代码修复(验证、重试、Schema 检查)。对于开放式推理,坏答案代价高昂的场景,GPT-4o 仍然是更安全的默认选择。正确的答案通常是两者兼用,放在不同路径上。
精简历史。四步之前的工具结果很少重要。我保留最近两轮加其余部分的摘要。每个工单的 Token 数量下降约 40%。
按难度分流。先用廉价模型做分类,只在它力不从心时才升级到贵的。一个只花几分钱的分类器能省下大量 0.19 美元的调用。
缓存稳定前缀。系统提示词 + 指南 + 文档标题从不变化。三家中国提供商对缓存命中的输入 Token 都打 8 折(DeepSeek V4 Flash:0.35 → 0.07 美元/百万),所以我把所有动态内容——日期、工单号、请求 ID——放在提示词末尾。稳定块里一个字改动就会悄悄破坏缓存,所以我不轻易编辑它。
这事最烦人的从来不是代码——而是 DeepSeek、Qwen、GLM 各有各的控制台、各有各的账单、各有各的速率限制,所以"跨模型测量"工作流意味着要同时盯着四个仪表板。我把所有流量都路由到 tokencnn.com:一个统一兼容 OpenAI 的端点,deepseek-v4-flash、qwen3-235b-a22b、glm-5-130b 都挂在一个 API 密钥后面,A/B 成本运行切换模型只需改一行("model": "qwen3-235b-a22b")。只需邮箱注册——无需中国手机号,无需微信——1 美元免费额度足够在你自己的流量上跑这个账本:
curl https://api.tokencnn.com/v1/chat/completions \
-H "Authorization: Bearer ***" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-flash",
"messages": [
{"role": "system", "content": "You are a support triage agent."},
{"role": "user", "content": "Classify this ticket: ..."}
]
}'
单工单成本是个陷阱:每个都很小,所以没人去算这道数学——然后账单就来了。Agent 循环通过每步重新发送历史来倍增 Token,这几乎机械地将 28 倍的模型价格差距变成了 28 倍的账单差距。记录 Token、精简历史、按难度分流,让账本——而不是价签——来决定哪个模型跑哪一步。
你上线过 Agent 并发现真正的成本驱动因素是你没有建模过的地方吗?我真的很想听听 Token 账本教会了你什么。