假设你是一家热门餐厅的经理。后厨里最耀眼的是那位招牌主厨,他出菜又快又稳,绝大多数客人都满意而归——他就是你家的“主模型”。但再稳定的主厨也会“翻车”:让客人干等二十分钟不上菜、忽然说今天不做这道菜、端出来的菜又咸又苦,甚至备料用完直接歇火。成熟的餐厅从来不会把希望全押在一个人身上,而是提前排好后手:让副厨顶上、从备菜柜端出预制菜、或送上一道万无一失的招牌例汤。而作为经理,你手里始终有一本账,记录着后备方案被启用的次数、原因和比例——这本账,就是 AI 工程里的“fallback 率统计”。大语言模型推理服务同样会失败,系统需要降级兜底,而统计 fallback 率,就是给服务可靠性画一张“体检表”。接下来,我们就从这座后厨出发,把这本账算清楚。

岗位关联

学会量化模型推理失败与降级兜底,是从“调通模型”进阶到“扛住线上故障”的关键一步,也是 AI 工程师迈向 SRE/MLOps 高价值岗位的必修课。

目录
  1. 可视化演示
  2. 失败类型分类
  3. 降级策略设计
  4. 触发条件判定
  5. 指标统计口径
  6. 监控告警体系
  7. 可靠性评估
  8. 容错优化实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

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

失败类型分类

回到厨房。主厨“翻车”的方式其实各不相同:他动作太慢,客人在门口排队快把桌子拍烂了,这是“超时”;他今天心情不好,对加急单一律摆手拒绝,这是“限流”;他把糖当成盐,端上一道味道诡异的菜,这是“无效响应”;最糟的是冰箱空了、灶台坏了,他干脆开不了火,这是“资源耗尽”。四种翻车,四种性质,处理方式也天差地别,所以作为经理,第一步就是把它们分门别类记清楚。

AI 推理服务里的“主模型”也会以类似方式失败。所谓推理失败,指模型服务没能按时、按质返回可用结果。在工程上,我们习惯把失败分成四大类:超时失败(latency timeout)、限流拒绝(rate limiting)、无效响应(invalid response)和资源耗尽(resource exhaustion,如 GPU OOM)。只有先统一分类,后续的 fallback 策略才能对症下药——就像厨房里不同的翻车要用不同的补救方法。

超时失败指请求在预设时间(如 5 秒)内没有返回,通常由模型推理过慢、排队过长引起。限流拒绝是服务端因并发超过配额主动丢弃请求,返回 429 之类状态码。无效响应指请求成功返回,但内容是空字符串、非法 JSON、或明显不符合输出格式的乱码。资源耗尽则是 GPU 显存、CPU 内存或连接池被占满导致新请求直接失败。四类失败的触发原因、恢复手段和业务影响各不相同,统计时必须分开计数。

经理把这四类翻车分别记上四种颜色的小旗子,往后一看旗子颜色就知道今天厨房的毛病出在哪。这正是失败分类的价值:它不是纸上谈兵,而是所有降级策略、告警规则和容量规划共同的地基。

P(Failure)=Pto+Prl+Pir+Pre\displaystyle \text{P(Failure)} = P_{to} + P_{rl} + P_{ir} + P_{re}
整体失败率等于四类失败占比之和。只有把失败拆成这四块,才能知道该买新烤箱(扩容)还是该给主厨配助手(优化单次响应)。
  1. 总失败概率表示单次请求最终走向失败的整体概率,由右边各类占比相加得到
    P(Failure)\text{P(Failure)}
  2. 超时失败占比请求超时类型在全部请求中占的比例,是第一类翻车
    PtoP_{to}
  3. 限流失败占比被服务端限流拒绝的请求占比,代表第二类翻车
    PrlP_{rl}
  4. 无效响应占比返回了但内容完全不可用的情况占比,是第三类翻车
    PirP_{ir}
  5. 资源耗尽占比显存、内存等资源不足导致的失败占比,是第四类翻车
    PreP_{re}

降级策略设计

分类记清楚之后,经理就要排兵布阵了。主厨翻车时,你的后手有哪些?最自然的想法是喊他再试一次——万一刚才只是手滑,这叫“重试”。如果他还是一副摆烂的样子,就让副厨顶上,手艺差一点但至少能出菜,这叫“备选模型”。要是这道菜之前做过许多次,直接从备菜柜端出几乎一样的,这叫“缓存兜底”。实在没办法,就上一道永远不会出错的例汤,客人至少不会被饿着,这叫“模板响应”。这四层后手,就是厨房的“多级降级策略”。

