跳转到主要内容

LLM 升级的金丝雀发布:为什么模型上线与代码部署的失效方式完全不同

阅读需 2 分钟Tian PanTian Pan

你的 CI 通过了。你的评估(evals)看起来没问题。你切换了流量开关,然后继续工作。三天后,一位客户提交了一个工单,称生成的每一份报告都不再包含 summary 字段。你翻阅日志发现,新模型开始稳定地生成 exec_summary —— 这是一个隐蔽的键名重命名,由于你忘记将其添加到发布门禁(rollout gates)中,你的 JSON schema 验证从未捕获到这一点。根本原因是模型升级。检测滞后时间为 72 小时。

这并非假设。在那些拥有复杂应用代码部署流水线,却将 LLM 版本升级视为基本“免费” —— 仅是配置更换而非部署 —— 的公司里,这种情况屡见不鲜。这种思维模型是错误的,由此导致的失败模式极其难以捕捉。

为什么 LLM 升级不只是配置更换

当你部署新版本的服务代码时,新旧版本之间的差异是完全可枚举的:你可以进行 diff 对比,针对已知输入进行测试,并对准确输出进行断言。但模型升级不会给你这些。新模型是一个拥有数十亿参数且无法检查的函数,在运行生产环境输入之前,它在所有生产输入分布下的表现都是不可知的。

有三种失败模式专门出现在模型升级过程中,而在代码部署中并不存在:

输出 Schema 偏移。 模型提供商在改进模型时,并不将输出格式视为一种具有破坏性变更(breaking-change)的契约。在前一个版本中被稳定命名为 category 的字段,现在可能显示为 ticket_category。受限解码(Constrained decoding)可以保证语法上正确的 JSON,但不能保证你特定的字段名称和结构得以保留。下游解析器如果使用 dict["category"],会在每个请求上静默抛出 KeyError

无表面回退的语义偏移。 新模型产生的输出可能在自动化评估中得分很高,但在你的评估套件未衡量的地方表现不同。模型可能会在支持工单分类器中开始将错误归因于错误的组件,或者开始在不同的位置生成法律免责声明,从而破坏下游的文本分割器(text splitter)。输出看起来是连贯的;评估分数保持稳定;但产品行为崩溃了。

延迟和成本特征的变化。 产生更高质量输出的模型通常伴随着更多的 token、更长的生成时间或不同的吞吐量特征。一次提升了质量得分的发布,可能会同时触发 SLA 违规或使你的推理账单翻 3 倍。这两点都不会在质量评估中体现出来。

影子测试:基于真实流量的零风险验证

任何模型升级最稳妥的第一步都是影子测试(shadow testing):将生产流量同时路由到现有模型和候选模型,仅向用户提供现有模型的响应,并收集候选模型的输出进行比较。用户感知不到任何变化,而你可以积累真实的生产查询和真实的模型行为。

影子测试优于基准评估(benchmark evaluation)的价值正是在于:生产流量并非你的基准分布。你的基准是你认为应该编写的查询。而生产流量是你的真实用户发送的查询 —— 这包括边缘案例、格式错误的输入、意外语言的查询,以及你的评估集永远无法完全代表的新型实体。

影子测试能发现一类只能在真实流量中找到的问题:候选模型针对最长输入生成的特定 JSON schema、并发负载下的延迟特征,以及用户实际使用的特定领域术语的幻觉率。在进行任何流量切分之前进行 24–72 小时的影子测试,能为你提供可操作的依据。

在基础设施层实现起来非常直接。在 API 网关或负载均衡器处,将每个请求复制到两个模型。现有模型的响应同步返回给用户。候选模型的响应则异步捕获,并记录相同的元数据:输入 token、输出 token、延迟、时间戳、用户细分。然后,你对这两组响应运行评分流水线并进行比较。

流量切分:确定性路由与渐进式分配

