公司真题库

【Amazon】主模型挂了怎么自动切备用模型?LangChain 的 fallback 机制怎么用?

91学AI·2026/7/27·17 阅读

考察点

这道题出自 Amazon 大模型应用岗的技术面试,DSPrep 标注 Google/Amazon/OpenAI 常考。AWS 出身的公司问可用性工程顺理成章,面试官想验证你把 LLM 当成一个会挂的外部依赖来设计,而不是假设它永远 200。考察重点是:fallback 的触发条件(哪些错误值得切、哪些切了也没用)、主备模型质量差异怎么兜底、fallback 和 retry/ratelimit 的分层关系。追问会往多供应商负载均衡、熔断、成本突增监控走。

参考答案

机制:异常驱动的链条替换

LangChain 的 fallback 用 with_fallbacks 实现:任何 Runnable 都可以挂上备选链,主链抛异常时按顺序尝试下一个:

chain = primary_llm.with_fallbacks([secondary_llm, tertiary_llm])

语义很直白——primary 抛错,整个调用原样转给 secondary 再跑一次,secondary 也挂就走 tertiary,全挂才把异常抛给上层。注意它不是「主模型答得不好就换」,触发条件是异常,不是质量。这一点面试里必须说清楚,很多人含糊过去。

关键设计一:什么错误该切,什么错误不该切

生产上我把错误分三类处理:

错误类型例子策略
瞬时错误429 限流、5xx、网络超时带退避重试(指数退避 + jitter,重试 2-3 次),仍失败再 fallback
持续故障供应商宕机、区域不可用直接 fallback,重试是浪费延迟预算
业务错误400 参数错误、上下文超长不能 fallback——同样的输入换个模型照样 400,先修输入

这个分层很重要:retry 和 fallback 是两级,不是一回事。重试解决抖动,fallback 解决持续不可用。把 429 直接甩给 fallback 会让备用模型的配额也被打穿;把 400 拿去 fallback 纯属自欺。LangChain 允许指定只对特定异常类型触发 fallback(exceptions_to_handle),把 4xx 业务错误排除在触发条件外,这是必须配的参数。

上下文超长值得单独说:如果主模型报 context length exceeded,正确的 fallback 目标往往是一个更长窗口或更便宜的模型,而不是同规格的另一家——fallback 链的设计可以按错误类型分化,不一定是一条线性链。

关键设计二:主备模型的「质量差」要管理

切换成功的代价是行为变化:备用模型的输出风格、格式遵循度、tool calling 能力可能和主模型有差距。几个工程对策:

  • 备用模型选型以「能力下限」为准,不是越强越好。主用 GPT-4o,备用选一个指令遵循和 JSON 输出同样稳的模型,哪怕贵一点;用一个格式都守不住的小模型当备胎,切过去等于制造二类故障。
  • 输出层加护栏:fallback 之后统一过结构化校验(Pydantic),格式不对触发再生成或降级话术,别让半成品输出直接到用户。
  • 埋点区分流量来源:fallback 发生的比例、切后答案质量的抽样评估要单独监控。fallback 率从 1% 跳到 10% 是供应商侧事故的最早信号,也是你自己配额/代码出问题的信号。

关键设计三:fallback 是成本变量

备用模型经常比主模型贵或便宜很多,且重试+fallback 意味着一次用户请求可能产生 2-3 次计费调用。成本控制上两条:一是给整条链设总超时(比如 15s),超时即降级成缓存答案或友好话术,别让多级 fallback 把 P99 拖到不可接受;二是 fallback 期间的单位成本告警——大促或故障窗口内账单可能翻几倍,财务侧要有预期。

更进阶的形态是主动路由替代被动 fallback:按供应商健康度(近 5 分钟错误率、延迟)做加权负载均衡,把流量实时倾向健康的一侧,故障时自然漂移过去,恢复后漂移回来。fallback 是请求级的兜底,健康路由是系统级的常态,生产上两者都该有。

可能的追问

1. fallback 和熔断器(circuit breaker)什么关系?

互补。fallback 是单次请求的兜底;熔断是状态机——某供应商错误率超阈值后直接「开路」,一段时间内请求不再打过去,避免每个请求都白等一次主模型超时才切备用。两者结合:熔断挡流量,fallback 保请求。

2. 流式输出做到一半断了,fallback 怎么办?

这是流式的硬伤:已吐给用户的 token 收不回。做法一是缓冲前 N 个 token 确认连接稳定再开始推流;二是断流后续传而非重头来(把已生成内容作为前缀让备用模型续写);三是接受断流,前端降级提示。要在延迟和体验间取舍。

3. 自建开源模型和 API 混着做 fallback 有什么坑?

延迟特征完全不同(自托管首 token 可能更慢但稳定)、输出格式差异更大、且自托管实例挂了可能是你自己运维问题。混合 fallback 链里建议自建做主(成本低)、API 做备(弹性好),顺序反过来成本上不划算。

评论 (0)

暂无评论,快来抢沙发吧!

91学AI

© 2026 91学AI · 按岗位学 AI 与大数据. All rights reserved.