排障复盘:给误报一个「处理预算」,检测组省下了两个人月
上个月我们给业务侧上线一套内容异常检测,第一周就撞上老毛病:模型很「热」,异常件的分高分全捞出来,人工复核队列三天堆了三千多条。业务侧的结论只有一句:「这么多误报我们没法看,先别用了。」

排障复盘:给误报一个「处理预算」,检测组省下了两个人月
上个月我们给业务侧上线一套内容异常检测,第一周就撞上老毛病:模型很「热」,异常件的分高分全捞出来,人工复核队列三天堆了三千多条。业务侧的结论只有一句:「这么多误报我们没法看,先别用了。」
问题的根子不是模型精度——离线评测的精度其实达标——而是我们没有给误报定一个**处理预算**。没有预算,误报会无限膨胀,把复核能力拖垮,最后被砍掉的是整条链路,不是误报本身。
第一步:先区分「业务不可接受的误报」和「技术上可自动消化的误报」
我们拉了两周的复核记录,人工给每一条误报打标:这条「看了就扔」的实际成本是多少?哪些根本不该送到人眼前?
结果大约三成误报属于同一类——命中的是系统自己前天刚记过日志的常规批量操作。这些「有据可查的已知模式」走人工纯属浪费,应该由配置直接消化并留痕。
这一步省的不是模型的钱,是人的钱。模型精度没动,复核入口从三天三千条降到一千出头。
第二步:把「日预算」写死在调度层,而不是靠人每天拍脑袋
我们给复核队列定了一条硬规则:**每天人工最多处理两百条;超出的部分不丢弃、不升级告警吓唬团队,而是降为「观察级」,进一个独立频道的自动判定并行处理。**
关键不是「两百」这个数字,而是「写进配置 + 有过限告警」。超预算那天必须有人看告警、决定是否临时放开;如果没人看,说明预算定错了,或者上游变了。预算一旦进调度层,就必须有告警对象盯着——只配数字不配告警,等于没配。
第三步:观察级通道独立部署,否则 burst 时第二条通道是假的
最初超预算部分的自动判定是复用主检测通道的缓存结果,工程上很省事。直到某天上游批量操作换了套路,缓存整体失效:超预算的那批既没预算走人工、自动判定又拿不到结果,积压堆了两三天,靠手动补队列才清掉。
后来把「超预算自动判定」拆成独立服务:不依赖主通道缓存、有自己的队列和重试上限、burst 时至少有人兜底。拆完之后类似失效事件归零。
预算跑起来之后的数字
- 复核队列长度:从 3200 条/天 → 平均 610 条/天
- 人工复核 SLA(入队到出结论):46 小时 → 8 小时
- 自动处理占比:22% → 68%
- 预算超限告警:两周触发 1 次,原因是上游批量任务提前 40 分钟,当天下调了 50 条预算而不是硬扛
值班的一句话
精度报告不会告诉你「谁在看这些结果」。预算不是限制模型,是限制人。先把处理能力写死,再看模型能配多高——顺序反了,业务侧只会看到一堆好看的曲线和一句「没法用」。
留言区
欢迎分享你的想法!
加载留言中…