Skip to content

模型选型与成本工程

前面的章节反复强调一个公式:Agent = Model + Harness。但"Model"这个位置从来不是一个单数——截至 2026 年中,任何一家主流供应商的产品线都至少分出旗舰、中档、轻量三档,价格相差一个数量级以上。把哪个步骤交给哪一档模型,是 harness 工程师自己做的决策,模型不会替你选。 这个决策同时落在三条轴上:能力(这一步做错了代价多大)、成本(这一步要跑多少次)、延迟(这一步挡不挡用户的路)。

这正是模型路由(model routing)要回答的问题。它和上下文工程是 harness 里仅有的两个"每转一圈都在花钱"的环节:上下文决定每次调用多大,路由决定每次调用多贵。

模型分层的经济学

先看账。截至 2026 年中,主流 API 的价格结构大致是(具体数字随版本更迭极快,以官方定价页为准——AnthropicOpenAIGoogle):

档位输入价格量级(每百万 token)输出价格量级典型用途
旗舰(Opus / GPT 旗舰级)约 5–15 美元约 25–75 美元复杂规划、疑难调试、终审
中档(Sonnet 级)约 2–3 美元约 10–15 美元日常编码与写作主力
轻量(Haiku / mini / Flash 级)约 0.1–1 美元约 0.8–5 美元分类、摘要、格式转换、监控

三个观察值得记住:

价差是真钱。 旗舰档与轻量档之间普遍有 10–30 倍的单价差。而 agent 负载的特点是输入极长、输出极短(上下文工程里引过 Manus 的数据:平均输入输出比约 100:1),所以输入价格才是 agent 账单的主体——路由决策主要看输入列。

能力差距不是均匀的。 小模型在分类、抽取、重写这类"有确定答案形状"的任务上,与旗舰的差距很小;差距集中在长链条推理、歧义消解、罕见错误恢复这些"没有地图"的地方。路由的全部利润空间,就藏在这种不均匀里。

延迟也分层,而且方向与价格相反。 小模型首 token 更快、生成速度更高。对挡在用户面前的交互步骤,"快但够用"常常优于"强但慢"——延迟本身就该是路由的一个输入维度,后面会展开。

同一个任务,不同的步骤配不同的模型

Agent 的一次任务不是均质的调用流,而是不同难度步骤的混合体。一个合理的默认分层:

text
┌────────────────── 一次 agent 任务里的模型分层 ──────────────────┐
│                                                                │
│  规划/重规划 ──────────► 旗舰模型      (次数少、错不起)        │
│  关键决策点(歧义消解、终审)──► 旗舰模型                         │
│  常规执行步骤 ──────────► 中档模型      (次数最多、账单主体)    │
│  工具结果分类/摘要 ─────► 轻量模型      (答案形状确定)          │
│  子 agent 的窄任务 ─────► 轻量/中档模型 (见 /components/subagents)│
│  上下文压缩(compaction)─► 专用/轻量模型(高频、机械)           │
│                                                                │
│  原则:贵的模型按"决策点"计费,便宜的模型按"吞吐"计费             │
└────────────────────────────────────────────────────────────────┘

这个分层在业界早有先例。规划与任务分解里讲过 Plan-and-Execute 的一个隐性红利:贵的模型做 planner,便宜的模型做 executor。Cognition 走得更远——在 Devin 案例里可以看到,他们专门训练了一个压缩模型来做 compaction,因为长时程 agent 每小时可能触发多次压缩,这是典型的"高频、机械、答案形状确定"的步骤,不值得让旗舰模型做。

一条反直觉的经验

分层最大的阻力不是技术,是心理:工程师总担心小模型"会不会差一点点"。正确的问题不是"小模型够不够好",而是**"这一步失败的代价是多少、能不能被下一步发现"**。能被下游步骤或验证器捕获的错误,用便宜模型试错;一步错、全盘输的决策点,才值得旗舰价。

三种路由模式

决定"这一步给谁"的机制,按智能程度分三档。

模式一:规则路由

最朴素也最常用:harness 代码里写死"规划用旗舰、执行用中档、分类用轻量",或者按任务的静态特征分派(issue 带 bug 标签走 A 模型,带 refactor 走 B 模型)。

  • 优点:零额外延迟,行为完全可预测、可审计;出问题能精确归因到某条规则。
  • 缺点:规则是拍脑袋的先验,不随真实分布调整;任务难度是连续谱,规则的边界必然切错一部分。

模式二:级联(cascade):先小后大,不行再升级

级联把"规则"换成了"置信度":每个请求先给最便宜的模型,由一个打分器(scorer)判断这次输出是否可信,可信就用,不可信就升级到下一档。

text
┌──────────────────── LLM 级联 ────────────────────┐
│                                                  │
│  请求 ──► 轻量模型 ──► 打分器 ──可信──► 直接返回   │
│              │            │                      │
│              │            └─不可信──► 中档模型 ──► │
│              │                         打分/升级  │
│              ▼                                   │
│         少数难题最终到达旗舰模型                    │
│                                                  │
│  期望成本 = Σ (到达该档的概率 × 该档单价)           │
└──────────────────────────────────────────────────┘

