假设你是一家火锅店的老板,后厨有两位大厨:老师傅的锅底二十年如一日地稳定,新师傅则带着让人眼前一亮的新配方。你想验证新配方能不能上桌,但绝不敢直接换掉老师傅——万一翻车,全店口碑毁于一旦。于是,你在传菜口立下规矩:每张订单先到传菜口,由传菜员按一张“分流单”决定送给哪个厨房。这个传菜口,就是 AI 云服务里的模型流量路由网关;那张“分流单”,就是路由策略。按比例摇号叫权重路由,按客人身份放行叫规则路由,按菜品内容分配叫内容路由。切得准不准、分得公不公平,直接决定“新师傅更好”这个结论可不可信。本文就用这套后厨故事,带你揭开流量路由策略的设计与落地。

岗位关联

熟练掌握流量路由策略,是 AI 从业者安全上线模型、从“能跑”走向“能控”的必备技能——它决定你能否在真实流量中科学地验证每一个模型决策。

目录
  1. 可视化演示
  2. 路由策略概述
  3. 权重路由策略
  4. 规则路由策略
  5. 内容路由策略
  6. 切分精度控制
  7. 实验可信度影响
  8. 配置实践方案
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

模型流量路由决定A/B测试与灰度发布中不同模型版本接收请求的比例。拖动滑块调整流量切分,观察权重/规则/内容路由策略与实验可信度。

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

路由核心 权重路由 规则路由 切分→路由→可信

路由策略概述

火锅店老板一直用老师傅的锅底配方,口碑常年稳定。最近新师傅研发出新配方,老板想验证它是不是更受欢迎,但绝不敢直接全换——万一翻车,整条街的客人都要遭殃。于是他在传菜口立了一套机制:每张订单先到传菜口,由传菜员按“分流单”决定送进哪个厨房。这个传菜口,就是模型流量路由策略在真实 AI 系统中的位置。

在 AI 云服务里,这个传菜口叫“路由网关”。用户的每个请求(订单)到达网关后,网关按照预先制定的策略,决定把它转发给模型 A(当前线上版本)还是模型 B(候选版本)。A/B 测试和灰度发布都依赖这套机制运转。路由决策点位于请求链路的入口,是整个实验的“分水岭”——它在哪里切,实验就在哪里分边。

设计一套路由策略,要回答四个问题:请求从哪来(用户、设备、渠道)、目标模型是谁(A/B 的地址与版本)、凭什么走(分配的规则)、各走多少(流量的权重)。从集合论角度看,路由就是把整个请求空间 Q 切分成两个互斥的子集:S_A 交给模型 A,S_B 交给模型 B,两者合起来恰好覆盖全部请求。

就像传菜口的“分流单”必须把每一张订单都送进某个厨房、且不能同时送进两个厨房一样,好的路由策略要做到“全覆盖、不重复”。这样,两位大厨的锅底好不好吃,才能各算各的账,互不搅浑。