在系统中,降级(degradation)指主链路失败时按预设计划切换到备用路径,保证服务不中断。多级 fallback 策略通常按“成本从低到高、效果从次到优”排列成一条链路:先重试(成本最低但可能加重负载)、再换模型(效果较好但稍贵)、再查缓存(极快但可能过期)、最后回退模板(永远可用但体验单一)。

工程上,这四级策略可以形式化为一个有序策略集合。每当主模型失败,系统按顺序尝试集合中的策略,直到某一级返回可用结果,或全部失败后才判定为硬失败。

预案写得越清楚,关键时刻就越不慌。厨房里每一道菜该配哪几层后手,就像系统里每个接口该配哪几级降级,都是需要在平时反复演练的功课。

S={Sretry,Smodel,Scache,Stpl}\displaystyle S = \{ S_{\text{retry}}, S_{\text{model}}, S_{\text{cache}}, S_{\text{tpl}} \}
S 是降级策略集合,依次排着重试、备选模型、缓存、模板四级方案。它就像厨房里写好的“应急预案手册”,每一页对应一种补救动作。
  1. 策略集合表示一套完整的降级预案,花括号代表其中包含多个可选方案
    S={⋯ }S = \{ \cdots \}
  2. 重试策略对主模型进行有限次数的重试,成本最低但要防止反复冲击主服务
    SretryS_{\text{retry}}
  3. 备选模型策略切换到性能稍差但可用的替代模型继续推理
    SmodelS_{\text{model}}
  4. 缓存兜底策略从语义缓存中取历史相似结果返回,速度快、成本极低
    ScacheS_{\text{cache}}
  5. 模板响应策略最后一层保险,返回固定话术保证用户无论如何都能得到响应
    StplS_{\text{tpl}}

触发条件判定

有了预案,还得知道“什么时候启用”。经理不可能凭感觉决定要不要让副厨顶上——他需要一个明确的信号:比如主厨连续三次拒绝接单,或者一道菜等了十五分钟还没出。这些信号就是厨房里的“触发条件”。

系统中同样要明确定义触发条件,避免乱降级或该降不降。最常见的做法是:先识别错误码(超时、429、500 等是否落在失败集合),再结合时间窗口做异常检测——例如单次超时不一定立刻降级,但 1 分钟窗口内超时超过 5 次,或平均延迟越过基线,就判定为异常并准备降级。最后还要检查当前的重试次数是否达到上限,防止无休止重试把系统拖垮。

触发判定可以用一个逻辑表达式来概括:

信号明确,后手才能果断。就像经理的预案手册第一页永远写着“哪些旗子亮了该喊副厨”,系统里这份触发规则,也正是 fallback 链路准确动作的交通信号灯。

Trigger=(err∈Efail)∧(nretry<Nmax⁡)\displaystyle \text{Trigger} = (err \in E_{\text{fail}}) \land (n_{\text{retry}} < N_{\max})
当返回的错误码属于失败集合、且重试次数还没超过上限时,触发信号为真,系统启动降级链路。
  1. 错误码命中检查本次返回的错误码是否在预先定义的失败集合中
    err∈Efailerr \in E_{\text{fail}}
  2. 重试次数条件已重试次数尚未达到上限,保证还有降级空间
    nretry<Nmax⁡n_{\text{retry}} < N_{\max}
  3. 与运算两个条件必须同时为真才触发,防止误判和过度反应
    ∧\land
  4. 触发信号最终的布尔结果,为真时进入降级流程
    Trigger\text{Trigger}

指标统计口径

后手启用之后,经理最重要的工作来了:算账。同样一次副厨救场,不同的记法会得出完全不同的结论。如果把副厨出的菜也算作“成功”,那厨房看起来永远岁月静好;但如果把它单独记成"fallback",你才能真正发现主厨正在频繁出问题。口径,就是账本的记账规则。

在监控体系里,fallback 率是最核心的稳定性指标之一。它的标准定义非常简单清晰:统计窗口内,走了降级路径的请求数除以全部推理请求数。但正因为公式简单,细节反而容易被忽视——窗口取多久、哪些请求算分母、fallback 成功和失败是否分开记,都会影响最终数字的可信度。

账本记歪了,决策就会歪。现实中还要做分层统计——按模型、按接口、按业务线分别记账,并且定期做数据校正,剔除压测流量和无效探测,防止“假数据”污染“真结论”。只有口径统一,后续的告警阈值和可靠性评估才立得住。

