大模型在线评测与 badcase 实时回流闭环落地

日期:2026-09-08

一、项目背景

我们团队维护的几个业务模型,发版流程里都有一道离线评测:拉一份评测集,跑一遍指标,过了就上。听起来严谨,实际跑起来问题很大。模型上了线,真实流量里的 badcase 散在各业务日志里,没人捞、没人标、没人回流,等下个版本才想起来修,用户已经骂了一轮。

有一次客服场景的模型,上线两周后浮现一类"把退款话术说成催款"的 badcase,频率不高但每次都惹怒客户。离线评测集里没有这类样本,所以发版时指标漂亮,线上却持续犯错。等我们从一个投诉工单里发现它,已经影响了一批用户。我们意识到,模型上线不是评测的终点,恰恰是起点。

二、落地场景

我们做的第一件事是线上 badcase 自动采集。在网关和调用链里埋了信号钩子,捕获低置信、用户负反馈、重试超限这类异常,自动归集到 badcase 池,不用人工去翻日志。自动打标初筛是第二段,用规则和小模型对 badcase 做初步分类(幻觉、格式错误、答非所问、安全风险),给出建议标签,减轻人工负担。人工复核回流放第三段,标注同学确认并修正后,样本自动回流进评测集,成为下次发版的回归项。评测集动态更新与回归门禁兜底,新样本进集后,每次发版必须跑全量回归,badcase 复发直接卡住发布。

案例片段(已脱敏): badcase 采集与回流配置片段(示意):capture:  signals: [low_conf, user_downvote, retry_overflow]  sample_rate: 1.0 label:  auto_tags: [hallucination, format, off_topic, risk]  human_review: required regression:  block_on_repeat: true  min_pass_rate: 0.98上线后 badcase 回收率约 87%,从发现到回流平均时延约 1.5 天,回归通过率稳定约 99%,线上同类问题复发率约 0.6%(数据均为脱敏示意值)。

三、关键技术挑战与解决思路

第一个坑是 badcase 没人捞。日志里信号很多,但淹没在正常流量里,靠人盯不现实。我们做了信号分级,只把高价值的异常(用户负反馈、明确错误)纳入自动采集,噪音类单独标记不进主池,避免标注同学被垃圾淹没。这一步决定整个闭环能不能转起来。

第二个难点是自动打标的准确率。初筛错了会把错误标签回流进评测集,污染后续评估。我们没有追求全自动,而是让 auto tag 只做建议、必须人工复核确认,且记录每个标签的来源,发现某类标签老错就回炉调规则。这里有个权衡,全自动快但脏、全人工准但慢,半自动是我们当前最稳的平衡点。

第三个点是评测集膨胀治理。badcase 一直回流,集子越来越大,发版回归越来越慢。我们做了样本去重和时效性淘汰,长期稳定通过的旧样本降权,保留边界和难度样本,既控住规模又守住覆盖。

四、效果数据

badcase 回收率约 87%,从发现到回流平均时延约 1.5 天,回归通过率稳定约 99%,线上同类问题复发率约 0.6%。最明显的变化是发版不再"盲发",每次上线都知道这次修了哪些历史 badcase、有没有引入新的。我们复盘时发现,badcase 池慢慢成了团队最值钱的知识库,新人看一遍就知道模型容易在哪翻车。

我们还把回流样本按业务线分了类,哪条线 badcase 多、哪类问题反复出现,反向推动了 prompt 和数据的针对性优化,从被动救火变成主动排雷。

我们后来把回流样本按业务线分了类,哪条线 badcase 多、哪类问题反复出现,反向推动了 prompt 和数据的针对性优化,从被动救火变成主动排雷,模型迭代有了明确方向,不再凭感觉调。还有一块是新模型灰度,badcase 回流链路在灰度阶段就接入,新模型先在小流量里跑,badcase 池实时捕捉异常,确认稳了再全量,发版风险大幅降低,那类上线两周才暴露的问题基本没了。评测集膨胀治理也很关键,badcase 一直回流集子会越来越大,我们做了样本去重和时效性淘汰,长期稳定通过的旧样本降权,保留边界和难度样本,既控住规模又守住覆盖,回归不会慢到大家想跳过,闭环才一直转得动。

再说一个组织层面的变化,是 badcase 池成了跨团队的共同资产。以前算法、产品、运营各看各的日志,讨论问题没有统一事实基础,常常各说各话。现在都从同一个池子里取数,扯皮少了很多。这个转变比技术本身更难,但一旦建成,模型迭代的协作效率提升是肉眼可见的,新人也能快速理解历史坑在哪,不至于重复踩一遍。这套机制现在成了我们发版前的必过项,没有 badcase 复盘就不许上线,倒逼大家把线上问题当回事。

五、可复用经验总结

模型上线才是评测的开始,离线评测过了不代表线上不出事,badcase 不回流就是边用边偏,越偏越没人敢信,这个弯我们绕了很久才转过来。自动打标别贪全自动,初筛错一次污染的是整个评测集,人工复核这道关省不得。我后来觉得,badcase 池的价值远超它表面那点样本,它是团队对模型弱点的集体记忆,比任何文档都鲜活。评测集膨胀要趁早管,不然发版回归慢到大家开始跳过,闭环就破了。说到底,评测不是发版前的一次考试,而是贯穿模型全生命周期的体检。