不一定。Flash 的单次价格更低,不等于一个任务的最终成本一定更低。我让 GLM-5.3 和 GLM-5.3 Flash 编写同样的代码,各运行 9 次。Flash 的模型账单低约 12.7 倍,严格交付通过 8/9,高于完整模型的 6/9;但它的本批次平均响应时间约为 28.3 秒,完整模型约为 15.1 秒。
成本、交付通过率与等待时间指向了不同方向。将失败答案里的代码块提取出来并重新测试后,双方又都变成了 9/9。代码没有输,先失效的是输出契约。一次任务通过测试、完成交付所需的总成本,才是有效的比较口径。

这组实验改变了模型路由的判断方式。路由开关不该是模型名,而该是测试是否通过。
实验设计与反常结果
起因是 Together AI 的一组 DeepSWE 对比。它在约 900 次代码任务运行中发现,GLM-5.3 的单次成功率更高,但 Flash 的平均成本约低 17 倍;如果先跑 Flash,测试失败后再升级,成本与成功率可以落在两者之间。
这项结果值得验证,但服务商跑分不能直接决定生产路由。我从自己的股票项目中抽出三类常见模块,分别是公告去重指纹、网络重试策略,以及带并发与启动间隔限制的请求队列。它们都有清楚的输入输出,也都能用确定性断言验收。
两款模型使用同一服务商、同一提示词,关闭工具和代码库上下文。每个任务对每款模型重复 3 次,共 18 次真实调用。模型必须只返回可运行的 JavaScript 模块,不得带 Markdown 围栏、解释或测试代码。
为了让评分口径可以复核,两款模型都收到以下相同的交付约束。
输出必须是完整、可运行的 JavaScript ES module;
不要 Markdown 围栏,不要解释,不要测试代码;
只能使用 Node.js 内置模块。
评分脚本关闭工具、扩展、技能和上下文文件,将每条回答保存为独立模块后导入并运行断言。脚本只做首尾空白清理,并容忍“整条回答只有一个代码围栏”这一种外壳;其余混合输出会原样保留。本批次四条混合输出都在导入阶段失败。18 条记录均保存了任务、模型、轮次、用量、费用、耗时和导入错误;四条严格失败记录再提取首个代码块,使用原断言重测。
严格执行原始回答时,GLM-5.3 通过 6/9,Flash 通过 8/9。账单分别是 0.0404 美元与 0.0032 美元,Flash 约便宜 12.7 倍。
分任务展开后,完整模型的 3 次失败来自请求队列 2 次、网络重试 1 次;Flash 的 1 次失败来自公告指纹。测试并非只看“能否运行”。指纹任务检查 URL 规范化、不修改输入和 SHA-256 结果;重试任务检查调用次数、延迟序列与原错误对象;队列任务检查并发上限、启动间隔及失败后继续调度。

但它没有更快。本批次单次平均响应约为 15.1 秒与 28.3 秒,Flash 反而慢约 1.9 倍。这个延迟受服务商负载和并行调用影响,只能视为本次观测,不能当成模型固有速度。
单次价格与任务总成本的分界
按本批次账单计算,Flash 与完整模型的单次平均调用成本分别约为 0.000354 美元和 0.004492 美元。设 Flash 需要升级到完整模型的比例为 q,并假设每次失败只升级一次,那么只计算模型调用时,单任务期望成本为:
C = 0.000354 + q × 0.004492
它低于直接调用完整模型的条件是 q 小于约 92.1%。即使把本批次 Flash 的一次严格失败直接视为升级,估算成本也约为每任务 0.000853 美元,仍约低 5.3 倍。
这条分界线不是价格承诺。它使用本批次平均账单,并假设失败只触发一次升级;真实系统还要计入输出长度、重复尝试、测试算力、排队延迟与人工修复。若低价模型反复生成长答案、连续失败,或较慢响应影响关键链路,任务总成本完全可能反超。因此,“Flash 一定更便宜”的答案是否定的;能否更便宜取决于失败率与升级规则是否被测量。
输出契约与功能正确性的分离
我逐一查看 4 次严格失败。模型有时把正确代码包进 Markdown 围栏,有时在代码前后补解释,最严重的一次还夹带了 shell 命令式文本。脚本把整段回答保存为 .mjs 后,Node.js 自然无法导入。
其中一条 Flash 原始回答先输出了两行 shell 记录,随后才给出代码块。
$ ls
$ cat fingerprint.mjs
这两行与函数实现无关,却足以让整个模块在导入前失败。
随后只进行一个机械动作,即提取回答中的第一个代码块,不修改一行代码,再运行原来的断言。GLM-5.3 从 6/9 变成 9/9,Flash 从 8/9 变成 9/9。

这不是无关紧要的格式问题。在聊天窗口里,多一句解释只是啰嗦;在 Coding Agent 里,输出就是接口。接口多一个围栏,后续写文件、编译和测试都会中断。
因此评估代码模型时,至少要拆开两种失败。功能失败说明代码行为不对;契约失败说明答案不能直接进入自动化流水线。前者可能需要更强模型,后者往往只需要解析器、结构化输出或一次受控修复。
如果把两者混成一个通过率,团队很容易为格式问题升级到昂贵模型,也可能把一次解析成功误判成模型推理更强。
由测试驱动的分级路由
更实用的路由可以先让低价模型尝试,再逐层验收,无需预先规定“复杂任务一律用大模型”。
第一层检查输出契约。能否提取唯一代码块,是否出现解释文本,文件能否被解析。第二层运行确定性测试,包括类型检查、单元测试、lint 与项目特有的不变量。两层都通过,直接交付;格式失败,先机械清洗并重测;功能失败,才升级到完整模型。若失败来自上下文或工具不足,应先补齐输入;同一断言仍失败,再交给工程师。
机械提取并不自动等于安全。解析器应只接受唯一且语言匹配的代码块,拒绝多代码块和可疑命令;测试也只能证明已经覆盖的行为。若核心不变量没有断言,即使得到 9/9,也不能直接进入生产环境。

这个顺序还能让每次升级都有证据。系统可以记录哪条断言拒绝了结果、升级花了多少钱、强模型是否真正修复。积累一段时间后,路由规则可以按任务类型校准,而不是凭“这个模型应该更聪明”进行猜测。
十八次调用不足以判定胜负
这不是模型排行榜。实验只有 3 类隔离模块,每款模型各 9 次,没有完整仓库上下文,也没有工具调用。18 次样本足以暴露一个工程问题,不足以证明 Flash 在真实项目中普遍更强。
这组实验支持的工程判断是,模型选择与结果验收必须分开。价格可以决定谁先运行,测试决定结果能否交付,失败证据决定是否升级。
最强模型可以继续处理难题,但不必从第一步包办所有任务。实施低价优先路由至少需要三个前提,即可解析的输出契约、覆盖核心不变量的确定性测试,以及完整的失败日志。缺少任何一项,节省的模型费用都可能变成排查成本。
参考资料
Together AI,GLM-5.3 vs. GLM-5.3-Flash on DeepSWE
https://www.together.ai/blog/glm-5-3-vs-glm-5-3-flash-on-deepswe-cost-coding-and-routing
