跳到主要内容

回退级联:为什么你的 AI 功能需要五种故障模式,而非一种

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数 AI 功能发布时只有两种状态:正常工作和彻底挂掉。模型调用成功,功能就有响应;模型调用失败,用户就会看到错误。这相当于在构建 Web 服务时没有负载均衡、没有缓存,且只有一个数据库副本——在出事之前,它在技术上是可行的。

不同之处在于,工程师在 20 世纪 90 年代就学会了数据库弹性模式,并将其深刻内化。 AI 功能的弹性仍处于通过一次次生产事故进行艰难探索的阶段。一家支付处理器在一次时长 4 小时的 AI 停机中损失了 230 万美元。一家物流公司在其路由模型宕机时,错过了 30,000 个包裹的交付窗口。这两起失败都有一个共同的根本原因:当主模型不可用时,没有可以回退的方案。

解决方案并不是追求模型提供商更好的在线率——那是你无法控制的。解决方案是设计一套具有级联回退级别的 AI 功能,每一级都比上一级更简单、更便宜,这样模型失败就只是一个降级事件,而不是灾难性事件。

五级降级体系

传统的 Web 服务拥有规范的可靠性模式:副本、缓存、读副本、静态回退、熔断器。 AI 功能需要类似的体系,但由于故障模式差异巨大,这套模式需要从零开始重新构思。

这里有一套可行的五级体系:

第 1 级 —— 前沿模型(主模型):你所能获得的最佳模型,针对质量进行了优化。如 Claude Sonnet、GPT-4、Gemini Pro。基础延迟为 100–200ms,每 token 成本最高。这是理想路径。

第 2 级 —— 更便宜的模型(同一供应商):当主模型发生限流、延迟激增或错误率爬升超过阈值时,路由到同一供应商的更小模型。如 Claude Haiku、GPT-4o-mini。成本降低 50–70%,质量有可衡量的下降,但在语义上仍然合理。延迟降至 50–100ms。

第 3 级 —— 语义缓存命中:在调用任何模型之前,检查最近的请求是否足够相似,以便返回缓存的响应。针对缓存查询的嵌入(embedding)计算余弦相似度,通常以 0.85–0.95 以上作为有效阈值。一旦命中:模型成本为零,延迟从 1.67s 降至 52ms——缓存命中时的延迟降低了 96.9%。这一级严格来说并不是“回退”——它应该成为你每个请求路径的一部分,在命中时甚至不需要到达第 1 级。

第 4 级 —— 确定性回退:规则、模板、预计算响应。一个无法连接到任何模型的客户支持机器人仍然可以从查找表中返回 FAQ 答案。代码补全服务可以回退到基于 token 频率的建议。一个生产团队用梯度提升树取代了由 12 个深度学习模型组成的集成模型作为其回退级别——延迟从 200ms 降至 10ms,准确率虽然有可衡量的下降,但功能保持了运行。

第 5 级 —— 人工介入:对于涉及重大利害关系的决策,路由到人工审核队列。例如医疗、金融、法律背景下,一个错误的确定性回答比没有回答更糟糕。这里的工程要求是上下文保留:人工审核员需要看到 Agent 掌握了什么信息、它试图做什么,以及它为什么要升级到人工。

并非每个应用都需要全部五个级别。一个在找不到结果时以“未找到结果”优雅失败的文档搜索工具,可能只需要第 1、3 和 4 级。而在临床工作流中运行的病历摘要生成器可能需要全部五个级别。重点是进行有意识的设计,而不是默认只有两种状态。

触发每一级的信号

只有在有机制监控信号并决定何时降级时,回退级联才有用。主要有两类信号:置信度信号和延迟/错误信号。

延迟信号是最可靠的,因为它们不需要模型评估自己的输出。为每个级别设置超时预算,而不是设置全局超时。第 1 级在请求被重定向到第 2 级之前可能有 3 秒的时间。第 2 级有 2 秒的时间,然后检查缓存。如果缓存未命中,第 4 级在 100ms 内确定性地运行。这里的关键错误是为整个 LLM 调用设置单一的超时。流式响应的首个 token 时间(TTFT)为 1–3 秒,总响应时间为 30–120 秒。 5 秒的全局超时几乎每次都会切断非琐碎的响应。

错误率信号使用熔断器模式。当对提供商的失败率超过阈值时(例如过去 60 秒内 20% 的请求失败),熔断器开启,所有请求跳过第 1 级,直到探测请求成功。熔断器有三种状态:关闭(正常运行)、开启(所有请求跳过该提供商)和半开(探测请求测试恢复情况)。开启状态不是失败状态;它是系统在保护自己免受已检测到的降级依赖项的影响。

置信度信号比较棘手。 LLM 可以输出置信度 token,一些路由系统利用这些 token 来决定响应是否足够可信,可以返回给用户,还是应该交给人工。需要注意的故障模式是: LLM 表现出自我偏好偏差,即使替代方案客观上更好,也会给自己的输出打出比替代方案更高的分数。 GPT-4 在识别自身推理链错误方面的准确率仅为 52.9%。来自模型本身的置信度分数是弱信号;基于验证集或明确路由阈值衡量的置信度才是强信号。

运营问题:未经测试的降级方案等同于虚设

