深夜十一点,一家城市餐厅后厨依然灯火通明。领班阿忠站在出菜口,手里攥着一沓刚打印的订单:有人点了白灼菜心,有人点了佛跳墙,还有人只想要一碗例汤。后厨有三位师傅——老陈是请了十年的大厨,手艺精、工资高;小周手艺中等,胜在稳定;阿豪是快手里手,只会做简单家常菜,但手脚麻利、要价最低。聪明的领班从不让老陈去炒青菜,也不让阿豪去碰佛跳墙。他会扫一眼订单:难度低、赶时间的分给阿豪;中等难度的交给小周;真正的大菜才请老陈出马。于是同样一晚上,人力成本省了三成,客人满意率反而更高。 这正是多模型智能路由干的事。今天的 AI 应用后面排着许多大语言模型(LLM):旗舰模型聪明但昂贵,轻量模型便宜但能力有限。如果所有请求都发给旗舰模型,效果虽好,成本却像顿顿满汉全席一样吃不消;如果全部用轻量模型,质量又会塌方。领班阿忠的角色,就是一个“路由引擎”:它快速判断每个请求的难度,按照成本预算和时延要求,把请求分发给最合适的模型。这篇文章就带你走进这个后厨,看看一张订单是如何被“看菜下碟”的。

岗位关联

掌握多模型路由能力,意味着你能在效果与成本之间自动寻优,把 LLM 账单砍掉一半以上——这是 LLM 应用工程中极具杠杆效应的核心技能。

目录
  1. 可视化演示
  2. 路由理念:后厨不能只靠一位大厨
  3. 规则策略:领班的固定菜谱
  4. 难度评估:训练一位品菜师
  5. 成本权衡:效果与支出的天平
  6. 监控评估:领班的巡场检查
  7. 持续调优:菜单的四季更新
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示Word2Vec词嵌入空间中的向量类比推理:king - man + woman = queen,词向量捕捉语义关系。

本节配有交互动效(进入视口后自动加载,约 3KB)。

词嵌入类比推理 king向量减去man向量加上woman向量,得到queen向量 词嵌入空间中相似的词距离相近 v(king) - v(man) + v(woman) = v(queen) 词向量通过语义关系实现类比推理

路由理念:后厨不能只靠一位大厨

阿忠是新来的领班,上任第一天就发现账本不对劲:老陈是大厨,月薪抵得上小周和阿豪加起来还多。前任领班图省事,所有订单不分青红皂白全递给老陈。结果呢?白灼菜心是老陈炒的,例汤也是老陈煲的——好吃是好吃,可厨房的人力成本高得吓人,出菜速度还被拖慢,客人们为了等一碗例汤抱怨连连。阿忠干的第一件事,就是立下规矩:订单必须先过他这一关,由他判断该进哪条“生产线”。

这个后厨,就是今天的 LLM 应用平台。老陈、小周、阿豪,分别对应旗舰大模型(GPT-4 级别)、中端模型和轻量小模型。它们之间的单价差距可以高达几十倍甚至上百倍:旗舰模型处理一千个 token 的费用,可能够轻量模型跑上几十次。而真实的线上流量里,真正需要旗舰模型“满汉全席级”推理能力的请求往往只占一小部分——闲聊、翻译、格式化、简单抽取这类“白灼菜心级”请求,能占到六成以上。

多模型路由(multi-model routing)要解决的,正是“把合适的请求交给合适的模型”这个调度问题。一个路由引擎通常包含三件事:难度评估器(判断订单是多难)、路由策略(决定分给谁)、控制目标(在成本、时延、质量之间权衡)。与单模型方案相比,路由能同时带来三个收益:成本下降(省掉不必要的旗舰调用)、时延改善(简单请求用轻量模型更快返回)、质量保障(困难请求不被打折处理)。它的典型适用场景,是同时对接多个 LLM 供应商、请求难度差异较大、且对成本敏感的应用平台。

阿忠在账本上画了条线:全交给老陈,一个月人力成本 X;看菜下碟之后,成本几乎砍半,客人却没有抱怨菜变难吃。这就是路由的第一个价值——它不改变菜的质量上限,只是不再让大厨去炒青菜,把每一分钱都花在刀刃上。

