先看现象。回归集 500 条都是正常长度的工单,上线后遇到空字段、超长文本、纯表情的输入,接口直接 500,一天里错误请求占了 6%。
排查方向其实有限,先把可能性排一排。回归样本从生产成功请求里抽样,天然没有异常输入。少数情况下是没有构造空值、超长、特殊字符的样本。
还有一种情况,前置校验缺失,错误直接冒到模型调用层。
另外,回归只看准确率,没有看接口成功率。
上来先统计线上 4xx 与 5xx 的输入特征
python error_profile.py --since 7d --out err.json
随后按特征构造边界样本集
python gen_edge.py --spec edge_spec.json --out edge_120.jsonl
然后把边界集并入回归并单独看成功率
python eval_reg.py --sets golden_500,edge_120 --report per-set
等前面都确认过,再对失败样本补前置校验后重跑
python eval_reg.py --sets edge_120 --report per-set
恢复的判定其实很直接。边界集 120 条的成功率从 71% 到 100%,回归集准确率没有下降,线上 5xx 比例回到 0.1% 以下。
容易忽略的是,只从成功请求里抽样的回归集一定缺异常输入,得单独维护一份边界集;准确率和成功率要分开看,否则接口挂了分数还很好看。这类问题最好一次改到位,反复小改反而容易把原因搅混。