这条路线的理论奠基是 Stanford 的 FrugalGPT(arXiv:2305.05176,TMLR 2024 收录):在 HEADLINES 等分类任务上,级联能在匹配 GPT-4 精度的同时把成本降低最高 98%,或者在同成本下反超 GPT-4 约 4 个百分点。引用这个数字时必须带上脚注:这些是 2023 年模型代际上的窄分类任务,打分器廉价易训;"98%"不能外推到 agentic 编码这类开放任务上。级联真正的门槛是那个打分器——判断"这次输出可信吗"本身就是个难题,在开放式生成任务上,一个可靠的置信度估计器可能比省下的钱还贵。

模式三:学习型路由器

再进一步:不用人工规则也不用逐步升级,而是训练一个专门的路由模型,在请求进来时一次性预测"这个查询给弱模型能否得到满意答案",直接分派。LMSYS 的 RouteLLM(arXiv:2406.18665开源实现)是代表:用人类偏好数据训练路由器,在 MT-Bench 上报告了超过 85% 的成本削减而基本不掉质量,且路由器对测试时更换强弱模型有一定的迁移能力。

  • 优点:一次预测,没有级联的串行延迟;路由边界从数据里学出来,不靠拍脑袋。
  • 缺点:需要训练数据(偏好对、历史轨迹的质量标注);模型代际一换,路由器就要重训;而且路由器本身也是一个要被评测、被维护的组件。
维度规则路由级联学习型路由器
决策时机静态(代码/配置)逐请求,先小后大逐请求,一次分派
额外延迟高(串行多级)低(一次前向)
需要的资产工程师的先验可靠的打分器训练数据 + 重训管线
错误形态边界切错打分器漏判/误判分布漂移失效
适用步骤类型固定的 harness查询难度方差大的服务有历史轨迹数据的大流量产品

工业界参照:Devin Fusion 的动态切换

截至 2026 年中,公开的工程文献里对 agentic 场景模型路由最坦诚的一篇是 Cognition 的 Devin Fusion(细节见 Devin 案例)。它把上面三种模式揉成了一个生产级方案,两个设计值得抄:

  1. 不在任务开始时分派,而在会话中途动态切换。 轻量分类器持续判断当前阶段该升级还是降级——因为 agent 任务的难度分布在时间轴上,开始时的任务标签预测不了第 40 步的难度。
  2. 把切换安排在 compaction 时刻。 模型切换会使 KV cache 前缀全部失效(机制见上下文工程的 KV cache 一节,此处不重复),而压缩本来就要重建上下文——把切模型和压缩对齐,切换的缓存代价就降为零。这是"路由决策必须懂推理基础设施"的绝佳示范。

结果是 Fusion 以低约 35%(后续数据至 60%)的成本维持前沿级表现。Cognition 也直言教训:那些在 benchmark 上好看的通用路由方案,"写出的代码你不会合并"——agentic 路由的评测必须在真实任务轨迹上做,静态问答基准上的路由收益不代表 agent 场景的收益。

Fallback 与重试设计

路由的另一面是失败处理。模型 API 不是稳定的基础设施:限流、过载、超时、内容拒绝、上下文超长,每一类的正确响应都不同。把 fallback 写成裸的 try: call() except: retry() 是 agent 账单的常见出血点。

按错误类型分流:

错误性质正确响应
限流(429)/ 过载瞬时指数退避 + 抖动重试;或降级到中档模型/备用供应商
超时瞬时,但可能已产生计费有限次重试;注意长输出的调用超时要按流式首 token 计,不是总时长
上下文超长确定性,重试无用不要重试——先压缩或降级到长上下文档位,再重发
内容拒绝确定性重试无效;改写输入或换模型,并记录为可观测事件
输出格式错误模型侧原样重试偶发有效;更好的做法是把解析失败连同错误信息回灌给模型让它自修

三条纪律:

  • fallback 链要有终点。 旗舰 → 中档 → 备用供应商 → 明确报错,最多三到四跳。无限降级会把一个"疑难任务失败"悄悄变成"疑难任务被轻量模型答错"——后者危险得多,因为它不出错日志,只出错结果。
  • 重试要预算化。 给每次任务设重试次数与总成本上限,超限就走权限与人机协作里的升级路径,向人求助。没有成本上限的重试循环,在限流风暴里能把账单烧穿。
  • 切换即失效点。 任何"换模型/换供应商"的 fallback 都会改变系统行为(不同模型的工具调用风格、格式习惯都不同),切换事件必须写进轨迹日志——它是可观测性里最重要的异常信号之一。

一个隐蔽的账单黑洞