Croute=pL⋅cL+pM⋅cM+pH⋅cF,Call=cFC_{\text{route}} = p_L \cdot c_L + p_M \cdot c_M + p_H \cdot c_F, \qquad C_{\text{all}} = c_F
公式说人话:只要把流量按难度拆开,分别用不同价位的模型,总账单就能从“顿顿满汉全席”变成“荤素搭配”。
  1. 三类请求占比$p_L、p_M、p_H$ 分别表示简单、中等、困难请求在全部请求中的占比,三者相加为 1。
    pL+pM+pH=1p_L + p_M + p_H = 1
  2. 各档模型单价$c_L、c_M、c_F$ 是轻量、中端、旗舰模型处理一次请求的平均单价,通常轻量远低于旗舰。
    cL<cM<cFc_L < c_M < c_F
  3. 路由期望成本每一类请求的占比乘以其单价再相加,就是路由后的期望成本;而全用旗舰的成本恒为 $c_F$,与请求构成无关。
    Croute=pLcL+pMcM+pHcFC_{\text{route}} = p_L c_L + p_M c_M + p_H c_F

规则策略:领班的固定菜谱

阿忠先立了一本“菜谱”:带骨头的菜给阿豪(他刀工快),需要炖煮的给老陈(火候要稳),其余给中间的小周。这些规则是他多年跑堂的经验总结,写下来就是餐厅的《出菜分流手册》——对应到技术里,这就是“静态规则路由”。

静态规则是路由最简单的形态:根据请求的显性信号直接分流。常见信号有三类:第一类是关键词,出现“翻译”“总结”就倾向轻量模型,出现“推导”“证明”就倾向旗舰模型;第二类是长度,prompt 很短往往简单,超长往往复杂;第三类是任务类型,FAQ 问答走轻量、多轮对话走中端、代码评审走旗舰。这些规则实现快、可解释性强,最适合业务刚起步、流量模式简单的阶段。

但静态规则的“死板”很快会暴露:困难请求不一定包含关键词,长 prompt 也可能是把简单问题问得很啰嗦。于是有了动态阈值——把门槛参数从写死的常量变成可由配置中心随时调整的变量,运营同学可以根据白天晚上的流量特征、预算余量实时微调。再进一步是分级通道:不只有“轻量/中端/旗舰”三档,而是为每档模型设立独立的队列与超时时间,像餐厅里炒锅、蒸锅、烤箱各成一条线,互不挤占。

阿忠的菜谱不是刻在石碑上的,每周会跟着客人反馈改一版:这周凉菜卖得好,就把“凉菜→阿豪”的覆盖范围调大一点。规则策略的精髓不在于规则本身,而在于“规则可以低成本调整”——这正是它作为路由起点的价值。

