你有没有想过,当你打开外卖App点一份晚餐时,背后发生了什么?系统不会把订单随便丢给最近一家餐厅,而是会综合评估每家餐厅的排队情况、出餐速度、配送距离、骑手运力,甚至你专属的优惠券,然后做出一个“最合适”的决定。如果某家餐厅突然爆单了,系统会立刻把新订单导向别家;如果某个骑手路上出了状况,后台会自动重新派单。 现在请把这个画面里所有元素替换成AI世界的样子:顾客是用你业务的用户,餐厅是各式各样的LLM服务商(OpenAI、Claude、国内的众多大模型平台),骑手是处理请求的模型实例,而那个坐在调度中心里、指挥着一切的“智能中枢”,就是本文的主角——多模型路由。 它本质上就是一个中心化的调度引擎,背后藏着几条核心修炼:该把请求派给谁(路由策略)、怎么派才均衡不偏袒(负载均衡与权重)、谁出问题了怎么办(故障转移与自动剔除)、以及派单效果好不好、怎么越派越聪明(效果统计与持续调优)。学会了这套调度心法,你就能像一个冷静的调度员,把每一分Token预算、每一次模型调用,都花在刀刃上。

岗位关联

多模型路由是多LLM供应商时代的必修课。作为AI从业者,它是你掌控成本、延迟与质量三角平衡的“调度方向盘”,也是真金白银的成本控制利器。

目录
  1. 可视化演示
  2. 路由策略设计:订单该派给谁?
  3. 负载均衡与权重:怎么派单才不会“累死”一家店?
  4. 故障转移机制:餐厅突然关门怎么办?
  5. 效果统计体系:怎么知道调度得好不好?
  6. 持续调优策略:调度中心如何越用越聪明?
  7. 统一入口管理:一个调度台管所有供应商
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

通过路由调度流程、负载均衡权重分配和故障转移机制三个维度,动态展示多LLM供应商的智能调度策略,直观理解请求分发与成本优化逻辑。

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

路由调度流程 请求经网关按权重分发到多供应商 统一协议适配屏蔽接口差异 Route=argmin(cost, latency, quality)

路由策略设计:订单该派给谁?

想象你经营着一家外卖平台,手底下签约了多家风格迥异的餐厅:A餐厅出餐快但价格贵,B餐厅便宜但偶尔会送错,C餐厅口味稳定但只擅长川菜。每天不同的顾客点不同的菜,你作为调度员,总得定一条规矩来决定“这个订单派给谁”——这就是路由策略。

在多模型路由的世界里,“餐厅”就是各个LLM服务商,“菜”就是用户的请求类型。规则路由是最简单的策略,像一本写好的菜谱:代码生成类的请求走Claude,通用对话走GPT,中文客服走国内的模型。你按照请求的属性或业务标签,手动设定一条条分流的规则。这种策略直接明了,适合业务场景稳定的情况。

但现实世界远比菜谱复杂,用户的请求不会贴着标签进来。于是有了语义路由——它像一位经验老到的点菜员,听了顾客的描述后,能判断出“这其实是道川菜”还是“这应该交给西餐师傅”。语义路由会用嵌入模型(Embedding)把请求内容转成向量,然后与各模型擅长的任务类型做相似度匹配,把请求送往最合适的模型。最后是成本优先策略,它像一个精打细算的采购员,只在衡量成本与质量后做出抉择。

路由策略的朴素逻辑可以概括为一个条件判断的数学模型:

像餐厅会更新菜单一样,路由策略也需要定期审视。当发现某类请求被反复路由到贵的模型,而便宜的模型质量也够用,就该调整规则了。规则永远是死的,业务场景才是活的。