构建降级层级是工程层面的工作,而保持其正常运行则是大多数团队会忽略的运营纪律。

这种失败模式是可以预见的:团队在上线时实现了一个 Level 4 的确定性降级,但从未模拟过 Level 1 的故障,结果在生产事故中发现降级方案存在 Bug、返回了陈旧数据,或者根本没有收到三个月前发布的配置更新。Netflix 在多年前就从基础设施规模中吸取了这一教训,现在他们积极使用故障注入 (Fault Injection) 来在真实的负载下测试所有故障路径,而不是等到真正的故障发生时才去发现实际情况。

对于 AI 功能来说,这意味着要定期进行演练,人为禁用 Level 1,并观察请求路由降级到了哪一层、响应质量如何,以及下游消费者是否会因为降级后的响应格式而崩溃。影子测试 (Shadow testing) —— 将 Level 2 与 Level 1 并行运行并记录差异 —— 能让你在接受降级时,对所接受的质量差距有持续的数据支撑。

一个没有在真实流量条件下定期测试的降级路径,是你无法在宕机期间寄予厚望的。

语义缓存作为一种结构性投资

Level 3 —— 语义缓存 —— 值得获得比通常更多的关注,因为它不仅仅是一个降级方案;它还是对正常路径 (Happy Path) 的成本和延迟优化。

其运行机制是:每个传入的查询都会被转换为一个嵌入 (Embedding)。在调用模型之前,系统会检查缓存中是否存在相似度阈值内的嵌入。如果存在,则立即返回缓存的响应。如果不存在,则继续调用模型,并将响应缓存以备未来类似的查询使用。

在查询重复率较高的工作负载中 —— 如 FAQ 机器人、文档搜索、分类任务 —— 40–60% 的缓存命中率是可以实现的。以这样的比率,你可以在任何性能下降事件发生之前,将模型成本减半,并显著改善 P50 延迟。其开销仅是一次向量嵌入调用(5–20ms)和一次最近邻搜索 —— 与 LLM 推理相比几乎可以忽略不计。

实际实现需要选择相似度阈值。太低会返回语义无关的缓存响应;太高则会导致没有缓存命中。对于大多数 FAQ 类工作负载,0.85–0.92 的余弦相似度效果良好;对于对查询特异性要求更高的任务,则需要设定更高的阈值。

对于独特、创意或用户特定的工作负载 —— 例如针对特定代码库的代码生成、个性化写作 —— 缓存只会增加开销而没有收益。请将其应用于查询分布集中的场景,而不是每个查询都具有新颖性的场景。

团队在添加降级方案时常犯的错误

最常见的错误是将降级方案的实现视为一次性任务,而不是持续的运营承诺。团队在上线时添加了降级逻辑,之后就再也没有过问。自从六个月前重构代码库以来,该降级方案就从未测试过。当产品发生变化时,Level 4 的模板也从未更新。熔断器 (Circuit breaker) 阈值在压力测试期间设置为 50%,却没人注意到它设置得过于宽松。

第二个错误是超时配置不当。团队直接将 HTTP 服务的超时设置(通常为 5–10 秒)搬到了 LLM 调用上,而没有考虑到推理过程中不同的延迟特性。流式响应 (Streaming responses) 往往会静默失败 —— 熔断器永远不会开启,因为请求没有报错,只是被截断了。

第三个是缺失反馈循环。一个系统性出错的医疗 AI 系统应该能看到其错误率攀升并触发降级。但如果“此响应错误”的信号存在于另一个系统中 —— 申诉流程、用户反馈表单、人工审计 —— 并且没有将该信号连接回路由逻辑的流水线,那么系统将无限期地继续路由到故障模型。在某些保险 AI 部署中,90% 的申诉撤销率是一个从未反馈到生成决策系统的信号。

衡量核心指标

一旦级联方案就绪,你就需要每一层的可观测性来了解它是否在工作。核心指标包括:

  • 每一层的降级调用率(每小时,按原因分类:超时 vs. 错误 vs. 置信度阈值)
  • Level 1 与 Level 2/4 响应之间的质量差异 (Quality Delta),基于真实流量样本衡量
  • 标记样本上的缓存命中率和缓存响应质量
  • 人工介入队列的深度和审核时间
  • 供应商错误率和熔断器开启/关闭事件

目标是让你在任何一天都能清楚地知道,有多大比例的用户获得了 Level 1 级别的质量,而有多大比例的用户获得了降级的质量 —— 并且确信降级的质量仍然是可接受的,而不是静默损坏。

正确的思想模型

降级级联方案并非边缘情况下的考量。供应商宕机、速率限制 (Rate limits)、上下文长度突增以及改变输出格式的模型更新,都是生产环境 AI 功能生命周期中的常规事件。从一开始就为这些情况进行设计 —— 而不是在第一次事故后才补救韧性 —— 是打造一个能赢得用户信任的 AI 功能与一个在关键时刻损害信任的功能之间的本质区别。

五级层级结构并不是唯一可能的设计。但拥有一套分层体系 —— 深思熟虑、经过测试、可观测 —— 是发布旨在长期稳定运行的 AI 功能的最低标准。

References:Let's stay in touch and Follow me for more thoughts and updates