跳到主要内容

AI 功能生命周期衰减问题:如何在用户发现之前捕捉到性能下降

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 AI 功能上线一切顺利。演示令人印象深刻,发布指标看起来很好,模型在测试集上的基准准确率达到了 88%。大约三个月后,一位客户成功经理转发了一张截图。AI 推荐结果毫无道理。你查看日志,进行快速评估,发现准确率已经漂移到 71%。没有任何警报触发,没有抛出任何错误。整个过程中基础设施监控面板一直显示绿色。

这种情况并非偶发。对 32 个生产数据集的研究发现,91% 的机器学习模型会随时间降级,而且大多数降级是悄无声息的。系统继续运行,代码没有变化,但随着现实世界不断演进而模型原地踏步,预测结果越来越差。

最隐蔽的问题不在于降级本身,而在于你整个可观测性技术栈是为捕捉基础设施故障而构建的,而非正确性故障。延迟正常。错误率为零。模型返回充满信心的预测 —— 只不过是错的。

导致功能衰减的真正原因

有三种截然不同的降级机制,混淆它们会导致错误的修复方案。

协变量偏移(也称数据漂移)是指输入的统计分布发生变化,但输入与输出之间的关系保持不变。在信用评分模型中,这可能表现为低收入申请人的逐渐增加。决策边界仍然有效 —— 收入预测违约的方式没有改变 —— 但模型越来越多地在训练时从未见过的数据分布上运行。性能降级不是因为世界改变了,而是因为训练数据从来就没有代表 90 天后生产环境的实际情况。

概念漂移更为危险。这里,输入与输出之间的关系本身发生了变化。模型学到的决策边界在事实上变得错误了。在欺诈检测中,欺诈手段在不断演变;一个从 2024 年数据中学习模式的模型,将陈旧的启发式规则应用于 2025 年的攻击。在 LLM 应用中,随着产品演进、新用户群体的到来,或者领域本身的变化,用户意图模式会发生变化。概念漂移不会给你那种能直观识别为错误的数据 —— 它给你的是曾经正确但现在悄悄偏离的预测。

特征坍塌是一种讨论较少但同样有害的失败模式:模型逐渐减少对大部分特征的关注,学会过度依赖少数几个高信号输入。聚合指标上的性能看起来稳定,但模型已变得脆弱。对那几个主导特征的任何一次环境变化都会导致突然崩溃,而非渐进式滑落。

实际含义是:如果你把所有降级都视为同一个问题,你会采用错误的修复方案。协变量偏移通常可以通过用新数据重新训练来解决。概念漂移需要更新训练标签,可能还需要更新特征集。特征坍塌需要架构变更或正则化,而不仅仅是更多数据。

90 天规律及其可预测性

生产 LLM 在 90 天左右可预测地降级,因为这通常是训练分布与实时流量之间的差距变得具有实质意义的时间。你的训练数据是在某个时间点收集的。一旦你部署,世界就开始偏离那个快照。

对于动态领域的模型 —— 金融、电商、社交媒体 —— 降级可以更快。对于稳定领域,则更慢。但规律是一致的:模型在较长时间内表现良好,然后降级加速。MIT 的研究发现了"爆炸式降级"模式,性能保持稳定然后突然崩溃,而非线性下滑。这使问题更难捕捉:当每周平均准确率这样的平滑指标出现变动时,失败已经相当严重了。

对于基于 LLM 的功能,衰减机制不同但时间线相似。用户语言在演变。新产品功能改变了进来的请求类型。为早期采用者调整的系统提示在主流用户到来时失效。模型本身没有变化,但模型需要做的事情发生了实质性的漂移。

能早期发现漂移的监控模式

核心问题在于团队为故障而非正确性侵蚀建立监控。标准应用监控捕捉异常、延迟峰值和资源耗尽 —— 这些在模型降级时都不会触发。你需要一个专门为统计漂移构建的第二可观测性层。

第一步:建立行为基线。 对于生产中的每个模型或 AI 功能,在上线后 2-4 周内捕捉其输入的统计特征。对于表格特征,追踪数值特征(均值、标准差、分位数)和分类特征(频率直方图)的分布。对于 LLM 功能,追踪用户输入的嵌入分布、请求类型聚类和 Token 长度分布。这个基线是你测量的参照,而非你的训练数据 —— 训练数据是在上线前数月收集的,上线后的基线期是你对生产实际情况的第一个真实信号。

第二步:持续而非批量地监控漂移。 许多团队每周运行一次漂移任务。问题在于,当每周任务显示 5% 的降级时,实际峰值已在数天前出现并在加速。流式漂移检测 —— 以小时或每日窗口运行 —— 提供趋势检测而非快照检测。需要关注的指标不只是"今天与上周相比的漂移",而是"过去 30 天的漂移变化率"。逐周加速的漂移率是领先指标,而非滞后指标。