f(s)={L,0≤s<t1M,t1≤s<t2F,s≥t2f(s) = \begin{cases} L, & 0 \le s < t_1 \\ M, & t_1 \le s < t_2 \\ F, & s \ge t_2 \end{cases}
公式说人话:给每个请求打一个难度分 s,看它落在哪个分数区间,就送往哪个档位的模型——阈值就是通道的“门槛石”。
  1. 难度评分 s$s$ 是请求的难度分,可由长度、关键词、任务类型等显性信号加权计算得出,数值越高代表越难。
    s=score(length,keyword,task)s = \text{score}(\text{length}, \text{keyword}, \text{task})
  2. 两个门槛阈值$t_1$、$t_2$ 是划分三道通道的门槛,且 $t_1 < t_2$;阈值越低,该通道越容易被选中,分流比例也就越大。
    t1<t2t_1 < t_2
  3. 分段映射规则$s$ 落在哪个区间,就把请求分发给对应的 L(轻量)、M(中端)或 F(旗舰)模型,这就是一条完整的分级规则。
    f(s)={Ls<t1Mt1≤s<t2Fs≥t2f(s) = \begin{cases} L & s < t_1 \\ M & t_1 \le s < t_2 \\ F & s \ge t_2 \end{cases}

难度评估:训练一位品菜师

日子久了,阿忠发现菜谱总有盲区。客人点“鱼香肉丝”,有的店是家常版,有的店讲究川味正宗——光看菜名判断难度根本不靠谱。于是他请来一位品菜师,这位老师傅不用尝,光看订单上的食材、做法、加急标记,就能报出一个“难度分”:这道菜给阿豪没问题,那道菜必须老陈上。

“品菜师”对应的技术,是一个超轻量的难度分类器。它要做的事不是真的回答请求,而是预测一个概率:这个请求如果交给旗舰模型以外的模型,能答好的把握有多大,即 P(需要旗舰模型)。注意,这个分类器不能是“又一个大模型”——否则还没省到钱,先多花了一次大模型调用的钱。它应该小到能在毫秒级完成一次推理,开销几乎可以忽略。

分类器的构建分三步。第一步是特征提取:从请求里抽取廉价信号,例如文本长度、是否含代码块、是否含数学符号、是否要求多步推理、是否含领域专业词汇。第二步是训练:用历史请求加上质量标注(人工评分、用户反馈或大模型蒸馏出的参考答案)作为标签,训练一个逻辑回归或小型树模型。第三步是置信度校准:当分类器输出贴近 0.5 的模糊概率时,说明它拿不准,此时策略上应当“回退”——宁可多花点钱走更高级的模型,也不要误判导致质量翻车。

品菜师也有拿不准的时候。阿忠给他定了一条规矩:拿不准的菜,一律按高难度处理,请老陈出马。宁可偶尔多花一次旗舰的钱,也不能让一道“佛跳墙”毁在学徒手上——这就是置信度校准在实际运维中的体现。

P(hard∣x)=σ(w⊤x+b)=11+e−(w⊤x+b)P(\text{hard} \mid \mathbf{x}) = \sigma(\mathbf{w}^{\top}\mathbf{x} + b) = \frac{1}{1 + e^{-(\mathbf{w}^{\top}\mathbf{x} + b)}}
公式说人话:品菜师把订单的各个特征加权打分,再压成 0~1 的概率——分越高,越要认真对待。
  1. 特征向量$\mathbf{x}$ 是请求的特征向量,每一位对应一个信号,比如长度、代码特征、数学特征。
    x=(x1,x2,…,xk)\mathbf{x} = (x_1, x_2, \ldots, x_k)
  2. 线性打分$\mathbf{w}^{\top}\mathbf{x} + b$ 是权重与特征的加权和加上偏置,分数越高代表请求越可能困难。
    w⊤x+b=w1x1+w2x2+⋯+wkxk+b\mathbf{w}^{\top}\mathbf{x} + b = w_1 x_1 + w_2 x_2 + \cdots + w_k x_k + b
  3. sigmoid 压缩$\sigma(\cdot)$ 把任意实数压缩到 0~1 之间,输出即为“需要旗舰模型”的概率,方便与阈值比较。
    σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}

成本权衡:效果与支出的天平

阿忠心里有杆秤。省钱的方案谁都喜欢,但如果为了省钱让客人吃到糊掉的菜,回头客跑了,账算下来更亏。所以他给厨房定了一条铁律:任何分流方案,先保证“平均菜品质量不低于 80 分”,再谈省钱。这条铁律,就是路由优化的“质量约束”。

对应到技术,路由策略的调优是一个约束优化问题:改变阈值 $t_1$、$t_2$,分流比例就会变化,进而同时影响期望成本 $\mathbb{E}[C]$ 与期望质量 $\mathbb{E}[Q]$。如果只盯着成本,把阈值调得很松,简单请求固然全部去了轻量模型,但中难度请求也会被误伤,质量跌破红线——这就是“过度压榨”。

求解这个优化问题有几种做法。最朴素的是网格搜索:把 $t_1$、$t_2$ 在合理范围内离散化,逐一模拟并计算对应的(成本,质量)组合,找出满足约束且成本最小的点。更高效的是贝叶斯优化:把阈值组合看作搜索空间,用历史模拟结果拟合代理模型,用最少的试验逼近最优解。此外,优化时要特别注意“误分类代价不对称”:把困难请求判成简单(送去轻量模型)的代价,远高于把简单请求判成困难(送去旗舰模型)的代价——这一点要在目标函数里用系数体现,否则省下的是钱,丢掉的是口碑。

阿忠最后选定的方案并不是最省钱的方案,而是“踩在 80 分质量线上”的最优方案。天平的两端,一头是每月账单,一头是客人满意度。路由的价值,就是在两者之间自动找到那个让老板睡得着觉的点。

min⁡t1,t2  Ex[C(t1,t2)]s.t.Ex[Q(t1,t2)]≥Qmin⁡\min_{t_1, t_2} \; \mathbb{E}_{\mathbf{x}}\big[ C(t_1, t_2) \big] \quad \text{s.t.} \quad \mathbb{E}_{\mathbf{x}}\big[ Q(t_1, t_2) \big] \ge Q_{\min}
公式说人话:在“质量不许低于底线”的约束下,找一个让总成本最低的阈值组合——省钱的前提是不让客人觉得变难吃了。
  1. 决策变量$t_1$、$t_2$ 是两个路由阈值,优化器可以调整它们来改变“哪类请求进哪条通道”的比例。
    t1,t2∈[0,1]t_1, t_2 \in [0, 1]
  2. 期望成本目标$\mathbb{E}_{\mathbf{x}}[C(t_1, t_2)]$ 是对所有请求求平均的单次成本,优化目标就是让它尽可能小。
    Ex[C]=∑xP(x)⋅C(t1,t2;x)\mathbb{E}_{\mathbf{x}}[C] = \sum_{\mathbf{x}} P(\mathbf{x}) \cdot C(t_1, t_2; \mathbf{x})
  3. 质量约束条件$\mathbb{E}_{\mathbf{x}}[Q] \ge Q_{\min}$ 保证平均质量不低于业务底线,防止“省成本省到质量崩盘”。
    Ex[Q]≥Qmin⁡\mathbb{E}_{\mathbf{x}}[Q] \ge Q_{\min}

监控评估:领班的巡场检查

菜谱定好了,品菜师也上岗了,阿忠还是每天打烊后巡场:翻垃圾桶看剩菜多不多,翻客诉单看哪道菜被退得多。他清楚,厨房是活的——厨师会状态波动,食材会换供应商,菜单上的规则再好,也得靠数据来验证是不是真的在起作用。

路由上线后的监控,围绕三类指标展开。一是成本指标:成本节省率是最直观的 KPI,衡量路由相对“全旗舰方案”省了多少钱。二是流量指标:旗舰透传率(直接走旗舰的请求占比)、各档位调用量分布,能反映策略是否跑偏。三是质量指标:模型回答的错误率、用户反馈分、兜底重试率——质量塌方往往比成本超标更隐蔽、更致命。另外,时延的 P95 也要盯:简单请求被路由到轻量模型后理论上应该更快,如果 P95 反而上升,说明通道配置出了问题。

监控的进阶形态是漂移检测。线上请求的难度分布不是静止的:业务上新、季节波动、竞品变化都会让“简单/中等/困难”的比例悄悄移动。常见做法是用滑动窗口统计最近一段时间的难度分布,与新一批请求的分布做对比(如 KL 散度或分布间距离),当漂移超过阈值时触发告警。同时配合成本异常告警:某天成本突然翻倍,往往意味着某个阈值失效或上游流量结构突变,需要立刻介入。

巡场检查的意义不是“发现问题”,而是“尽早发现问题”。阿忠的账本上,成本节省率就是那面最显眼的仪表盘:它不出声的时候一切正常,一旦指针松动,阿忠当晚就会去找品菜师和菜谱的麻烦——监控把“事后补救”变成了“事前警觉”。

Rsave=1−CrouteCall-flagR_{\text{save}} = 1 - \frac{C_{\text{route}}}{C_{\text{all-flag}}}
公式说人话:拿路由后的账单和“全用旗舰”的虚拟账单一比,就知道省了多少——这个比例一旦异常下滑,说明路由策略已经失灵。
  1. 全旗舰基线成本$C_{\text{all-flag}}$ 是假设所有请求都发给旗舰模型的总成本,它是路由要挑战的“满汉全席账单”。
    Call-flag=N×cFC_{\text{all-flag}} = N \times c_F
  2. 实际路由成本$C_{\text{route}}$ 是路由后的真实总成本,由各档位的调用量与单价共同决定。
    Croute=nLcL+nMcM+nFcFC_{\text{route}} = n_L c_L + n_M c_M + n_F c_F
  3. 节省率指标$R_{\text{save}}$ 越接近 1 说明省得越多,0 表示和全旗舰持平,负数说明还不如全旗舰省钱。
    Rsave=1−CrouteCall-flagR_{\text{save}} = 1 - \frac{C_{\text{route}}}{C_{\text{all-flag}}}

持续调优:菜单的四季更新

半年过去,餐厅的客流结构悄悄变了:外卖订单占比越来越大,外卖客人的菜偏简单、出餐要求快;堂食客人的要求则越来越高,爱点需要功夫的菜。阿忠的菜谱要是还停留在半年前,轻量作坊会忙不过来,大厨又会闲着——他必须让分流系统跟着季节和客流一起进化。

持续调优的第一步是反馈闭环:每一次路由决策、模型返回、用户反馈、兜底结果,都要被记录下来,形成结构化样本。这些样本既是监控的数据源,也是下一轮训练的燃料。第二步是策略迭代:定期(如每周)用新样本重训难度分类器、重新校准阈值,让“品菜师”的眼力跟上最新的请求口味。

迭代方式有两种节奏。离线重训适合稳定场景:攒一批新数据,训练新模型,离线回测看成本和质量指标是否改善,再灰度上线。在线更新适合漂移快的场景:用梯度下降等在线学习算法,让分类器权重随风向小步微调。最后,任何改动都要过 A/B 验证的关卡:新策略和旧策略各拿 5%~10% 的流量跑一段时间,用成本节省率与质量指标同时说话,显著占优才全量。这一套“反馈→重训→A/B→灰度”的循环,就是路由系统的自我进化。

阿忠后来把厨房的管理总结成一句话:没有一劳永逸的菜谱,只有不断演化的分流系统。多模型路由绝不是部署上线就结束的“一次买卖”,而是一个持续运转的成本优化引擎——这也正是它被称为“成本杀手”的真正底气。

wt+1=wt−η∇wL(wt)\mathbf{w}_{t+1} = \mathbf{w}_t - \eta \nabla_{\mathbf{w}} \mathcal{L}(\mathbf{w}_t)
公式说人话:分类器每见到一批新样本,就顺着“让损失下降”的方向小走一步,权重慢慢逼近新环境下的最优值。
  1. 当前权重$\mathbf{w}_t$ 是第 $t$ 轮的分类器权重,此刻所有的路由决策都基于它。
    wt=(w1,w2,…,wk)\mathbf{w}_t = (w_1, w_2, \ldots, w_k)
  2. 负梯度方向$\nabla_{\mathbf{w}} \mathcal{L}(\mathbf{w}_t)$ 是损失函数对权重的梯度,指向“损失上升最快”的方向,所以取负号让损失下降。
    wt+1=wt−η∇wL\mathbf{w}_{t+1} = \mathbf{w}_t - \eta \nabla_{\mathbf{w}} \mathcal{L}
  3. 学习率$\eta$ 控制每次更新的步子大小,太大容易震荡,太小则收敛太慢。
    0<η≪10 < \eta \ll 1

AI 应用场景

智能客服平台的模型路由

阶段:推理阶段 / 应用架构选型

解决的问题:客服平台每天有大量“查订单状态”“问退换货政策”的简单请求,以往和“复杂投诉协商”一样全走旗舰模型,成本居高不下,简单请求的响应速度还被拖累。

具体案例:某电商客服机器人每天处理 300 万请求。路由引擎按难度分流:65% 的查询类请求交给轻量模型做意图匹配与模板回答;25% 需要多轮对话的交给中端模型;仅 10% 的高危投诉、法律条款解释走旗舰模型并挂人工兜底。整体成本下降约 60%,投诉场景满意度不降反升。

企业知识库与代码助手的混合路由

阶段:推理阶段 / 提示词工程

解决的问题:代码补全工具中,“变量重命名”这类机械请求与“架构重构建议”这类复杂请求共用同一个模型,时延和成本互相拖累,轻量任务得不到足够快的响应。

具体案例:一个 IDE 插件把请求拆成两条管线:简单机械变换走 30ms 内返回的小模型,复杂的重构建议走旗舰模型并提供流式输出。路由依据包含代码文件长度、是否跨文件引用、用户历史采纳率等特征,由一个小分类器实时打分。

批量离线任务的成本调度

阶段:批处理 / 离线推理

解决的问题:内容审核、新闻摘要、商品描述生成等批量任务,请求量巨大、难度参差,如果统一用旗舰模型,积少成多的账单非常惊人,且夜间低谷时段也没有弹性。

具体案例:某新闻聚合平台每天聚合 50 万条资讯,路由按“是否涉及敏感事件、是否需要深度事实核查”分流:常规新闻用轻量摘要模型,突发与敏感新闻走旗舰模型做事实核查并转人工复核。批量成本下降一半以上,敏感内容的漏报率没有上升。

Python 演示

python76 行
import math  def sigmoid(z):    # sigmoid 函数,把任意实数压缩到 0~1 的概率区间    return 1.0 / (1.0 + math.exp(-z))  class DifficultyClassifier:    # 难度分类器:输入请求特征,输出"需要旗舰模型"的概率    def __init__(self, weights, bias):        self.weights = weights        self.bias = bias     def predict(self, features):        # 加权求和 + 偏置,再经过 sigmoid 得到概率        z = self.bias        for w, f in zip(self.weights, features):            z += w * f        return sigmoid(z)  class ModelRouter:    # 多模型路由器:按难度概率把请求分发给轻量/中端/旗舰模型    def __init__(self):        self.clf = DifficultyClassifier([0.4, 0.9, -0.3], -1.2)        self.low_th = 0.45        self.high_th = 0.75        self.prices = {"light": 0.01, "mid": 0.10, "flag": 1.00}        self.total_cost = 0.0        self.route_count = {"light": 0, "mid": 0, "flag": 0}     def extract_features(self, prompt):        # 提取三个廉价特征:长度、是否含代码、是否含数学推理        length = min(len(prompt) / 200.0, 1.0)        has_code = 1.0 if ("def " in prompt or "import " in prompt) else 0.0        has_math = 1.0 if any(k in prompt for k in ["derive", "prove", "=", "formula"]) else 0.0        return [length, has_code, has_math]     def route(self, prompt):        # 路由主流程:提特征 -> 算难度概率 -> 按阈值分流 -> 记账        features = self.extract_features(prompt)        hard_prob = self.clf.predict(features)        if hard_prob < self.low_th:            model = "light"        elif hard_prob < self.high_th:            model = "mid"        else:            model = "flag"        cost = self.prices[model]        self.total_cost += cost        self.route_count[model] += 1        return model, cost, hard_prob  def main():    router = ModelRouter()    samples = [        "hello, how is the weather today?",        "please calculate 37 times 89.",        "explain back propagation in neural networks.",        "derive the differential form of maxwell equations and prove the physical meaning.",        "write python code for binary search and prove its time complexity.",    ]    for prompt in samples:        model, cost, prob = router.route(prompt)        print("{} | prob={:.2f} | route->{} cost=${:.2f}".format(prompt[:20], prob, model, cost))    paid = router.total_cost    flag_total = len(samples) * router.prices["flag"]    saved = (1.0 - paid / flag_total) * 100.0    print("routed cost=${:.2f}, all-flag cost=${:.2f}, saved={:.1f}%".format(paid, flag_total, saved))    print("route count: {}".format(router.route_count))  if __name__ == "__main__":    main()
目的:用一个小型逻辑回归分类器评估请求难度,并按照双阈值把请求路由到轻量/中端/旗舰模型,最后统计路由相对“全用旗舰”节省的成本比例。
  1. z = self.bias; for w, f in zip(self.weights, features): z += w * f把特征向量和权重加权求和,得到一个难度分数。
  2. return sigmoid(z)用 sigmoid 把分数压成 0~1 的概率,表示“需要旗舰模型”的可能性。
  3. if hard_prob < self.low_th: model = "light"概率低于下阈值时,判断为简单请求,交给最便宜的轻量模型。
  4. elif hard_prob < self.high_th: model = "mid"概率落在中间区间时,交给中端模型,兼顾质量与成本。
  5. else: model = "flag"概率高于上阈值时,说明请求很难,必须交给旗舰模型兜底。
  6. self.total_cost += cost每次路由后累加实际成本,用于最终的节省率统计。
  7. saved = (1.0 - paid / flag_total) * 100.0计算相对“全用旗舰”的成本节省率,这是路由系统最核心的 KPI。

常见误区

误区我以为多模型路由就是写几个关键词规则,比如看到“翻译”就去小模型,看到“代码”就去大模型,一个 if-else 就搞定了,根本不需要训练什么分类器。

正解关键词规则只是“静态规则”的起点,但真实请求远比想象复杂。同样是“代码”类请求,“帮我写冒泡排序”和“证明快速排序最坏复杂度”的难度天差地别。只靠关键词,会把困难请求误送进轻量模型导致质量崩盘,也会把简单请求误送进旗舰模型导致钱包出血。所以需要难度评估——训练一个学到的特征与难度映射关系的轻量分类器,再与规则配合使用。

为何常见:关键词路由最容易理解、实现门槛最低,给人“好像够了”的错觉;在流量小、请求模式单一的 demo 阶段,误判问题确实不容易暴露。

误区路由器的目标当然是越省钱越好,把 80% 的请求都塞给最便宜的轻量模型,成本直接打一折,老板一定满意。

正解省钱的前提是质量不塌方。如果简单请求被过度压到轻量模型,错误率上升、用户体验恶化,最后反而要花更多人力去兜底,甚至流失客户。正确的目标是在“质量约束下的成本最小化”——先定质量底线,再调阈值和分类器,找到质量可接受区间内的最优解,而不是无脑追求最低账单。

为何常见:成本是显性的、可量化的,质量是隐性的、滞后的。做汇报时省钱的数字最好看,容易让人忽略隐性损失。

误区每次请求都要先运行一个路由模型做判断,等于每个请求都多花一次模型调用的钱,这会不会把省下的成本又吃回去?

正解恰恰相反。成熟的路由器并不调用大模型,而是用极轻量的特征工程加一个小分类器(甚至线性模型),单次判断耗时在毫秒级、成本可忽略不计。它基于长度、关键词、语言、任务类型等廉价特征做预筛,只有拿不准的请求才考虑升级处理。这部分开销通常只占模型费用的 1% 以下,比起省下的几十个百分点,完全不是一个量级。

为何常见:大家默认“智能判断=贵”,把路由误想象成又一个大模型;其实工程上追求的是用最小的判断成本换取最大的分流收益。

误区我把阈值调好、分类器训练完就大功告成了,以后不用再管它了吧?

正解线上请求分布是漂移的:业务旺季、新功能上线、用户群体变化都会改变难度分布。今天 60% 的简单请求,下周可能变成 40%。如果不监控成本节省率和质量指标、不定期重训分类器,路由策略会从“最优”悄悄滑向“次优”甚至“有害”。反馈闭环、定期重训、A/B 验证与灰度发布,才是路由系统长期健康运转的常态。

为何常见:静态思维惯性——很多人把模型部署当作终点,忽略了“部署上线后才是运维与优化的开始”这一工程现实。

面试题

Q1. 多模型路由最核心的目标是什么?

单选题 · easy

  • A.让所有请求都用效果最好的旗舰模型
  • B.在效果与成本之间自动寻找最优平衡← 正确答案
  • C.只选择价格最低的轻量模型处理请求
  • D.完全替代人工提示词工程与调优

答案:B。路由的本质是“看菜下碟”:简单请求交给轻量模型省钱,困难请求交给旗舰模型保质量。它追求的是全局的成本-效果最优平衡,而不是无脑用旗舰或无脑省钱,因此选 B。

Q2. 下列哪项属于静态规则路由的典型做法?

单选题 · easy

  • A.根据请求中是否含特定关键词进行分流← 正确答案
  • B.用深度神经网络实时预测请求难度
  • C.根据历史成本波动动态调整模型组合
  • D.通过 A/B 实验自动迭代路由策略

答案:A。静态规则基于关键词、长度、任务类型等显性信号直接分流,是路由最朴素的形式。B、C、D 分别涉及分类器预测、动态调整和迭代实验,都属于更进阶的动态或学习式路由。

Q3. 难度分类器输出的 hard 概率主要表示什么含义?

单选题 · mid

  • A.当前请求被用户投诉的概率大小
  • B.请求文本长度超过上限的概率
  • C.请求需要旗舰模型才能答好的概率← 正确答案
  • D.模型返回结果正确无误的概率

答案:C。hard 概率衡量的是“这个请求对模型能力的要求有多高”,也就是交给非旗舰模型会不会翻车。它和投诉概率、长度超限、结果正确率都不是一回事。

Q4. 在成本权衡优化中,约束条件 E[Q] ≥ Qmin 的作用是?

单选题 · mid

  • A.保证任何请求都无需经过难度评估
  • B.确保路由方案不会让质量低于底线← 正确答案
  • C.规定所有请求都必须优先走轻量模型
  • D.强制要求时延必须低于某固定阈值

答案:B。优化目标是让期望成本最小,但必须满足质量不低于 Qmin 的约束,这就防止了“为了省钱把质量压垮”的极端方案。它管的是质量底线,与难度评估流程、模型选择和时延无关。

Q5. 路由上线后应监控的核心指标包括哪些?

多选题 · mid

  • A.成本节省率与旗舰模型透传率← 正确答案
  • B.模型回答的错误率与用户满意度← 正确答案
  • C.请求时延的 P95 分位数值← 正确答案
  • D.训练数据的标注人力成本

答案:ABC。监控要同时覆盖成本视角、流量视角、质量视角和时延视角:成本节省率、透传率、错误率、满意度和 P95 时延都是关键指标。训练数据的标注成本属于离线开发成本,不属于线上路由监控范畴。

Q6. 概念漂移在路由场景中通常指什么?

单选题 · mid

  • A.路由器的代码版本发布后产生部署故障
  • B.线上请求的难度分布随时间发生变化← 正确答案
  • C.模型供应商偶尔出现服务不稳定情况
  • D.分类器权重在训练中被逐渐遗忘

答案:B。概念漂移是指数据分布随时间变化。在路由场景里,最简单/中等/困难请求的比例会随着业务节奏改变,导致旧阈值失效,因此需要用滑动窗口对比分布并触发告警。

Q7. 连续多日“全用旗舰模型”会导致哪些浪费?

多选题 · hard

  • A.大量简单请求支付了十倍以上的费用← 正确答案
  • B.旗舰模型负载过高引起排队时延增大← 正确答案
  • C.简单请求本来可以更快得到响应← 正确答案
  • D.旗舰模型输出总是比轻量模型质量差

答案:ABC。全用旗舰意味着简单请求花了冤枉钱,旗舰负载上升导致排队时延变大,简单请求也失去了秒回的机会。D 是错误陈述——旗舰模型通常质量更高,问题不在质量而在成本与效率。

Q8. 置信度校准在路由中的主要作用是?

单选题 · hard

  • A.让分类器对所有请求都输出相同概率
  • B.低置信度时回退更稳妥的模型处理← 正确答案
  • C.提高轻量模型的单次调用价格
  • D.降低特征提取时对 GPU 的依赖

答案:B。当分类器输出的概率接近 0.5 时,说明它“拿不准”。此时策略上应当回退——多花点钱走更高级的模型,避免误判导致质量翻车。这正是“宁可偶尔多花旗舰的钱,也不能让佛跳墙毁在学徒手上”的工程体现。

Q9. 分级通道中的“旗舰透传率”指什么?

单选题 · easy

  • A.请求直接分配给旗舰模型的比例← 正确答案
  • B.旗舰模型拒绝回答请求的比例
  • C.旗舰模型输出结果被截断的比例
  • D.请求平均经过的路由节点数量

答案:A。透传率就是“直接走旗舰通道”的请求占比。透传率过高说明路由没起到省钱作用,过低则要警惕质量风险,它是监控路由是否跑偏的重要流量指标。

Q10. 持续调优阶段通常包含哪些环节?

多选题 · hard

  • A.收集路由决策与真实质量反馈← 正确答案
  • B.定期重训难度分类器与调整阈值← 正确答案
  • C.对候选策略做小流量 A/B 验证← 正确答案
  • D.把所有请求永久固定给单一模型

答案:ABC。持续调优是一个“反馈→重训→A/B→灰度”的闭环:先收集决策与反馈,再定期重训分类器、调整阈值,最后用 A/B 验证新策略显著占优才全量。D 等于放弃调优,与持续进化背道而驰。