级联与 fallback 叠加时会出现"双倍计费":轻量模型答错 → 升级中档 → 超时 → 重试 → 再升级旗舰。同一次用户请求被四个模型各收一遍钱。设计上要让"升级"记住已有尝试(把轻量模型的输出作为上下文传给下一档,既省 token 又给它线索),并在任务级设成本熔断。

成本旋钮全景

路由是最显眼的成本杠杆,但不是唯一的。完整的旋钮清单,按杠杆大小排:

旋钮量级要点
模型路由一个数量级本文主题;账单主体是输入 token,盯住输入列
Prompt 缓存命中部分输入价降至约 1/10机制与纪律(前缀稳定、只追加)见上下文工程;路由侧的启示是别轻易换模型,换模型 = 缓存全废
批处理 API全线 5 折OpenAI Batch API 与 Anthropic Message Batches 均为 50% 折扣、24 小时返回;评测集、夜间批跑、离线数据标注这类"不要即时响应"的负载应一律走批量
上下文瘦身线性每省一个 token 都省一份输入钱;压缩、工具结果清理、just-in-time 检索都是这里
max_tokens 纪律防失控给每步设输出上限,防模型陷入长篇独白;对"只返回 JSON"的步骤压到最小
结构化输出间接严格的 schema 约束减少重试次数,省的是 fallback 的钱

旋钮之间的相互作用

这些旋钮不是独立的。缓存纪律约束路由(切模型时机要对齐压缩点);批处理和路由叠加(批量任务更应该用便宜模型,因为没有即时性压力,可以承受级联的串行延迟);max_tokens 纪律影响 fallback 设计(截断的输出会被格式校验拦下,触发重试)。做成本工程时要把它们当成一个互相咬合的系统,而不是一张可以逐项勾选的清单。

延迟与体验的权衡

成本之外,路由的第二条轴是延迟。agent 的延迟体验由三件事决定:

流式输出是最廉价的体验优化。 不改变任何成本结构,只把"等 30 秒看到完整回答"变成"1 秒内看到第一个 token"。对 harness 的代价是解析逻辑变复杂——工具调用参数要边流边解析,格式错误要到流尾才能发现。

推测执行(speculative execution)。 两个层面。推理侧的推测解码(speculative decoding,Leviathan 等人 2023)用小模型起草、大模型并行验证,把大模型的有效生成速度提高数倍——这是供应商侧的优化,但它解释了为什么"大模型 + 小草稿模型"的服务架构能在不明显加价的前提下更快。应用侧的对应物是 OpenAI 的 Predicted Outputs:当输出的大部分可以预知时(比如代码改写只动几行),把预测内容作为参考传入,模型只需"确认与修补",官方报告此类场景延迟可降低数倍。这本质上是harness 把自己的先验(我知道输出大概长什么样)变现成延迟收益

快模型前置。 延迟敏感的交互步骤(意图识别、下一步动作的草拟)用小模型先给即时反馈,慢而重的步骤放后台——这与成本分层天然同构,所以路由表应该同时标注每档的预期 TTFT 与吞吐。

权衡的核心是:延迟和成本经常可以用同一个旋钮换,但方向相反的操作会互相抵消。级联省钱但串行延迟最高;全旗舰最快也最贵;Fusion 式的"sidekick 并行"试图两头占——主 agent 与便宜 agent 并行跑,用算力冗余换"既快又省"的期望。没有免费午餐,只有明确标价的取舍。

评测先行:换模型必须跑回归

最后也是最容易被忽略的一条:模型路由的任何变更——换模型、改路由规则、调级联阈值——都是 harness 变更,必须跑回归评测。

理由很硬核。agent 的产出是模型与 harness 的联合结果(模型 vs Harness里引用的研究已经证明,同模型换 harness 分数差近 10 个百分点),而换模型对 harness 的影响是非对称的:新模型可能更聪明,但工具调用格式习惯不同、对压缩后摘要的鲁棒性不同、在 fallback 链里的失败模式不同。你为旧模型调好的提示纪律,可能恰好是旧模型的补丁,而不是普适的最佳实践。

工程上的最低要求:

  • 每次路由变更跑一遍固定回归集(任务集、判分器、成本口径都冻结),比较通过率与单任务成本两个指标——只看质量会漏掉成本回退,只看成本会漏掉质量回退;
  • 把模型版本钉在配置里,禁用 latest 别名——供应商静默升级是"你的 harness 没变但行为变了"的标准来源;
  • 把路由决策本身纳入日志:哪一步走了哪档模型、为什么、花了多少——没有这份数据,账单异常时你无从下手。

方法论详见评测实践;评测集怎么建、判分器怎么写,那一章有完整展开。

给自建 harness 的默认建议

从规则路由起步(规划旗舰、执行中档、杂务轻量),先把按步骤的成本日志建起来;攒够几百条真实轨迹后,你才有数据判断级联或学习型路由器是否值得上。没有轨迹数据就训路由器,是在给自己的先验过拟合。动手路径见搭建自己的 harness设计原则

延伸阅读

参考资料