结论先说:例外情况不能写成“遇到特殊情况再处理”,而要在需求里写清触发条件、默认动作、人工接管点和留痕字段。只有满足三个前提,脚本才能替人做判断:触发条件能从数据里读到,默认动作不会造成不可逆后果,人工接管有时间窗口。缺少任何一条,例外就必须停住等人工确认,而不是让脚本自己猜。这样写出来的需求,才会让权重提高方法从个人手感变成可复用的流程。
把人工经验转成脚本需求,第一步不是写代码,而是给例外分类。可以用一条判断线:这个例外出现时,下一步动作是否依赖只有人才能拿到的信息。如果依赖,就不该写成自动分支。
这里有个常被忽略的动作:在需求里为每条例外写一个exception_id,并规定它出现在日志的哪个字段。这个动作的结果是,脚本跑完后你能按例外类型统计发生了多少次,而不是只看到“成功”或“失败”。下一步该收紧哪条规则,就有了依据。
很多脚本需求失败,不是因为逻辑错,而是因为例外描述缺项。缺一项,执行者就会用自己的理解补上,结果和原始经验偏离。建议每条例外都写全下面四项。
举个假设的例子说明比较方法。假设你写了一条规则:某页面连续两次观察的主指标都低于同类页面的中位水平,就进入优化队列。例外是“该页面刚改过主字段”。如果需求只写“刚改过的不处理”,执行者无法判断“刚”是几天。写成“最近一次主字段变更距本次观察不足一个采集周期”才可执行。这个例子里数字只是说明比较方法,不代表任何真实阈值。
脚本上线后,常出现一种反常现象:例外数量没有下降,反而集中到某一类。直觉反应是规则写错了,但更常见的原因是数据采集口径变了,或者搜索需求本身在波动。这两类原因的处理方式完全不同。
可以用一组可核对的证据来区分:
这里要强调一个反例,它会让前面的结论失效:如果例外本身就被定义错了,那么无论采集多稳定、规则多清晰,统计出来的例外数量都不能说明流程在变好。比如把“人工判断为可优化”直接写成触发条件,脚本永远无法稳定执行,因为判断标准没有落到字段上。此时正确的下一步不是调阈值,而是回到人工经验,把判断依据拆成可读字段。
不要一上来就让脚本执行动作。先让它以影子模式运行,只记录“如果按规则执行会做什么”,不真正改动任何对象。运行一个完整采集周期后,按exception_id汇总,检查三件事:例外是否都能归到预设类别,默认动作是否产生过不可逆后果,人工接管点是否真的有人及时处理。
如果这三项都通过,再把默认动作从“仅记录”切换为“执行并留痕”。切换后继续观察一个周期,重点看例外结构有没有变化。如果例外从“未知类型”转为“已知类型”,说明规则覆盖在变好;如果未知类型比例没降,说明需求里还缺少可读字段,下一步应补字段而不是加规则。这个动作的结果直接决定你是继续自动化,还是先回到人工经验里补描述。
权重提高方法最终依赖的是可复现的判断,而不是某个人记得住多少例外。把例外写清楚,脚本才不会在关键时刻替你做错决定。