Agent 的分级模型调用:简单任务用小模型复杂任务用大模型——智能路由省钱

我最早以为,给 Agent 选模型应该直接上最强的那个——模型是 Agent 的天花板,不能亏待它。直到我接手了一个客服 Agent:每天十几万次模型调用,一个月的 API 账单出来,我盯着数字看了很久。这些请求里,有多少是真正需要大模型思考的?可能不到两成。剩下的是“你们几点营业”“怎么退款”这种翻来覆去的答案。

AI technology illustration

于是方案很自然:简单任务给小模型,复杂任务给大模型。这个思路几乎不需要解释,但真的动手做,你立刻会遇到一个尴尬的问题——程序怎么知道一个任务算简单还是复杂?答案就是今天要讲的智能路由(intelligent routing):在请求进入模型之前,先由一个路由器给任务分类,再决定把请求送到哪一个模型。

为什么简单和复杂,成本可以差十几倍?

大模型和小模型的 API 价格差距极其夸张。以 OpenAI 官方定价为例:gpt-4o-mini 和 gpt-4o 的输入价格相差约 17 倍,输出价格相差也是 17 倍。表格里的数字会变,但量级不会变:

维度 小模型 大模型
示例 gpt-4o-mini gpt-4o
输入价格/百万 tokens $0.15 $2.50
输出价格/百万 tokens $0.60 $10.00
复杂推理 一般 强
生成速度 通常更快 通常更慢

路由是什么?先把一个容易混淆的东西拆开

你可能听说过 Mixture of Experts(MoE),也会想:这不就是一种模型路由吗?Switch Transformer 的 MoE 确实在模型内部有“门控路由”,但它的粒度是一个 token,路由决策被训练在模型权重里。而我们讨论的智能路由是在模型服务层,以“一个请求”为粒度,路由决策通常写在业务代码里,或者来自一个单独的分类器。前者是模型的组成部分,后者的目的是省钱。

换句话说:MoE 改变的是模型的结构,分级调用改变的是 Agent 的架构。

四种实现方式,从粗暴到精细

  • 规则路由:如果用户消息包含“营业时间”“退款”等关键词,或者属于某个固定意图,直接丢给小模型。实现成本最低,适合意图高度可枚举的场景。
  • 小模型打分:用一个便宜的分类器(可以是 API 小模型)对任务打一个“复杂度分”,超过阈值走大模型。适合意图不容易枚举,但要快速上线的情况。
  • 置信度路由(级联):先把请求给小模型,让它生成答案,同时输出一个置信度或 self-score。如果分数低,再把同一个请求转给大模型重做。这是 FrugalGPT 强调的级联思路。
  • 偏好训练路由:收集历史“哪个模型在哪些任务上更好”的偏好数据,训练一个专用的路由模型。代表包括 RouteLLM,它利用用户隐式反馈训练路由器,可在保留大模型效果的同时大幅降低成本。

一个最小实现的伪代码大致长这样:

def route_task(task):
    # 规则路由:固定意图直接分流
    if any(word in task for word in ["营业时间", "退款", "人工客服"]):
        return "gpt-4o-mini"

    # 小模型打分:难度超过 0.8 就升舱
    difficulty = judge(task)   # judge 是一个便宜的分类器
    return "gpt-4o" if difficulty > 0.8 else "gpt-4o-mini"

注意 judge 本身也是一次模型调用。如果任务本身很短,路由的成本相当于多付了一个小模型的固定成本,需要一并算进账里。

论文给的答案:省钱是真的,但别指望 0 成本

FrugalGPT 的研究很直接:用便宜的模型生成,质量不够再升级到大模型,这种级联方式可以在保持效果接近 GPT-4 的前提下,把成本降低近 98%。RouteLLM 则证明,学习一个“在哪个问题上用哪个模型”的路由器,可以在 MT-Bench 等评测上减少 85% 以上的 API 成本。这些数字说明一件事:对复杂任务全量使用大模型,大多数时候是把预算白白烧在简单问题上。

“与使用固定大模型相比,级联或路由策略的本质是把计算资源重新分配到真正需要它的请求上。”(参考上述论文摘要)

我踩过的坑:先训练路由器,不如先看模型自己的置信度

我最早做了一个自以为很高级的“复杂度分类器”,花了一周时间标注任务数据、调参,效果还行。后来发现,与其训练一个路由器,不如打开小模型的 logprob(对数概率)或让它给自己打分——小模型虽然回答不了复杂问题,但它通常知道自己没把握。这个信号已经够用来决定要不要转大模型了。

有一次我写了一个功能:让 mini 在回答后说“如果没把握请回复不确认”,然后根据这句话路由升级。听起来很“土”,但上线后节省了 70% 的调用成本,误判率没怎么变。这个经历让我明白:分级调用的核心不是算法有多炫,而是你有没有足够的数据和信号来支撑决策。

什么时候分级调用会翻车?

  • 路由误判是必然的。总有任务被小模型处理了,但答案质量不可用,最终需要用户发现后重试。如果重试率超过一定比例,路由不但没有省钱,反而增加了响应时间。
  • 路由本身有成本。每次请求先让路由器过一遍,如果任务很短,路由器的开销可能比省下的钱还多。尤其当你用大模型做路由器时,这完全本末倒置。
  • 长上下文是例外。如果一个任务附带 50K 的上下文,路由也要读完才能判断复杂度,光这一步就可能触发大模型的价格。此时直接送大模型反而更省。
  • 模型能力会漂移。小模型升级、大模型降价、新模型发布,都会让旧的阈值失效。路由策略需要持续从日志里监控“小模型失败率”和“成本变化”,否则会越跑越歪。

我的判断

分级调用不是银弹。它最适合请求量大、任务复杂度方差大、且能容忍一定延迟的 Agent。如果一天只有几十次调用,把路由代码写复杂,不如直接上大模型。

我更相信的趋势是:Agent 框架会内置“自动路由 + 自动记账”的能力,路由器会从用户反馈和大模型日志里持续学习。但无论工具怎么进化,你都得先回答一个问题:你的任务分布到底是什么样的?统计一百条历史请求,看看哪些被大模型回答了但其实是简单任务,那些数据会告诉你,该不该做路由,以及怎么做。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/1332.html

赞 (0)
上一篇 2026年9月28日
下一篇 2026年9月28日

相关推荐