route(q)={MA,q∈SAMB,q∈SB,SA∪SB=Q,SA∩SB=∅\displaystyle \text{route}(q) = \begin{cases} M_A, & q \in S_A \\ M_B, & q \in S_B \end{cases}, \qquad S_A \cup S_B = \mathcal{Q}, \quad S_A \cap S_B = \varnothing
这个公式是说:任意一条请求 q 只会被分配到 A 或 B 其中一个集合,且不会漏掉任何请求。
  1. 路由函数 route(q)输入一条请求 q,输出它应该被送去哪个模型。
    q↦route(q)q \mapsto \text{route}(q)
  2. 条件分支当 q 属于 S_A 时去模型 A,当 q 属于 S_B 时去模型 B。
    q∈SA⇒MA,q∈SB⇒MBq \in S_A \Rightarrow M_A, \qquad q \in S_B \Rightarrow M_B
  3. 全集合 QS_A 和 S_B 的并集等于所有请求构成的集合,保证每条请求都有去处。
    SA∪SB=QS_A \cup S_B = \mathcal{Q}
  4. 互斥性两个集合没有交集,保证一条请求不会被同时分给两个模型。
    SA∩SB=∅S_A \cap S_B = \varnothing

权重路由策略

老板决定先做小范围试菜:每 100 张订单,90 张照旧给老师傅,10 张随机给新师傅。这 10 张是纯摇号选的,不带任何偏见。这就是权重路由的雏形——不看客人是谁,只按固定比例分配。

权重路由(weight-based routing)是 A/B 测试中最简单也最常用的策略。网关为每个模型配置一个权重数值 s,请求到达时生成一个随机数,落在哪个区间就进哪个模型。它的最大优点是无状态、实现简单、对所有请求一视同仁,特别适合灰度发布的起步阶段。

权重值最终要归一化。假设模型 A 的权重 s_A=90,模型 B 的权重 s_B=10,那么 A 拿到的分流比例就是 90 除以 90 加 10,等于 0.9。渐进式灰度发布就是从这条算式出发:先给新模型一个极小的权重(比如 1%),观察稳定后再慢慢拧大水龙头。此外还要注意权重生效的粒度:按请求粒度分流最简单,但同一用户可能在两个模型间来回跳;按用户粒度分流则用 user_id 的哈希保证同一用户始终体验同一模型。

回到火锅店,权重路由就像“摇号试菜”——不看内容、不挑客人,纯随机。它最容易落地,但代价是:锅底口味对新老顾客的影响会被平均掉,想要知道“新配方到底赢没赢”,还得靠后面讲的样本量和实验可信度来把关。

wA=sAsA+sB,wB=sBsA+sB=1−wA\displaystyle w_A = \frac{s_A}{s_A + s_B}, \qquad w_B = \frac{s_B}{s_A + s_B} = 1 - w_A
权重的本质就是“自己占全体总和的份额”:两个模型份额相加永恒等于 1,就像火锅店 100 张订单无论怎么分,加起来还是 100 张。
  1. 分子 s_A分配给模型 A 的权重分数,比如 90。
    sA=90,sB=10s_A = 90, \qquad s_B = 10
  2. 分母求和所有候选模型的权重加总,比如 100。
    sA+sB=100s_A + s_B = 100
  3. 归一化A 的比例是自身权重除以总和,B 的比例用同样的方式并等于 1 减去 A。
    wA=90100=0.9,wA+wB=1w_A = \frac{90}{100} = 0.9, \qquad w_A + w_B = 1

规则路由策略

老板发现随机摇号有个隐患:万一 VIP 顾客吃到翻车的新锅底,客诉会直接爆炸。于是改规矩:VIP 顾客的订单一律给老师傅,普通顾客中每 10 单抽 1 单给新师傅。这种“按人下菜碟”的做法,就是规则路由。

规则路由(rule-based routing)让网关根据请求携带的字段——用户 ID、渠道、地域、设备型号等——匹配预设规则,命中哪条就走哪个模型。最常见的玩法是“白名单/黑名单”:白名单用户(内部员工、种子用户、签约体验官)优先尝试新模型 B;黑名单用户(对稳定性要求极高的核心大客户)永远留在模型 A。这样既保住了风险底线,又不耽误实验。

规则可以组合,也可以排序。网关按优先级从上到下匹配,第一条命中的规则生效:规则 1 拦截黑名单走 A;规则 2 放行白名单走 B;规则 3 没命中任何特殊名单的人按权重兜底分流。规则的判定是确定性的——同样的用户 ID 每次都会得到同样的结果。如果规则支持热更新,灰度期间“把某个出问题的租户临时拉黑”只需要几十秒,连重启都不需要。

规则路由就像“VIP 通道加员工试菜制度”,能让高风险客人避开新配方,又保证新配方有人试。它的短板是规则多了以后会变成一本越来越厚的“分流手册”:每加一条规则都要考虑和旧规则的优先级、交集、冲突,维护成本会悄悄上升。

route(q)={MB,if  uid(q) mod 100<10MA,otherwise\displaystyle \text{route}(q) = \begin{cases} M_B, & \text{if } \ \text{uid}(q) \bmod 100 < 10 \\ M_A, & \text{otherwise} \end{cases}
这是一条“按用户尾号分流”的规则:把用户 ID 对 100 取余,余数小于 10 的用户只占十分之一,他们被挑出来体验新模型 B。
  1. 用户标识 uid(q)从请求 q 中提取用户 ID,它是规则判定的输入。
    uid(q)∈{0,1,2,… }\text{uid}(q) \in \{0, 1, 2, \dots\}
  2. 取模运算把用户 ID 映射到 0 到 99 的区间,保证同样的人每次判定结果一致。
    r=uid(q) mod 100,r∈[0,99]r = \text{uid}(q) \bmod 100, \qquad r \in [0, 99]
  3. 命中新模型余数小于 10 的用户走模型 B,这批人约占全体的 10%。
    r<10⇒MBr < 10 \Rightarrow M_B
  4. 兜底回旧模型其余用户全部走模型 A,保证规则覆盖完整且没有漏单。
    r≥10⇒MAr \geq 10 \Rightarrow M_A

内容路由策略

老板进一步观察发现:新师傅的绝活是麻辣锅底,清汤锅底还是老师傅更地道。于是传菜员收到订单先看一眼菜品:麻辣锅底的订单给新师傅,清汤锅底的订单给老师傅。这就是内容路由——不关心“客人是谁”,只关心“这单是什么”。

内容路由(content-based routing)根据请求本身的内容特征做决策。AI 服务里的典型例子:文本翻译服务按语种分流,日韩语请求进专门优化过的小语种模型,英法语请求留在通用模型;图片审核服务按图片分辨率分流,高清大图进高精度审核模型,缩略图走轻量模型。内容特征还可以加工成“内容得分”,用打分和阈值来决策,比简单分类更细腻。

内容得分通常是特征加权求和的结果。假设我们从请求 x 里提取了 n 个特征 φ_j(x),比如图片尺寸、色彩复杂度、清晰度,每个特征乘以一个权重 w_j,相加得到总分。得分超过阈值 θ 的请求交给模型 B,否则交给模型 A。这样路由不再是“摸球”,而是“先体检、后分诊”——每个请求按自己的真实情况去最合适的模型。

内容路由最贴合业务直觉:麻辣给新师傅、清汤给老师傅,各展所长。但它要求请求内容能被解析、特征能被计算,而且特征一旦算错,“分错厨房”的代价会直接体现在用户体验上——所以实际落地时,特征提取的正确性是上线前的重点测试项。

score(x)=∑j=1nwj⋅ϕj(x),route(x)={MB,score(x)>θMA,score(x)≤θ\displaystyle \text{score}(x) = \sum_{j=1}^{n} w_j \cdot \phi_j(x), \qquad \text{route}(x) = \begin{cases} M_B, & \text{score}(x) > \theta \\ M_A, & \text{score}(x) \le \theta \end{cases}
这个公式把“这单是什么”变成了一串数字:特征越好、得分越高,就越值得送去能力更强的新模型 B。
  1. 内容特征 φ_j(x)从请求 x 中提取的第 j 个特征,例如图片分辨率、文本长度等数值。
    ϕj(x)∈R,j=1,2,…,n\phi_j(x) \in \mathbb{R}, \qquad j = 1, 2, \dots, n
  2. 加权求和每个特征乘上自己的权重再累加,得到内容的综合得分。
    score(x)=w1ϕ1(x)+w2ϕ2(x)+⋯+wnϕn(x)\text{score}(x) = w_1 \phi_1(x) + w_2 \phi_2(x) + \cdots + w_n \phi_n(x)
  3. 阈值比较得分大于 θ 的请求去模型 B,小于等于 θ 的请求留在模型 A。
    score(x)>θ⇒MB,score(x)≤θ⇒MA\text{score}(x) > \theta \Rightarrow M_B, \qquad \text{score}(x) \le \theta \Rightarrow M_A

切分精度控制

老板想知道新配方到底行不行,靠的是一本“试菜台账”:每天记下新师傅接了多少单、好评率是多少。但这里有个细节问题——说好 10% 的订单给新师傅,如果切分时手一抖给了 13%,这本账就算歪了。流量切分精度,就是“实际切的比例”和“想切的比例”之间的差距。

权重路由的切分本质是一次伯努利试验:每个请求独立地以概率 p 落入模型 B。当样本量为 N 时,实际观测到的 B 流量比例 p̂ 会围绕 p 上下波动,波动幅度用标准差 σ 衡量:σ 等于根号下 p 乘以 1 减 p 再除以 N。N 越大,波动越小。比如 p=0.1、N=1000 时,标准差约 0.0095,也就是大约 ±1%;如果 N 只有 100,标准差就飙到 3%,切分的账明显变歪。

工程上常用“一致性哈希”来提升确定性:对用户 ID 做哈希,再把哈希空间按权重切成连续区间,同一个用户永远落在同一个区间。这样既保证了比例稳定,又避免同一用户反复横跳。代价是哈希区间的粒度是离散的,流量极小(如 0.1%)时精度会受限,并且要付出一点状态维护的开销。切分精度并不是越高越好,关键在“切得够准”和“系统够轻”之间找平衡,就像传菜员不会为了 0.1% 的误差专门雇一个记账员。

σp^=p(1−p)N\displaystyle \sigma_{\hat{p}} = \sqrt{\frac{p(1-p)}{N}}
这条公式告诉我们:切分准不准,主要不取决于路由代码写得多花哨,而取决于流过的样本量有多大。
  1. 不确定性乘积p 是目标切分比例,1-p 是互补比例,两者相乘衡量单次观测的随机程度。
    p×(1−p)p \times (1 - p)
  2. 除以样本量 N样本量越大,每个观测的平均波动越小。
    p(1−p)N\frac{p(1-p)}{N}
  3. 开根号得到样本比例 p̂ 的标准差,也就是切分误差的典型幅度。
    σp^=p(1−p)N\sigma_{\hat{p}} = \sqrt{\frac{p(1-p)}{N}}

实验可信度影响

老板用了一个月的试菜台账,发现新师傅的好评率比老师傅高了 0.5%。这个结论能信吗?如果新师傅一共只接过 50 单,这 0.5% 很可能只是运气。实验可信度,回答的正是“这个结论靠不靠得住”。

路由策略从两个方向影响可信度。一是偏倚:如果切分不随机——比如规则路由把高消费的顾客都分给了 B——那 A/B 两组用户本来就不一样,对比结果被“选择性偏倚”污染。规则路由和内容路由尤其容易踩这个坑,因为它们天生按人群或内容分配,两组并不是同质人群。二是方差:即便没有偏倚,样本量不足时,结论也会在随机波动里摇摆不定。

判断两个模型的指标差异是否可靠,常用两比例 z 检验。设模型 A、B 分别观测到 n_A、n_B 个样本,成功率分别为 p̂_A、p̂_B,合并的成功率是 p̂。z 值越大,差异越不可能是巧合;当 |z| 大于 1.96 时,我们认为在 95% 置信水平下差异显著。这也是为什么灰度发布要求“最小样本量”——流量太小,随机波动盖过了真实差异,检验根本给不出结论。

火锅店的结论也要过“统计关”:先把台账记公平(避免偏倚),再等单量攒够(降低方差),最后用检验说话。没有可信度的试菜,就像拿 3 天的台账去换掉掌勺十年的大厨——赌的成分太大了。

z=p^A−p^Bp^(1−p^)(1nA+1nB),p^=nAp^A+nBp^BnA+nB\displaystyle z = \frac{\hat{p}_A - \hat{p}_B}{\sqrt{\hat{p}(1-\hat{p})\left(\dfrac{1}{n_A}+\dfrac{1}{n_B}\right)}}, \qquad \hat{p} = \frac{n_A \hat{p}_A + n_B \hat{p}_B}{n_A + n_B}
这条公式把“新师傅好 0.5%”翻译成统计学语言:信号除以噪声,比值超过 1.96 才敢说“真的更好”。
  1. 分子是信号两个模型观测指标之差,是我们要验证的核心差异。
    p^A−p^B\hat{p}_A - \hat{p}_B
  2. 合并比例 p̂把两个样本合并算出的总体成功率,作为共同的基准。
    p^=nAp^A+nBp^BnA+nB\hat{p} = \frac{n_A \hat{p}_A + n_B \hat{p}_B}{n_A + n_B}
  3. 分母是噪声由合并比例和两个样本量共同决定的标准误,样本越大分母越小。
    p^(1−p^)(1nA+1nB)\sqrt{\hat{p}(1-\hat{p})\left(\frac{1}{n_A}+\frac{1}{n_B}\right)}
  4. 显著阈值|z| 大于 1.96 时认为差异显著,结论可信。
    ∣z∣>1.96⇒差异显著|z| > 1.96 \Rightarrow \text{差异显著}

配置实践方案

老板终于准备把新师傅扶正,但后厨的规矩得先立起来:分流单放在哪里、谁有权修改、出了事怎么紧急切回。这套“后厨管理手册”,就是模型路由在企业级环境里的配置实践方案。

企业级 AI 云服务通常把路由配置放在独立的配置中心,支持热更新、版本审计和变更审批。配置项包括:各模型权重、规则列表、内容路由阈值、最小样本量门槛等。所有变更走审批流,配置带版本号,改坏了可以一键回滚到上一版。配置中心还要区分“实验配置”和“线上配置”:实验配置只影响灰度测试的流量,线上配置影响全量,两者权限边界必须清晰。

运行期必须配套监控与告警。核心指标有:各模型的 QPS、延迟、错误率,实际分流比例与配置值的偏差,以及偏差是否超过了容差。当新模型 B 的观测错误率明显高于模型 A 且超出容差 τ 时,系统自动触发回滚,把流量全部切回 A。性能与成本的双目标也要写进方案:高价值、低时延敏感的请求走性能更强的模型,低成本、高吞吐的场景用轻量模型兜底,让每一次路由都“物尽其用”。

后厨手册的意义在于“可预期、可追溯、可回退”。路由策略不是配一次就完事,而是一套持续运营的机制:像传菜口的指示牌一样,既要清晰可见,也要随时能翻回上一版。灰度发布有了这套机制,才真正称得上“可控”。

rollback:e^B−e^A>τ ⇒ stop(MB)\displaystyle \text{rollback}: \quad \hat{e}_B - \hat{e}_A > \tau \ \Rightarrow \ \text{stop}(M_B)
这条触发式告诉我们:不用等到人工排查,当新模型的坏账率超过旧模型一个可容忍的差值时,系统自动叫停新模型。
  1. 两类错误率ê_B 是新模型 B 的观测错误率,ê_A 是现网模型 A 的观测错误率。
    e^B,e^A\hat{e}_B, \qquad \hat{e}_A
  2. 差值触发两者之差超过容差 τ,才认为 B 明显更差。
    e^B−e^A>τ\hat{e}_B - \hat{e}_A > \tau
  3. 停用止损触发后立刻把 B 的流量归零,全部回到 A,优先保证服务稳定。
    stop(MB) ⇒ 100%→MA\text{stop}(M_B) \ \Rightarrow \ 100\% \to M_A

AI 应用场景

电商推荐系统 A/B 测试

阶段:模型上线验证 / 实验评估

解决的问题:传统做法要么全量替换推荐模型,要么只在离线数据集上评测。全量替换风险大,离线评测又和线上真实反馈存在偏差。权重路由让新推荐模型先接 5% 到 10% 的真实线上流量,在随机切分的同一批用户中直接对比点击率和转化率。

具体案例:某电商平台在双十一前对“猜你喜欢”页面做推荐模型 A/B 验证。路由网关按 95:5 放量,观测三天后新模型点击率提升 2.1%,于是按 90:10、80:20 逐级放量,最终全量上线。整个过程新模型始终在监控阈值以内,没有出现明显指标回退。

智能客服灰度发布

阶段:灰度发布 / 风险控制

解决的问题:客服机器人的错误回答直接影响付费客户满意度,无差别灰度会让 VIP 客户暴露在风险中。规则路由按用户身份控制实验人群,让种子用户先体验、核心客户永远在旧版本上。

具体案例:某 SaaS 客服平台用规则路由做新意图识别模型的灰度:白名单(内部员工和种子客户)先体验新模型;黑名单(战略客户)锁定旧模型;其余客户按权重 10% 放量。监控到某租户的误答率上升后,运营人员通过配置中心热更新规则,几十秒内将该租户移出新模型流量。

内容安全审核服务

阶段:在线推理 / 多模型编排

解决的问题:不同内容形态的审核模型各有所长,单一模型覆盖全部内容类型时性能与精度难以兼得。内容路由按请求内容特征分流,让每种模型只处理自己最擅长的内容。

具体案例:某内容安全服务按请求类型路由:图片请求进图片审核模型 B,文本请求进文本审核模型 A;视频抽帧后根据画面复杂度打分,复杂度高的帧路由到高精度审核模型,普通帧走低成本模型。最终整体审核延迟下降 30%,计算成本下降 18%,违规内容召回率反而提升。

Python 演示

python57 行
import mathimport random  class TrafficRouter:    def __init__(self, weight_a=0.9):        self.weight_a = weight_a        self.count_a = 0        self.count_b = 0     def route(self):        """按权重把请求路由到模型 A 或模型 B"""        if random.random() < self.weight_a:            self.count_a += 1            return "model_a"        self.count_b += 1        return "model_b"     def split_counts(self):        return self.count_a, self.count_b  def simulate_ab_test(total=10000, weight_a=0.9, rate_a=0.95, rate_b=0.97):    router = TrafficRouter(weight_a)    hit_a = 0    hit_b = 0    for _ in range(total):        model = router.route()        if model == "model_a":            if random.random() < rate_a:                hit_a += 1        else:            if random.random() < rate_b:                hit_b += 1    n_a, n_b = router.split_counts()    obs_a = hit_a / n_a if n_a else 0.0    obs_b = hit_b / n_b if n_b else 0.0    return n_a, n_b, obs_a, obs_b  def z_score(p_a, p_b, n_a, n_b):    """两比例 z 检验,|z| > 1.96 表示差异显著"""    p = (p_a * n_a + p_b * n_b) / (n_a + n_b)    se = math.sqrt(p * (1 - p) * (1.0 / n_a + 1.0 / n_b))    if se == 0:        return 0.0    return (p_a - p_b) / se  if __name__ == "__main__":    n_a, n_b, obs_a, obs_b = simulate_ab_test()    total = n_a + n_b    print("实际分流: A=%d B=%d (A占比 %.1f%%)" % (n_a, n_b, 100.0 * n_a / total))    print("模型A指标: %.4f (样本 %d)" % (obs_a, n_a))    print("模型B指标: %.4f (样本 %d)" % (obs_b, n_b))    z = z_score(obs_a, obs_b, n_a, n_b)    print("z 检验值: %.4f (|z|>1.96 时差异显著)" % z)
目的:用权重路由模拟器同时对模型 A、B 放量,统计实际分流比例和观测指标,再用 z 检验判断“新模型更好”的结论是否可信。
  1. if random.random() < self.weight_a:生成 [0,1) 随机数,小于权重就走模型 A,这是权重路由的核心判定。
  2. self.count_b += 1每次路由都记录实际去向,保证后面能算真实的切分比例。
  3. n_a, n_b = router.split_counts()实验结束后取回两个模型的真实样本量,用于计算比例和显著性。
  4. p = (p_a * n_a + p_b * n_b) / (n_a + n_b)合并两个样本的成功率,得到总体基准比例。
  5. se = math.sqrt(p * (1 - p) * (1.0 / n_a + 1.0 / n_b))计算合并标准误,样本量越大分母越小。
  6. return (p_a - p_b) / se返回 z 值,绝对值超过 1.96 才认为差异显著。

常见误区

误区新手常觉得 B 的分流比例越大、样本攒得越快,结论出得就越快,于是一上来就把灰度比例调到 50% 甚至更高。

正解样本量确实影响检验灵敏度,但加大切分比例不等于加快结论。灰度放量太快,如果新模型有缺陷,影响面会瞬间扩大;同时比例过大会让小概率的随机波动更加明显。科学做法是先用极小权重验证稳定性,再逐步放量。结论需要的是“固定数量的合格样本”,而不是“尽可能大的切分比例”。

为何常见:人们把“样本量”和“切分比例”混为一谈,忽略了比例越大风险面越大的事实。

误区有人觉得反正都是把请求分给两个模型,用规则还是用权重没有本质区别,选哪种都行。

正解权重路由对请求特征是“盲分”,两组用户随机同分布,实验是无偏的;规则路由按人群特征分配,两组用户天然不同质,对比结果可能被偏倚污染。引擎上两者可以组合使用,但分析实验结果时,规则路由必须额外考虑人群画像不均等的问题。

为何常见:初学者只看到“流量被分开了”这个结果,忽略了“分开之后两组人是否可比”这个更关键的统计学问题。

误区觉得只要路由逻辑是随机的,实验结果就必然可靠,不需要再管别的。

正解随机只解决了偏倚问题的一半。结果要可信还取决于三件事:样本量足够(否则方差太大)、指标未被污染(比如同一用户被切到两个模型产生相互影响)、切分过程真的独立(一致性哈希的区间设计要避免聚集效应)。随机只是必要条件,不是充分条件。

为何常见:把“随机”当成了万能的科学保证,忽略了统计学里“样本量与显著性”才是结论可信度的根本。

误区灰度上线时把权重和规则配好,之后就不再调整,直到实验结束。

正解路由策略是持续运营的机制:需要监控分流比例是否漂移、错误率是否触发回滚、规则是否需要热更新、灰度是否该继续放量。真实 AI 云服务里路由配置变更频率很高,而且必须配版本管理和审批流,出问题要能一键回退。

为何常见:把动态的路由机制理解成了静态配置,忽视了线上流量波动和模型行为变化带来的持续调整需求。

面试题

Q1. 模型流量路由策略的核心目标是什么?

单选题 · easy

  • A.让请求按策略分发到不同模型版本← 正确答案
  • B.提升模型训练时的收敛速度
  • C.压缩模型文件以节省存储空间
  • D.自动修复模型推理的错误结果

答案:A。流量路由解决的问题是“请求来了往哪个模型走”,对应火锅店传菜口的分单逻辑。训练速度、压缩体积、自动修复都不是路由网关的职责,它们属于训练优化与模型管理范畴。

Q2. 权重路由中设置 A:B = 90:10 的含义是什么?

单选题 · easy

  • A.百分之九十请求进入模型 A← 正确答案
  • B.模型 A 推理比 B 快九倍
  • C.模型 A 最多处理九十个请求
  • D.模型 B 错误率约为百分之十

答案:A。权重路由表示流量按比例分配,90:10 意味着长期来看约 90% 的请求走 A、10% 走 B。它不承诺速度、不限制总量、也不代表错误率,只描述分流份额。

Q3. 规则路由相比权重路由最大的优势是什么?

单选题 · mid

  • A.完全不需要维护任何规则配置
  • B.能按用户特征精准控制实验人群← 正确答案
  • C.保证所有用户流量完全随机分配
  • D.不需要网关参与请求的转发处理

答案:B。规则路由按用户 ID、渠道、地域等字段决策,能精确圈定白名单、黑名单人群,这是它相比“盲分”的权重路由的核心优势。A 和 C 恰恰是权重路由的特点,D 与路由机制的本质相悖。

Q4. 内容路由与权重路由的根本区别是什么?

单选题 · mid

  • A.内容路由根据请求特征决策← 正确答案
  • B.内容路由不需要任何模型参与
  • C.权重路由无法实现流量分配
  • D.两者在实现上完全没有任何差异

答案:A。内容路由先分析请求内容特征再决定去向,权重路由则纯靠随机数分配。内容路由当然需要模型参与特征提取,权重路由也实现流量分配,两者差异是实质性存在的,因此 B、C、D 都不成立。

Q5. 流量切分精度的误差主要来源于什么?

单选题 · mid

  • A.服务器 CPU 主频波动太大
  • B.小样本下随机波动的方差← 正确答案
  • C.模型参数量的持续增大
  • D.网络带宽的瞬时拥塞

答案:B。切分本质是独立随机试验,误差幅度由公式根号下 p(1-p)/N 决定,核心变量是样本量 N。CPU 波动、参数量、带宽拥塞都不是切分误差的直接来源。

Q6. 切分比例目标为 50%,在 95% 置信水准下想把误差控制在约 1%,所需样本量数量级最接近多少?

单选题 · extreme

  • A.约一百个请求
  • B.约一千个请求
  • C.约一万个请求← 正确答案
  • D.约一百万个请求

答案:C。误差公式约等于根号下 0.25/N,要让它降到 0.01,需要 0.25/N 约等于 0.0001,即 N 约等于 2500 再乘上 z 系数的平方,接近一万的量级。一百或一千个请求的随机波动仍然太大。

Q7. 规则路由可能破坏实验可信度的主要原因是什么?

单选题 · hard

  • A.分流与用户特征相关导致偏倚← 正确答案
  • B.规则引擎消耗了额外计算资源
  • C.新旧模型使用了相同的日志字段
  • D.白名单用户通常注册时间更早

答案:A。规则路由按人群特征分配流量,导致 A/B 两组用户天然不同质,这是最典型的偏倚来源。计算资源、日志字段、注册时间都不是可信度的核心威胁。

Q8. 灰度发布通常采用的权重起步策略是什么?

单选题 · easy

  • A.从极低权重逐步放量到全量← 正确答案
  • B.直接从百分之五十开始灰度
  • C.第一天就切换到全量新模型
  • D.关闭旧模型并删除日志数据

答案:A。灰度发布讲究“小步快跑、风险可控”,先从 1% 或 5% 的极小权重起步,观察稳定后再逐步放大。直接切 50% 或全量违背了灰度发布的初衷。

Q9. 权重路由与规则路由结合使用的典型方式有哪些?

多选题 · mid

  • A.先按规则圈定人群再按权重分流← 正确答案
  • B.规则未命中时落入权重兜底策略← 正确答案
  • C.两种策略只能单独使用无法组合
  • D.在内容特征上叠加权重进行调节← 正确答案

答案:ABD。工程实践中常把规则作为第一层闸门,规则命中走指定模型,没命中的流量落到权重策略继续随机分配;内容特征同样可以和权重叠加。C 说“无法组合”是错误的,规则与权重天然可以分层协作。

Q10. 提升 A/B 实验结果可信度的措施有哪些?

多选题 · hard

  • A.保证分流随机且两组用户可比← 正确答案
  • B.攒够最小样本量后再下结论← 正确答案
  • C.全程监控并隔离指标污染源← 正确答案
  • D.把实验周期压缩到最短一天

答案:ABC。可信度 = 无偏倚 + 低方差 + 无污染。随机分流保证两组可比,最小样本量控制方差,监控隔离防止指标串扰。压缩实验周期只会让样本更少、结论更不可靠,所以 D 不选。