一、发生了什么
9 月底,开源 CMS Wagtail 核心团队的 Thibaud Colas 在官方博客发复盘:整个 9 月,团队所有编码只用开源小模型 GLM 5.3 Flash。结果全月消耗约 20 亿 token,只有一半落在目标模型上——挑战形式上「失败」了,作者自评「task failed successfully」。复盘登上 Hacker News 首页,Simon Willison 也写了跟进(来源:Wagtail 官方博客、Simon Willison 博客、HN)。
二、技术拆解
上半月所有工作都跑在 GLM 5.3 Flash 上:核心代码、客户站点、UI 任务、文档、评测。100 万上下文加原生视觉输入,接得住长任务和截图。这半月账单:68 美元、约 4 度电、365 克碳排放(Wagtail 官方博客口径,未独立核验)。模型本身,作者的评价是「非常全面」。
真正值得琢磨的是另外 10 亿 token 去了哪,三条泄漏路径性质完全不同:
| 一夜「凭感觉写码」选错模型 | 4.5 亿 token | 150 美元 + 5 度电 | 治理失败 |
| 服务商容量不足,被迫换模型 | 10 亿的一部分 | 未披露 | 供应链波动 |
| 调研与跑基准 | 剩余部分 | 计划内开销 | 必要成本 |
第一条最扎心:团队为一个 MCP 服务器原型开了整夜无人值守的会话,结果挂在了同家族的「非 Flash 版」GLM 5.3 上——价格高一个量级,一夜烧掉 150 美元,是全月预算的 2.2 倍。作者自估:1/5 成本就能拿到同样结果(Wagtail 官方博客)。
第二条是开源模型的固有属性:权重开放 ≠ 随取随用,推理依赖第三方服务商。GLM 5.3 Flash 恰好卡在 Wagtail 任务「帕累托前沿」最前端,用的人多、服务商容量不及大厂,性能退化后临时切到 DeepSeek V4.1 Flash、Qwen 3.8 Flash。他们顺路跑的 14 模型基准也有价值:DeepSeek V4.1 Flash 以 95% 准确率、每任务 0.09 美元排第一(Wagtail 博客预览数据)——这种「每任务成本」记法,Holo4 那篇里 0.08 对 8 美元是同一套账。
第三条被多数人忽略,但恰恰最该学:账本单位错了。全月能耗约 35 度,是 10 度目标的 3.5 倍——这个缺口在 token 数里根本看不出来。
三、我的判断
这个案例的结论不是「开源小模型不行」——模型整个月表现都很好,失败的是花钱的治理结构。它暴露了三件教程不常写的事。
第一,Agent 会话是预算破坏力最强的调用形态。传统 API 一次请求一次结算,天然好控;Agent 无人值守会话能连跑几小时,中途还会换模型——选错的代价,可能只是模型名里少写一个后缀。Simon Willison 的结论:凡是 Agent 摸得到的计费服务,默认就该有硬性预算上限(来源:Simon Willison 博客)。
第二,单价便宜和总账便宜是两回事。之前写价格战那篇时说过,看价格表不能只看单价那行。看用量也不能只看 token,要把美元和电费记在旁边。便宜的单位乘上失控的用量,等于什么都没省。
第三,开源模型的供应链比想象中长一层。选型公式里除了能力、价格,还得写上「能稳定跑在几家服务商上、冗余够不够」。开源生态同档模型确实能互相顶上,但「没想到要切换」本身就是治理缺口。
四、对开发者的启示
三件事本周就能做:
预算硬顶的最小实现(先记账、再调用、超限即断):
import json, os
BUDGET_USD = 50.0 # 单会话硬顶,按上月账单 P95 设
LEDGER = "session_spend.jsonl"
def session_spend() –> float:
if not os.path.exists(LEDGER):
return 0.0
with open(LEDGER, encoding="utf-8") as f:
return sum(float(json.loads(line)["usd"]) for line in f if line.strip())
def guarded_call(prompt: str, model: str, est_tokens: int) –> str:
price = MODEL_PRICES[model] # 每 1M token 美元价
est = est_tokens * price / 1_000_000
if session_spend() + est > BUDGET_USD:
raise RuntimeError(f"预算熔断: {session_spend():.2f} / {BUDGET_USD} USD")
print(f"[model={model}] price={price} USD/1M tok")
resp = call_provider(prompt, model) # 内部指向 https://api.example.com/v1
with open(LEDGER, "a", encoding="utf-8") as f:
f.write(json.dumps({"model": model, "usd": resp.usage_cost}, ensure_ascii=False) + "\\n")
return resp.text
完整自查清单放在文末,可以直接拿走,周末对自己的 Agent 配置逐项过一遍。
三问三答
Q:flash 档模型是什么定位? 参数小、吞吐高、单价低的模型家族(GLM Flash、DeepSeek V4.1 Flash 这类)。Wagtail 的结论:扛得住 50% 以上的日常生产编码,长链路调研再留给更大的模型。
Q:一个会话怎么可能烧掉 150 美元? 无人值守长会话、上下文越滚越大、挂在了贵数倍的模型上,三个条件叠加。
Q:预算上限设多少合适? 取上月账单 P95 做单会话硬顶,「生产 / R&D」分开设月度总顶。
附:AI 支出预算自查清单(直接拿走)
P0 · 熔断(没有就是裸奔)
P1 · 记账(看不见就管不住)
P2 · 结构(把人为失误变难)
对照完 10 条,至少把第 1、2 条补上——那是 150 美元买来的教训。
结尾几句
昨天写欧洲开源的 Kolibri时说,78B 只激活 3.46B,是在参数端做省法;今天这篇是在用量端做省法。阶跃 Step 5 那篇的「激活参数定成本」两本账,到这里进化成「模型 × 用量 × 治理」三本账,三元压缩那篇也是同一方向。
这个专栏每天一篇 AI 解读,关注不迷路。
你们团队的 Agent 会话现在有支出硬顶吗?设的是告警还是熔断?
专注 AI 工程化实践与出海外贸技术
网硕互联帮助中心


评论前必须登录!
注册