FallbackRate=NfallbackNtotal×100%\displaystyle \text{FallbackRate} = \frac{N_{\text{fallback}}}{N_{\text{total}}} \times 100\%
fallback 率 = 降级请求数 ÷ 总请求数 × 100%。它衡量的是“主链路不可靠的程度”,而不是“服务最终有没有响应”。
  1. 分子(降级次数)窗口内实际走了降级链路的请求数量,无论降级本身是否成功
    NfallbackN_{\text{fallback}}
  2. 分母(总请求数)同一统计窗口内所有进入推理服务的请求总数
    NtotalN_{\text{total}}
  3. 比例换算把比值乘以 100% 变成人类更易读的百分比
    ×100%\times 100\%
  4. 结果指标得到的就是 fallback 率,通常按分钟、小时或天分桶统计
    FallbackRate\text{FallbackRate}

监控告警体系

账算清楚了,还得有人天天盯着。经理的办公室里挂着一块大板子,上面贴着 fallback 率的每小时走势图,旁边放着三种颜色的小贴纸:绿色代表正常巡检,黄色代表留意观察,红色代表立刻召集后厨开会。这张板子,就是厨房的监控看板。

AI 工程里的监控告警体系是 fallback 统计的“下游消费者”。指标看板负责可视化展示 fallback 率的实时值与趋势;告警分级把异常按严重程度分成 P0/P1/P2,并配套不同的响应时长要求。一旦告警触发,根因分析链路会串联日志、trace 和指标,快速定位是主模型故障、上游流量突增还是最近一次发布引入了问题。最后,定期巡检报告把这些信息沉淀成团队的知识资产。

看板、告警、根因、巡检,四件套配齐,经理才能做到“大事不过夜、小事不漏记”。监控不是把数字画出来就完了,它的终点是让每一次异常都能被快速定位、复盘和预防。