一旦影子测试通过了你的质量门禁,就可以转入 live 流量切分。这里的常见错误是使用随机流量分配。随机分配意味着同一个用户在一次请求中看到模型 A,而在下一次请求中看到模型 B,这使得你无法判断质量差异是由模型引起的,还是由会话级上下文变化引起的。

请改用基于哈希(hash)的路由。对用户 ID(或会话 ID、客户 ID —— 任何稳定的标识符)进行哈希处理,并确定性地分配桶(bucket)。0–9 号桶中的用户始终看到候选模型;其他所有人看到现有模型。这能保持个人用户体验的一致性,并使你的 A/B 比较在统计上是严谨的。

推进计划与路由逻辑同样重要。从 5–10% 的流量开始。在转向 25% 之前监测 24 小时。只有在确认候选模型在 25% 比例下表现稳定后,再转向 50%。这并非是对百分比的迷信 —— 而是为了确保有足够的时间观察尾部故障(tail failures)。Schema 违规和语义回退通常出现在特定的输入类别中,而这些类别可能仅占你流量的 2–3%。一个持续 24 小时的 10% 灰度测试能让你接触到这些长尾情况的代表性样本。

在每个阶段,都要跟踪群组(cohort)级别的指标,而不仅仅是汇总指标。汇总指标会掩盖特定细分领域的失败。候选模型可能在英语查询上表现相同,但在法语查询上却悄悄退化。在一个代表性不足的细分领域中,5% 的质量下降在汇总数据中是看不出来的,但却会影响到真实用户。

真正能捕获模型回归的指标

通用的“质量评分”监控无法捕获上述失败。你需要部署的指标是专门针对 LLM 实际容易失败的地方:

输出 Schema 符合率。 跟踪响应中所有必填字段是否存在、命名是否正确以及类型是否符合预期的百分比。在解析层而非模型层进行埋点——你需要了解你的实际下游消费者是否成功。如果你的解析器抛出了 KeyError 异常,统计并针对它们发出告警。Schema 符合率的下降是你对字段名偏移(field-name drift)问题的最早预警。

会员专享

余下内容仅对会员开放。

会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。

  • 完整文章,包含未公开存档的部分
  • 可落地的工作框架,附带权衡与决策依据
  • 新文章抢先看,先于公开发布

随时取消 · 一次订阅,畅读全部

参考资料

保持联系,关注我获取更多内容

阅读需 11 分钟

在不破坏生产环境的情况下发布 AI 功能:LLM 的阴影模式、灰度发布和 A/B 测试

将新的模型版本或提示词更改推送到生产环境存在标准部署流程无法捕捉的风险。本文介绍了阴影模式、灰度发布和 A/B 测试如何协同工作,以实现安全的 LLM 发布。

insider
llm
阅读需 10 分钟

隐形模型漂移:供应商静默更新如何破坏生产 AI

LLM 供应商在不发布变更日志的情况下更新模型。你的提示词回归是真实存在的,它们是静默的,且需要你自己去发现。以下是具体方法。

insider
llm
阅读需 10 分钟

LLM 分类器的生产实践:为什么准确率是错误的指标

准确率本身并不能预测基于 LLM 的分类器能否在生产环境中存活。真正的约束在于校准性、分类别指标、延迟 SLO,以及揭示生产就绪性的测试模式。

insider
llm
阅读需 9 分钟

模型卡没告诉你的是:公开基准测试与实际工作负载之间的生产差距

模型卡上的基准测试是在理想条件下测量的,这些条件很少能与生产环境匹配。这是每个团队发现得太晚的差距 —— 以及一套能在部署前捕捉到这些问题的内部基准测试套件。

insider
llm
阅读需 8 分钟

模型弃用就绪:在 90 天倒计时之前审计你的行为依赖

当一个模型被弃用时,最难的部分不是更新 API 调用,而是发现系统所假设的所有隐形行为契约。以下是在时间耗尽前审计这些契约的方法。

insider
llm