1 项目背景
业务场景
算法团队训练了一个新版工单分类模型 v2.1.0,在测试集上 F1 比当前线上 v1.5.0 高了 3 个百分点(0.91 → 0.94)。产品经理兴奋地要求"今晚就上线"。运维团队直接替换了模型文件,重启了推理服务。
第二天早上,客服主管怒气冲冲地打来电话:“自动分派系统完全乱了!所有工单都被分到了’其他’类别!这比不分类还糟糕,现在所有工单都堆在人工队列里,8 个客服根本处理不过来!”
紧急排查发现:v2.1.0 训练时id2label的映射和 v1.5.0 不同——v1.5.0 用{0:"投诉", 1:"咨询"...},而 v2.1.0 用{0:"咨询", 1:"投诉"...}。标签全乱了。
更糟糕的是,运维人员试图回滚到 v1.5.0,但发现旧的模型文件被覆盖了——因为新旧版本都叫model.safetensors,放在了同一个目录里。
痛点
模型从训练到上线是一条"脆弱链条",任一环节断裂就导致事故:
v2训练完成 → 文件直接覆盖v1 → v2出BUG → 无旧版本可回滚 → 事故扩大 │ │ └── 无版本号 └── 无灰度,100%流量直接切换三大核心痛点:
- 版本混乱:模型文件没有规范的版本命名,无法追溯哪个版本对应哪个训