L={P0,r≥rP0P1,r≥rP1P2,r≥rP2\displaystyle L = \begin{cases} P_0, & r \geq r_{P0} \\ P_1, & r \geq r_{P1} \\ P_2, & r \geq r_{P2} \end{cases}
告警等级 L 由当前 fallback 率 r 落进哪个阈值区间决定:超过最高阈值就是 P0 一级告警,依次降级。
  1. 一级告警fallback 率超过最严重的阈值 r_P0,立即通知值班人员处理
    P0,r≥rP0P_0, r \geq r_{P0}
  2. 二级告警超过次高阈值 r_P1 时触发,要求较快的响应处理
    P1,r≥rP1P_1, r \geq r_{P1}
  3. 三级告警超过普通阈值 r_P2 时仅记录提醒,纳入日常巡检即可
    P2,r≥rP2P_2, r \geq r_{P2}

可靠性评估

厨房好不好,最终要看客人买不买账。哪怕主厨经常翻车,只要副厨总能及时顶上,客人照样吃得满意——可这种“表面繁荣”掩盖了真相。经理真正要回答的问题是:厨房的主链路到底有多可靠?这需要把 fallback 成功和彻底失败区分开,算一笔更严肃的账。

在可靠性工程里,可用性(Availability)是衡量服务可靠性的核心指标。与 fallback 率不同,它关心的是“最终有没有硬失败”:只有那些连降级都没救回来的请求,才算真正的失败。可用性越高,说明系统面对故障的韧性越强。结合 SLO 目标对比、fallback 率趋势分析和容量规划,就能预判风险、提前扩容,而不是等故障发生后才手忙脚乱。

可靠性评估还要结合 SLO 目标做趋势分析和容量规划:fallback 率缓慢爬升往往预示着容量即将见顶,而可用性跌破 SLO 则必须触发投入。这就像经理看着账本预测节假日人手够不够——数据不是用来回顾的,是用来提前决策的。

Availability=Ntotal−NfailNtotal×100%\displaystyle \text{Availability} = \frac{N_{\text{total}} - N_{\text{fail}}}{N_{\text{total}}} \times 100\%
可用性 =(总请求 − 硬失败请求)÷ 总请求 × 100%。它与 fallback 率配合使用,一个看“跌倒频率”,一个看“最终能不能爬起来”。
  1. 成功请求数总请求数减去彻底失败的请求数,即最终成功服务的量
    Ntotal−NfailN_{\text{total}} - N_{\text{fail}}
  2. 成功比率成功请求占全部请求的比例,是可用性的核心
    Ntotal−NfailNtotal\frac{N_{\text{total}} - N_{\text{fail}}}{N_{\text{total}}}
  3. 百分比换算转为百分数便于和 SLO 目标对照
    ×100%\times 100\%
  4. 可用性指标最终得到的可用性数值,例如 99.9%
    Availability\text{Availability}

容错优化实践

账本、看板、预案都有了,还差最后一步:持续改进。经理每个月都要开一次复盘会,把上个月的 fallback 记录翻出来,看看哪种翻车最多、哪层后手最常被用到、副厨的加班成本是不是太高了。然后调整预案:给主厨加培训、给副厨换流程、把预制菜备得更足。这个循环,就是容错优化的 PDCA。

工程上的容错优化实践围绕四个动作展开:策略调优(调整各级 fallback 的顺序、次数与超时)、成本控制(为每级策略核算调用成本)、效果验证(通过 A/B 对比确认优化确实降低了 fallback 率)、持续改进(把结论沉淀为新的监控规则和预案)。

优化不是越稳越好,而是稳与省的平衡。经理不会为了万无一失给每道菜都配三个副厨,工程师也不会把所有请求都无脑切到重型备选模型。用数据驱动每一轮调优,fallback 体系才会越用越顺手、越跑越省。

Costtotal=NretryCretry+NmodelCmodel+NcacheCcache\displaystyle \text{Cost}_{\text{total}} = N_{\text{retry}} C_{\text{retry}} + N_{\text{model}} C_{\text{model}} + N_{\text{cache}} C_{\text{cache}}
多级降级的总成本等于各级策略的调用次数乘以各自的单位成本。重试和备选模型通常较贵,缓存最便宜,成本模型帮你决定“哪一层该多用、哪一层该少用”。
  1. 重试开销重试次数乘以单次重试带来的额外计算成本
    NretryCretryN_{\text{retry}} C_{\text{retry}}
  2. 模型开销备选模型调用次数乘以单次推理成本
    NmodelCmodelN_{\text{model}} C_{\text{model}}
  3. 缓存开销缓存命中次数乘以极低的单位命中成本
    NcacheCcacheN_{\text{cache}} C_{\text{cache}}
  4. 成本累加各级成本用加号连接,表示总开销是各项之和
    ++
  5. 总成本指标得到整个降级链路的资源消耗总额,用于指导策略调优与预算决策
    Costtotal\text{Cost}_{\text{total}}

AI 应用场景

智能客服机器人的推理容错

阶段:模型部署与在线服务

解决的问题:客服机器人接入大模型后,高峰期 API 超时与限流频繁,用户对话被硬中断。传统做法是超时就报错,体验很差。引入 fallback 统计体系后,超时先重试一次,再切换轻量问答模型,仍失败则返回知识库缓存答案,最后用“请稍后重试”模板兜底。fallback 率看板实时反映各级降级启用比例。

具体案例:某银行智能客服在大促期间主模型 429 限流率飙升,fallback 率一度达到 18%。通过监控发现是上游 QPS 超配额,随即调大限流配额并优化重试退避策略,fallback 率回落至 4%,可用性保持在 99.9% 以上。

推荐系统的降级保障

阶段:在线推理与降级

解决的问题:实时推荐服务在流量洪峰时推理超时,导致首页推荐位空白、用户跳出率升高。用多级 fallback 策略:重试 → 热门物品缓存 → 默认推荐模板,并用 fallback 率统计评估每一层兜底的效果与命中率。

具体案例:电商大促当晚,推荐模型 QPS 翻三倍,fallback 率从 3% 冲到 21%。根因分析定位到缓存预热不足,优化后缓存命中率提升,fallback 率稳定在 5% 以内,硬失败率降为 0。

实时推理高可用架构的可靠性评估

阶段:容量规划与可靠性运维

解决的问题:低延迟实时推理(如风控、自动驾驶仿真)对可用性要求苛刻,但团队说不清服务到底多可靠。通过统一 fallback 率与可用性统计口径,结合 SLO 反推告警阈值,形成周度巡检报告,量化每一次故障的影响面。

具体案例:某风控推理集群某区域 GPU OOM,fallback 率从 2% 飙升到 35%,自动触发 P0 告警。值班人员依据根因分析链路定位是显存泄漏,快速扩容并重启实例,可用性当周恢复至 99.95%。

Python 演示

python49 行
import randomfrom collections import deque  class FallbackMonitor:    """统计模型推理失败与 fallback 率的仿真监控器"""     def __init__(self, window=200):        self.window = window        self.records = deque(maxlen=window)     def add(self, kind):        # kind: 'ok' 主模型成功,'fallback' 降级成功,'failed' 硬失败        self.records.append(kind)     def fallback_rate(self):        if not self.records:            return 0.0        n_fb = sum(1 for k in self.records if k == 'fallback')        return n_fb / len(self.records) * 100     def availability(self):        if not self.records:            return 100.0        n_fail = sum(1 for k in self.records if k == 'failed')        return (1 - n_fail / len(self.records)) * 100  def simulate_request(t):    """按时间步模拟一次请求结果,后期注入故障"""    r = random.random()    fail_prob = 0.08 + 0.30 * max(0, (t - 300) / 700)    if r > fail_prob:        return 'ok'    return 'fallback' if random.random() < 0.7 else 'failed'  def main():    random.seed(7)    monitor = FallbackMonitor(window=200)    for t in range(1000):        monitor.add(simulate_request(t))        if (t + 1) % 200 == 0:            print('step %4d | fallback率 %.2f%% | 可用性 %.2f%%' % (                t + 1, monitor.fallback_rate(), monitor.availability()))  if __name__ == '__main__':    main()
目的:仿真 1000 次推理请求,模拟主模型后期故障,统计滑动窗口内的 fallback 率与可用性,演示“统一口径 + 滑窗统计”的工程实现。
  1. from collections import deque引入双端队列,用它实现滑动窗口,天然只保留最近 N 条记录
  2. self.records = deque(maxlen=window)maxlen 参数让队列自动丢弃最旧记录,无需手动清理
  3. def add(self, kind)每次推理结束调用,把结果(成功/降级/硬失败)记入账本
  4. n_fb = sum(1 for k in self.records if k == 'fallback')数出窗口内降级次数,是 fallback 率公式的分子
  5. return n_fb / len(self.records) * 100除以总请求数再乘 100%,得到百分比形式的 fallback 率
  6. n_fail = sum(1 for k in self.records if k == 'failed')统计硬失败次数,用于算可用性
  7. fail_prob = 0.08 + 0.30 * max(0, (t - 300) / 700)300 步后注入故障,模拟主模型稳定性恶化
  8. return 'fallback' if random.random() < 0.7 else 'failed'降级有 70% 成功率,模拟备选链路并不绝对可靠
  9. monitor = FallbackMonitor(window=200)窗口大小就是统计口径,窗口越小对瞬时波动越敏感

常见误区

误区反正用户最终拿到了响应,fallback 只是一个小插曲,不用太在意,统计时也不把它当回事。

正解fallback 是主链路出问题的警报器。每次 fallback 都意味着主模型没有完成任务,如果对 fallback 视而不见,小问题会拖成大故障。正确做法是把 fallback 单独计数、单独看板、单独设阈值,把它当作主链路健康的反向指标。

为何常见:从用户视角看体验没有受损,很容易被“最终结果 OK”迷惑,忽略了内部链路的隐患。

误区主模型失败多打几次电话就好了,重试又简单又有效,为什么不重试到成功为止?

正解无上限重试会放大失败流量形成重试风暴,把已经过载的服务彻底压垮。正确做法是设置重试上限(如 1-2 次)、采用指数退避,并配合熔断和降级。就像厨房里主厨手忙脚乱时还不停催他,只会让厨房更乱。

为何常见:重试逻辑写起来最简单,而且在小流量下确实有效,容易形成路径依赖。

误区fallback 是失败的表现,越低说明系统越健康,天天盯着把它压到 0 就对了。

正解fallback 率长期为 0 有时反而说明降级链路从未被验证,一旦真正故障,预案可能根本跑不通。合理的目标不是 0,而是把 fallback 率控制在 SLO 允许的区间,并定期做故障演练验证降级路径的有效性。

为何常见:把指标当成了荣誉徽章,而不是发现问题的工具,忽略了降级链路本身也需要被测试。

误区阈值差不多就行,30% 看起来合理,先设上以后再说。

正解阈值应由 SLO 反推:先定可用性目标(如 99.9%),再结合故障时长和流量推导出允许的 fallback 率上限,最后留出告警余量。不同业务、不同时段阈值可能不同,需要周期性校准,否则只会导致告警泛滥或漏报。

为何常见:反推需要建模和计算,拍脑袋最快,但往往脱离了自身业务的实际容量与容忍度。

误区fallback 链路平时又不走,操什么心,把主模型盯好就行。

正解兜底服务也会故障、也会过期、也会配置错误。如果 fallback 本身挂了,降级就变成空谈,硬失败率会飙升。监控体系必须同时覆盖主链路和降级链路,用双重成功率指标守护整条链路的健康。

为何常见:兜底链路平时流量小、不易暴露问题,容易被优先级排期忽略。

面试题

Q1. Fallback 率的统计分母应该取什么?

单选题 · easy

  • A.全部推理请求数← 正确答案
  • B.失败推理请求数
  • C.超时推理请求数
  • D.成功推理请求数

答案:A。fallback 率是降级请求占全部请求的比例,分母必须包含所有进入系统的请求。B/C/D 都是某种子集,会导致指标偏大或偏小,无法反映主链路全貌。

Q2. 下列哪种情况不应触发 fallback 降级?

单选题 · easy

  • A.模型超时无响应
  • B.接口被限流拒绝
  • C.用户主动取消请求← 正确答案
  • D.模型返回空内容

答案:C。用户主动取消是业务侧行为,不是模型故障,触发降级只会浪费资源。超时、限流、空响应都属于模型服务侧失败,应纳入降级判定。

Q3. 主模型连续失败时,正确的降级顺序是?

单选题 · mid

  • A.先缓存兜底再重试
  • B.先重试再换备选模型← 正确答案
  • C.直接切换备选模型
  • D.立即返回错误提示

答案:B。标准顺序是先做有限次重试(成本最低),再切换备选模型(效果较好),最后才是缓存和模板。先缓存会导致内容过时,直接切换模型成本高,立即报错则放弃了所有兜底机会。

Q4. 多级降级策略通常包含以下哪些?

多选题 · mid

  • A.有限次数重试← 正确答案
  • B.切换备选模型← 正确答案
  • C.命中本地缓存← 正确答案
  • D.忽略用户请求

答案:ABC。重试、备选模型、缓存兜底是标准的三级降级阶梯。忽略用户请求等同于直接失败,不属于降级策略。

Q5. 以下哪种情况会导致 fallback 率虚高?

单选题 · mid

  • A.统计窗口样本过少← 正确答案
  • B.成功请求数量增加
  • C.主模型响应速度变快
  • D.兜底服务全部下线路

答案:A。窗口样本过少时,几次降级就会让比例剧烈波动,产生虚高或虚低。成功增多、响应变快会降低而不是升高 fallback 率;兜底下线会升高硬失败率而非 fallback 率。

Q6. 可用性指标的正确计算方式是?

单选题 · hard

  • A.成功请求数除以总请求数← 正确答案
  • B.失败请求数除以总请求数
  • C.降级请求数除以总请求数
  • D.重试次数除以成功请求数

答案:A。可用性 =(总请求 − 硬失败)/ 总请求 = 成功数 / 总请求数。B 是失败率,C 是 fallback 率,D 是重试比。三个指标角度不同,不可混用。

Q7. fallback 率明显上升时,根因分析应排查哪些?

多选题 · hard

  • A.检查主模型服务状态← 正确答案
  • B.分析上游流量特征← 正确答案
  • C.复核最近代码发布← 正确答案
  • D.忽略监控历史数据

答案:ABC。主模型故障(如 OOM、过载)、流量突增(如热点请求)、代码发布引入 bug 是最常见的三大根因。忽略历史数据会失去对比基线,属于错误做法。

Q8. 告警阈值设定的合理依据是什么?

单选题 · mid

  • A.由SLO目标反推← 正确答案
  • B.拍脑袋随意指定
  • C.参考同行公开数值
  • D.永远设为固定百分百

答案:A。阈值必须从业务 SLO 反推:先定可用性目标,再结合故障时长和流量推导可容忍的 fallback 率,还要留出告警余量。同行数值、固定值都脱离自身业务。

Q9. 关于 fallback 率监控,以下说法正确的是?

单选题 · mid

  • A.降级链路也需单独监控← 正确答案
  • B.只要主模型稳定即可
  • C.兜底服务状态不重要
  • D.只需关注月均总数值

答案:A。fallback 链路本身可能故障、过期或配置错误,必须单独监控其成功率。关注细粒度趋势而非月均总值,才能及时发现瞬时异常。

Q10. 常用的降级响应策略包括哪些?

多选题 · easy

  • A.返回缓存历史结果← 正确答案
  • B.输出固定模板话术← 正确答案
  • C.切换轻量备选模型← 正确答案
  • D.无限次无间隔重试

答案:ABC。缓存、模板、备选模型是三种标准兜底方案。无限重试是典型反模式,会放大故障流量,不算降级策略。