第三步:使用正确的漂移指标。 群体稳定指数(PSI)是表格数据的好起点,因为它足够敏感,能捕捉有意义的分布变化而不产生持续噪音。Jensen-Shannon 散度对分类特征效果很好。对于 LLM 输入,使用滚动窗口之间的余弦相似度分布来监控嵌入空间漂移。具体用哪种测试不如不依赖单一指标重要 —— 不同类型的漂移在不同统计数据中显现,只用一种会留下盲点。

第四步:在没有标签时构建代理性能指标。 生产监控中最难的部分是真实结果往往来得很晚 —— 在欺诈检测中,预测后 60-90 天才能得到结果。不要等标签来检测问题。代理指标是无需真实结果即可与模型质量相关的行为信号:置信度分布(模型变得一致地不那么自信是个信号)、输出分布熵(输出聚集得过窄或扩散得过宽)以及用户行为信号,如覆写率、编辑率和 AI 输出后的会话放弃率。这些不是完美的质量信号,但它们通常能在基于标签的指标追上来之前数周就检测到概念漂移。

什么触发重训练,什么触发 Prompt 修复

不是每个降级信号都应该触发重训练。修复方案取决于根本原因,不必要地触发重训练会带来自身的问题:已学习模式的灾难性遗忘、训练不稳定,以及标注和计算的成本。

实际决策框架分为三个层级。

首先修复 Prompt 或上下文,当功能基于 LLM 且漂移体现在输出格式或语气而非正确性上时。Prompt 可以适应新的输出要求而无需触及模型。同样,如果基于检索增强的功能出现过时错误,刷新检索语料库比重训练更快且更安全。

触发重训练,当关键输入特征的 PSI 超过 0.2(标志着显著偏移的标准阈值)、代理性能指标显示持续趋势性下降(例如每周 0.5% 的降级持续 4 周以上),或确认峰值性能下降 5%。使用基于趋势的触发,而非仅仅是绝对阈值 —— 一次突发后恢复不如缓慢持续侵蚀令人担忧。将触发器设置在降级的斜率上,而不仅仅是水平上。

上升至架构审查,当重训练反复无法将性能恢复到上线水平时。这是信号,表明你处理的不是同一任务结构内的分布偏移 —— 任务本身已经改变。特征坍塌属于这一类。积累了 18 个月 Prompt 补丁的 LLM 功能往往也会到达这里,因为唯一真正的修复是重新思考输入表示。

一个实际细节:对于 LLM,"重训练"在操作上通常不可行,而使用 LoRA 或类似 PEFT 技术在新标注数据上进行微调是更易获取的选项。触发逻辑相同,但干预是有针对性的而非全量重训练。在许多情况下,更新的检索上下文加上微调适配器的组合,以训练全量模型的一小部分成本超越了全量重训练。

构建监控技术栈

这方面的工具生态已经显著成熟。像 Evidently AI 这样的开源选项提供了 20 多种开箱即用的漂移检测方法、列级和数据集级指标,以及比较生产分布与基线的界面。NannyML 专门解决延迟真实结果问题,提供在标签到达前估计模型性能的基于置信度的估计器。Arize 和 Fiddler 提供商业平台,如果你需要在规模上使用,可以获得更丰富的告警、嵌入监控和可解释性集成。

对于没有专门 MLOps 工具的团队,使用现有基础设施可以实现此功能的轻量版本。运行每日聚合任务,计算 PSI 和关键分布统计数据与基线的对比。将这些存储在现有的时间序列数据库中。当 PSI 超过阈值或代理指标的 7 天滚动均值越过趋势阈值时,在现有告警系统中创建警报。重要的是在部署之前而非第一次降级事件之后就建立好监控。

这样做的成本理由很直接:主动监控团队与被动监控团队之间关键系统故障减少 83% 的记录是有据可查的。在信用评分等高风险领域,提前 90 天发现漂移直接转化为降低贷款违约率。但即使在风险较低的产品功能中,被动响应的工程成本 —— 翻查数月日志找出降级开始的时间、此期间的客户流失、紧急重训练的救火 —— 始终超过提前构建监控的成本。

运营节奏

没有流程配合的监控是无法持续的。将技术监控与审查节奏配合:每周或每两周一次的模型健康审查,在这里浮现漂移指标、评估趋势,并明确做出重训练决策而非被动响应。

这种节奏提供的最重要的东西是强制回答一个大多数团队从未正式化的问题:"什么会让我们决定重训练?"在降级事件发生之前、在没有压力的时候就商定那个阈值,会比用户投诉后的临时分诊模式产生更好的决策。

像对待数据库索引或缓存层一样对待你的 AI 功能 —— 将其视为具有已知衰减特征、需要定期维护的基础设施,而非永远运行的已部署制品。技术已经改变;在生产环境中维持它所需的工程规范,看起来很像你已经知道如何做的可靠性工程。

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