Provider={A,若 请求类型=代码B,若 请求类型=对话C,若 请求类型=翻译\text{Provider} = \begin{cases} A, & \text{若 请求类型} = \text{代码} \\ B, & \text{若 请求类型} = \text{对话} \\ C, & \text{若 请求类型} = \text{翻译} \end{cases}
这就像一个分流器,不同水流进不同管道,每条管道通向不同的处理车间。
  1. 判断条件系统检查请求的类型或属性标签,类似外卖App识别“这是川菜还是粤菜”
    请求类型=代码\text{请求类型} = \text{代码}
  2. 映射选择根据判断结果走对应分支,每个分支绑定一个固定的模型供应商
    Provider=A\text{Provider} = A

负载均衡与权重:怎么派单才不会“累死”一家店?

外卖平台最怕什么?怕所有订单都涌向人气最高的那家店,其他店冷冷清清。高峰期一到,爆单的爆单、闲逛的闲逛。调度中心必须有一套算法来平衡各家的负荷——这就是负载均衡。

最简单的思路是轮询调度(Round Robin),像打牌发牌一样,一张一张轮流派,A、B、C、A、B、C……每个模型获得机会均等。但现实中各供应商的性能、价格、额度都不同,纯粹的轮流并不公平。于是有了加权轮询(Weighted Round Robin),给每家餐厅设定一个系数——贵的模型小权重以防烧钱,便宜且稳定的模型大权重来扛流量。就像奶茶店按杯量给店员排班一样,能力强的人多值班。更进一步,最少连接算法像一个监工,实时盯着各家餐厅当前的排队人数,谁手上的单最少就把新单派给谁,真正做到“哪闲去哪”。

加权轮询的流量分配可以这样写:

其中,$w_i$ 是第 $i$ 个模型供应商的权重,$r_i$ 是分配给它的流量比例。

负载均衡是路由的“公平秤”,保证每一家模型供应商都不会被突然的流量峰值压垮。但请注意,权重不是拍脑袋定的——它应该基于各供应商的历史表现动态调整,而这正是后面调优环节要做的事。

ri=wi∑j=1nwjr_i = \frac{w_i}{\sum_{j=1}^{n} w_j}
权重就是每家餐馆的“排班指数”,指数越高,排到的单子越多。
  1. 读出权重每个供应商事先配好一个权重值 $w_i$,比如 P1 配 50、P2 配 30、P3 配 20
    w1=50,w2=30,w3=20w_1 = 50, \quad w_2 = 30, \quad w_3 = 20
  2. 计算总权重所有权重相加,作为整个分配的分母
    ∑j=1nwj=50+30+20=100\sum_{j=1}^{n} w_j = 50 + 30 + 20 = 100
  3. 算流量比例单个权重除以总权重,得到该供应商分到的流量百分比
    ri=wi100r_i = \frac{w_i}{100}

故障转移机制:餐厅突然关门怎么办?

就餐高峰突然后厨起火,一家接单中的餐厅闭店了。如果一个平台的调度中心对此毫无反应,用户的订单就会悬挂在那边,直到用户失望而去——AI系统也一样。模型供应商也是第三方服务,可能超时、限流、报错甚至宕机。多模型路由必须配备一套故障转移机制,像训练有素的消防演练一样,在一分钟内把损失降到最低。

故障转移的基础是超时重试:调度中心给每次请求设定一个等待上限,比如等待10秒。如果这个模型一直吞吞吐吐不回复,就把这个请求转投给其他模型,并重新计时。注意,超时后直接重试同一个供应商意义不大,所以通常是“换一家再试”。更进一步的保护是熔断——如果某家模型在短时间内连续失败率达到阈值,比如50次请求中40次失败,调度中心就判定这家“状态不佳”,直接切断通向它的流量,让它冷却一段时间。这就像电路里的保险丝,电流异常时先熔断保护整个系统。所谓自动剔除,就是把冷却期的故障节点从候选列表里移除,待恢复健康后再“复职”。

失败重试的概率模型可以用指数退避描述,重试次数与等待时间的关系是:

其中 $t_0$ 是首次等待时间,$t_k$ 是第 $k$ 次重试前的等待时间。

有了这套机制,无论哪家LLM服务商掉链子,你的业务都能像不倒翁一样稳如泰山。故障转移是路由器的“保险丝”,宁可慢一秒,不可崩一片。

tk=t0×2k−1(k=1,2,3,… )t_k = t_0 \times 2^{k-1} \quad (k = 1, 2, 3, \dots)
退避的意思是“越等越久”,就像网络重传一样,给故障方喘息的空间,而不是死缠烂打。
  1. 初始化等待第一次失败后,等待一个基准时间 $t_0$,假设为 1 秒
    t0=1 秒t_0 = 1\text{ 秒}
  2. 翻倍等待每多失败一次,等待时间翻倍,第二次 2 秒、第三次 4 秒
    t2=1×22−1=2 秒t_2 = 1 \times 2^{2-1} = 2\text{ 秒}
  3. 第 k 次重试公式推广到任意次数,指数增长让重试频率越来越低,避免雪崩
    tk=t0×2k−1t_k = t_0 \times 2^{k-1}

效果统计体系:怎么知道调度得好不好?

外卖平台靠什么评估调度员是不是靠谱?当然不是靠感觉,而是看数据:单均配送时长、差评率、超时率。同样,一个多模型路由器是否“聪明”,必须建立在效果统计之上。

首先需要统计成功率——这一百个请求里,有多少个按照预期拿到了完整回复?如果某家供应商的成功率持续走低,那它显然不再是“合格餐厅”。其次是延迟监控,精确到每个请求的响应时间,按模型分组求平均和分位数。一句话总结:成功率是“能不能成”,延迟是“够不够快”。最后是成本核算——这是Token与成本管理篇章最敏锐的探测器:每个模型的单价、每次调用的Token数、一天的累积支出。多模型路由的一大价值就是“好钢用在刀刃上”。

这三个指标组合起来,可以综合打分得到“性价比”指标。用加权评分表示:

其中 Success 是成功率,Latency 是平均延迟,$C$ 是该模型的单位成本,$T_{\text{target}}$ 是目标延迟,$C_{\text{lower}}$ 是成本下界,$\lambda_i$ 是权重系数。

没有统计就没有优化。效果统计是多模型路由的“仪表盘”,让你对每分钱的去向和每秒的延迟都了然于心。

S=λ1×Success+λ2×TtargetLatency+λ3×ClowerCS = \lambda_1 \times \text{Success} + \lambda_2 \times \frac{T_{\text{target}}}{\text{Latency}} + \lambda_3 \times \frac{C_{\text{lower}}}{C}
这就像招聘时把学历、能力、薪资要求打个综合分,分高者优先留用。
  1. 归一化指标延迟和成本都是“越小越好”,所以把它目标值做倒数或比值,变成“越大越好”
    TtargetLatency,ClowerC\frac{T_{\text{target}}}{\text{Latency}}, \quad \frac{C_{\text{lower}}}{C}
  2. 加权求和不同指标乘以各自的重要程度系数 $\lambda_i$,三者相加得出最终分数
    S=λ1×Success+λ2×TtargetLatency+λ3×ClowerCS = \lambda_1 \times \text{Success} + \lambda_2 \times \frac{T_{\text{target}}}{\text{Latency}} + \lambda_3 \times \frac{C_{\text{lower}}}{C}
  3. 排序与决策分数越高,说明这个模型越适合承载更多流量,供路由策略参考
    S1>S2>S3S_1 > S_2 > S_3

持续调优策略:调度中心如何越用越聪明?

有了统计数据,大厨就能改进菜谱。持续调优是多模型路由的灵魂所在,它不是一次性的静态配置,而是一个不断“反馈-修正”的闭环。

首先是动态调权:根据统计结果,自动微调各供应商的权重。比如统计发现 P3 的成本低且响应快,但当前只分到了 20% 流量,就可以缓缓把它升到 30%,同时压一压贵又慢的 P1 的权重。这种调整不是过山车式急转,而像调温水阀一样一点一点地拧。其次是告警介入:当某家供应商的延迟或错误率越过了红线,系统通过短信、钉钉或邮件通知工程师——毕竟有些决定还得人来做。人工智能负责体力活,人类负责拍板。最后是灰度实验:像美团新店先小范围试营业一样,让新路由规则先只作用于 5% 的流量,评估一段时间再全量上线,把试错成本压到最低。

动态调权的更新公式是一个简单的迭代过程:

其中 $\alpha$ 是学习率(步长),$S_i$ 是当前周期内第 $i$ 个模型的效果得分,$\bar{S}$ 是所有模型的平均分。

多模型路由不是“一锤子买卖”,而是一场永不停歇的马拉松。持续调优让调度系统像一个老练的操盘手,越用越顺手,越用越省钱。

wi(t+1)=wi(t)+α×(Si−Sˉ)w_i^{(t+1)} = w_i^{(t)} + \alpha \times (S_i - \bar{S})
高于平均分的加分,低于平均分的减分——这就是一个简洁的“优胜劣汰”规则。
  1. 计算偏差用单个模型的分数减去平均分,判断它高于还是低于平均水平
    Si−SˉS_i - \bar{S}
  2. 按比例调整偏差乘以学习率 $\alpha$(比如 0.01),控制每次调整的幅度,避免震荡
    wi(t+1)=wi(t)+α×(Si−Sˉ)w_i^{(t+1)} = w_i^{(t)} + \alpha \times (S_i - \bar{S})
  3. 迭代更新每个统计周期重复执行,权重逐渐被“打磨”到最优状态
    t→t+1t \rightarrow t+1

统一入口管理:一个调度台管所有供应商

试想一下,如果你管理的不是一个外卖App,而是同时用十个App各管十家餐厅,那天还没亮你就乱成一团了。多模型路由的中心化架构,天然就是统一入口管理的一把好手。

最直观的好处是API封装:你的业务代码只需要对接一个路由网关的API,由网关内部再调用各家模型的接口。这样如果哪天要换掉底层某家供应商,业务代码零改动。其次是密钥管理:各家模型的API Key被统一存放在路由网关的配置中心里,不会散落在多个服务的环境变量中到处泄露,像把所有贵重钥匙统一锁进一个保险柜里。最后是用量监控:所有流量都过一道闸口,路由层可以顺手记录每个业务方的调用量与花费,像财务对账一样清晰,做到“事前预算、事后追责”。

统一入口还天然承担了降级兜底功能。假设某一家顶级模型完全不可用,网关可以一键把所有它的流量导向备胎模型,而不需要感知到这一点的业务方有任何改动。这就像银行网点虽然关门了,但ATM和手机银行全都正常运转。

统一入口的调用逻辑可以概括为:

即任何一个外部请求先到路由器,由路由器决定并转发给某家供应商,用户只面对一个稳定的API端点。

统一入口是多模型路由的“门面担当”,它让复杂的多供应商调度,在用户眼里简单得像调用一个模型。而正是这种“复杂的简单”,才是工程艺术的最高境界。

Response=Router(Request→Provideri)\text{Response} = \text{Router}(\text{Request} \rightarrow \text{Provider}_i)
对外一把梭,对内百家花——这是多模型路由的统一哲学。
  1. 接收请求业务方的请求先到达路由网关,一个统一的接入点
    Request\text{Request}
  2. 内部路由网关内部按既定策略选择一家健康的供应商完成真实调用
    Request→Provideri\text{Request} \rightarrow \text{Provider}_i
  3. 返回响应网关把供应商的回复原路返回给业务方,全程业务方感知不到细节
    Response\text{Response}

AI 应用场景

场景一:企业级AI客服平台的多供应商容灾

阶段:LLM应用工程

解决的问题:某电商平台的AI客服依赖单一GPT服务商,一旦该服务商限流或断服,全线客服瘫掉。传统方式只能人工等待恢复,服务质量失控。

具体案例:某电商团队在客服系统前加了一层多模型路由网关,日常请求按“规则路由”分流:售前咨询走GPT,售后投诉走Claude(其情感理解更强),敏感内容审核走国内合规模型。路由层持续监控各服务商健康状态,一旦GPT限流,自动将流量转向Claude或国内模型,并配合指数退避重试。上线后客服系统可用性从 98% 提升到了 99.95%。

场景二:AIGC创业公司的成本压缩王牌

阶段:Token与成本管理

解决的问题:初创AI写作工具公司每个月调用费几十万元,全用顶级模型烧钱如流水,而实际上60%的生成任务用次一级的模型就能满足质量要求。

具体案例:这家公司利用语义路由识别请求复杂度。写小红书文案、标题生成等轻量任务路由到便宜的小模型;只有长篇小说创作、深度的复杂推理才调用顶级大模型。配合“成本优先”策略和动态调权,季度成本下降了45%,用户体验几乎没有变化。

场景三:智能体编排平台的质量-速率双优化

阶段:负载均衡与故障转移

解决的问题:一个AutoGPT式智能体平台单次任务会调用模型数十次,且内部存在大量并行子任务,需要把耗时和成本同时降下来。

具体案例:平台在网关中采用“最少连接”负载均衡算法,实时检测各供应商的响应并发数,把新的子任务派给当前排队最少的供应商。加上熔断机制:某供应商50%请求超时5秒即被熔断30秒,期间流量全部转移。智能体完成任务的平均耗时从85秒降到52秒,成功率提升至97%。

Python 演示

python99 行
import timeimport randomfrom collections import defaultdict  class ModelProvider:    """模拟一个LLM供应商"""     def __init__(self, name, weight, base_latency=0.1, fail_rate=0.05):        self.name = name        self.weight = weight        self.base_latency = base_latency        self.fail_rate = fail_rate        self.healthy = True        self.cool_until = 0.0        self.requests = 0        self.failures = 0     def invoke(self, prompt):        """模拟调用模型,按概率返回结果或抛异常"""        self.requests += 1        time.sleep(self.base_latency * random.uniform(0.8, 1.2))        if random.random() < self.fail_rate:            self.failures += 1            raise RuntimeError(f"{self.name} 调用失败")        return f"[{self.name}] 已处理: {prompt[:10]}..."  class MultiModelRouter:    """多模型路由器:加权轮询 + 熔断剔除"""     def __init__(self, providers, failure_threshold=3):        self.providers = providers        self.failure_threshold = failure_threshold        self.index = 0        self.circuit_break_count = defaultdict(int)     def pick(self):        """加权轮询挑选健康节点"""        healthy = [p for p in self.providers if p.healthy]        if not healthy:            raise RuntimeError("所有模型均不可用!")        total_weight = sum(p.weight for p in healthy)        r = random.uniform(0, total_weight)        upto = 0.0        for p in healthy:            upto += p.weight            if r <= upto:                return p        return healthy[-1]     def route(self, prompt):        """路由一个请求,处理故障剔除并尝试重试"""        for attempt in range(3):  # 最多尝试3次            provider = self.pick()            try:                result = provider.invoke(prompt)                self.circuit_break_count[provider.name] = 0                return result            except RuntimeError as e:                print(f"  尝试{attempt + 1}失败: {e}")                self.circuit_break_count[provider.name] += 1                if self.circuit_break_count[provider.name] >= self.failure_threshold:                    provider.healthy = False                    provider.cool_until = time.time() + 5  # 熔断5秒                    print(f"  >>> {provider.name} 已被熔断剔除!")         # 触发健康检查:手动恢复冷却结束的节点        self._recover()        raise RuntimeError("所有重试均失败")     def _recover(self):        """恢复冷却到期的节点"""        for p in self.providers:            if not p.healthy and time.time() >= p.cool_until:                p.healthy = True                self.circuit_break_count[p.name] = 0                print(f"  >>> {p.name} 冷却期结束,恢复服务")  if __name__ == "__main__":    providers = [        ModelProvider("GPT-4", weight=50, base_latency=0.2, fail_rate=0.1),        ModelProvider("Claude-3", weight=30, base_latency=0.15, fail_rate=0.05),        ModelProvider("国产模型", weight=20, base_latency=0.05, fail_rate=0.2),    ]    router = MultiModelRouter(providers, failure_threshold=2)     for i in range(10):        print(f"请求 {i+1}:")        try:            resp = router.route(f"第{i+1}个用户问题")            print(f"  成功 -> {resp}")        except RuntimeError as e:            print(f"  失败 -> {e}")        finally:            # 每隔几次请求检查一下恢复状态            if i % 3 == 2:                router._recover()
目的:模拟一个含熔断剔除能力的多模型路由器,演示如何按权重分发请求,并自动隔离多次失败的模型。
  1. class ModelProvider:定义一个模型供应商类,包含权重、故障率和健康状态
  2. self.fail_rate = fail_rate模拟真实供应商的随机故障,让演示动起来
  3. def pick(self):实现加权轮询核心算法,健康节点按权重比例被选中
  4. healthy = [p for p in self.providers if p.healthy]先过滤出健康节点,病号自动出局
  5. r = random.uniform(0, total_weight)随机落点法,权重越大被击中的概率越高
  6. self.circuit_break_count[provider.name] += 1连续失败计数,熔断器的计数器
  7. provider.healthy = False一旦失败次数超阈值,立即把该节点标记为不健康
  8. provider.cool_until = time.time() + 5设置熔断冷却期,5秒内不参与路由
  9. self._recover()定期检查冷却到期的节点,让它们自动恢复服务
  10. router = MultiModelRouter(providers, failure_threshold=2)组装三家“餐厅”并启动调度

常见误区

误区多模型路由就是随机把请求丢给任意一个模型,碰运气,反正模型不都一样嘛?

正解路由的核心不是“随机”而是“寻找最优”。它要根据路由策略,综合考虑请求的类型、成本预算、模型健康度和历史表现,做出有依据的决策。就像外卖平台不是随机派单,而是要精准匹配顾客口味与餐厅能力。盲目随机会导致成本失控、质量波动,正是多模型路由要解决的问题。

为何常见:初学者容易把“路由”类比成网络层的简单转发,殊不知LLM路由的关键差异在于“决策”,而不是“转发”。

误区既然一家模型又快又好,那让所有流量都走它不就行了?权重直接拉满到 100%

正解把所有鸡蛋放进一个篮子后,你失去了容灾能力和价格谈判筹码。而且权重分配要考虑多个目标:成本、延迟、成功率、供应商的速率限制(Rate Limit)。此外,一旦故障发生,从100%切到0%就是一场灾难。权重调整的目的是“风险分散的收益最大化”,而不是单纯把流量给最优模型。

为何常见:只关注单个指标的最优,忽略了系统级的稳定性和多样性价值。

误区模型调用失败了,就立刻重试同一个模型,一次不行就两次,这和熔断有什么关系呢?

正解熔断的核心是“连续失败后的主动放弃”。重试是针对偶发波动的兜底策略,而熔断是针对持续故障的主动保护策略,两者的触发条件、行为和目标完全不同。重复向一个已经故障的供应商发送请求只会加重问题,正如向一扇锁死的门反复踹,不如换扇窗户。

为何常见:把“重试”和“熔断”混为一谈,其实它们一个是“轻锤”,一个是“重盾”。

误区调优工作就是凭经验定期修改一下各家的权重数值,看到效果不好就再改回来。

正解成熟的调优依赖数据闭环:先统计成功率、延迟、成本等指标,再通过灰度实验验证,最后用迭代公式或算法自动微调权重。没有数据支撑的调优无异于闭眼开车。真正的调优是有节奏的,统计、决策、小流量、全量,每一步都站在数据上跳舞。

为何常见:因为手动调权短平快,看起来“好像没出大事”,但实际上浪费了很多隐性成本和时间。

面试题

Q1. 多模型路由的核心价值是什么?

单选题 · mid

  • A.让所有模型完全统一
  • B.平衡成本、延迟与质量← 正确答案
  • C.只使用最贵的模型
  • D.消除所有模型故障

答案:B。多模型路由像一个调度中心,核心是让合适请求走向合适模型,平衡成本、延迟和质量。它不追求统一,也不消灭故障,而是通过策略化分流提升整体效益。选其他选项都把路由的“平衡器”属性误读成了“极端化”或“绝对化”。

Q2. 在加权轮询算法中,权重为 50 的模型意味着什么?

单选题 · easy

  • A.它的价格是别人的 50 倍
  • B.它获得流量的概率相对更高← 正确答案
  • C.它一定会收到一半请求
  • D.它的延迟是别人的一半

答案:B。加权轮询中的权重是相对值,表示流量分配概率的高低。50 的权重比 20 的权重大,理论上获得的请求占比更高,但实际受随机性和健康状态影响,并非绝对一半。选其他项都是把权重误当成价格或性能的绝对值。

Q3. 某模型连续失败达到熔断阈值,路由器应当怎么做?

单选题 · mid

  • A.继续派单并收集更多数据
  • B.立即将其标记为不健康并隔离流量← 正确答案
  • C.把它的权重提高来测试稳定性
  • D.同时向它发送 10 倍请求

答案:B。熔断保护就是当故障连续发生达到阈值时,主动将故障节点剔除出候选池,避免雪崩效应。这是多模型路由的“保险丝”。继续派单、提权重或增大流量都只会加剧故障,属于典型的错误操作。

Q4. 以下哪些是路由效果统计中常用的指标?

多选题 · mid

  • A.请求成功率← 正确答案
  • B.平均响应延迟← 正确答案
  • C.单位请求成本← 正确答案
  • D.模型参数量大小

答案:ABC。效果统计关注的是“这个模型好不好用、贵不贵、快不快”,所以成功率、延迟、成本是三大核心指标。参数量是模型自身的静态属性,并非调度运营层的行为数据,因此不属于路由效果统计的指标。

Q5. 语义路由主要通过什么来判断请求该分给谁?

单选题 · easy

  • A.请求的字符长度
  • B.请求内容的语义相似度← 正确答案
  • C.用户所在的城市
  • D.请求发送的时间

答案:B。语义路由将请求文本转为向量,与各模型擅长的任务向量做相似度计算,再决定转发目标。它不是看请求的字面特征,而是理解内容的“语义”。字符长度、城市、时间都不具备这种智能感知能力。

Q6. 在多模型路由中,关于持续调优的做法正确的是?

多选题 · hard

  • A.根据统计得分微调各模型权重← 正确答案
  • B.用灰度实验小流量验证新策略← 正确答案
  • C.权重调整幅度越大收效越快
  • D.触发告警后由工程师介入评估← 正确答案

答案:ABD。持续调优的核心是“小步快跑”:根据得分微调权重(A)、灰度实验小流量验证(B)、异常告警后人工介入(D),都是闭环调优的典型动作。C 错在“幅度越大越快”,过大的调整会导致系统震荡和不确定风险,恰恰是调优的大忌。

Q7. 指数退避重试策略中,等待时间的变化规律是?

单选题 · mid

  • A.固定不变
  • B.逐渐缩短
  • C.指数增长← 正确答案
  • D.随机跳跃

答案:C。指数退避指每次重试前等待时间按 $t_k = t_0 \times 2^{k-1}$ 增长。这样既给故障服务方喘息时间,又避免了重试风暴。固定等待、缩短时间、随机跳跃都不是该策略的定义特征。

Q8. 统一入口管理API封装的主要好处是什么?

单选题 · easy

  • A.底层换模型时业务代码无需改动← 正确答案
  • B.让每个模型有自己的独立URL
  • C.所有请求都绕开路由网关
  • D.加快单次模型的推理速度

答案:A。统一入口封装把底层供应商的逻辑与上层业务解耦。业务方只对接网关API,底层换模型、调整路由策略都不感知。选项 B、C 与“统一入口”背道而驰,D 说的是推理本身的性能,不属于API封装的范畴。

Q9. 当所有模型都被熔断剔除时,多模型路由器应该怎么做?

单选题 · hard

  • A.永久停止所有请求
  • B.报错并等待人工重启
  • C.休息一段时间后自动恢复部分节点← 正确答案
  • D.删除所有路由配置

答案:C。熔断都带冷却期,冷却时间一到节点自动恢复。路由器的恢复机制是“让子弹飞一会儿”再重新试用。永久停摆、只靠人工重启或删除配置都会使系统丧失自愈能力,不是可运维的工程做法。

Q10. 多模型路由中“故障转移”的常见机制包括哪些?

多选题 · mid

  • A.超时重试← 正确答案
  • B.熔断保护← 正确答案
  • C.自动剔除← 正确答案
  • D.提高超时上限

答案:ABC。故障转移的标准三件套:超时重试(换人做)、熔断保护(暂停合作)、自动剔除(移出名单)。提高超时上限只是延长等待,并不会转移故障,反而会让用户等得更久,违背了故障转移的初衷。