结论先说:例外情况要写成“条件—判断依据—动作—记录”四段式,而不是在需求末尾加一句“特殊情况人工处理”。当例外可以被一条可观测的条件触发、且触发后的动作能产出可核对的记录时,适合写进脚本;当例外依赖的是审美判断、跨部门协商或尚未稳定的业务规则时,硬写进脚本只会把不确定性藏进代码里,代价是后续每次调整都要改脚本。下面给出一条判断线和几个可以直接套用的写法。
人工做优化时,很多判断是默会的。比如看一个页面该不该改标题,有经验的人扫一眼就知道“这个词跟正文对不上”。要把这类经验交给脚本,第一步不是写规则,而是把例外分成两类。
可枚举例外写进脚本,不可枚举例外写成“挂起并输出待人工确认清单”。判断依据很简单:让两个熟悉业务的人分别独立判断同一批样本,如果分歧集中在少数几条上,说明规则基本可枚举;如果分歧遍布各处,说明规则还没稳定,此时写脚本的收益很低。
把一条人工经验转成脚本需求时,不要写“遇到异常就跳过”,而要写清四件事。以“批量检查页面标题是否需要改写”为例,一条合格的例外描述是:
这四段里,“依据”最容易漏写。只写条件不写依据,脚本作者只能自己猜阈值,猜错之后你拿到的结果既不能直接用,也说不清错在哪。把依据写成可复算的量,比如“正文前若干段的高频词集合”,后续换人维护时才有对照。
两种做法都成立,取决于例外的比例和错的代价。
如果例外占比很低,且误改的代价小(改错了下次还能改回来),可以让脚本直接执行,只对命中的少数条目留记录。这样做的代价是:一旦判断依据本身有偏差,错误会成批出现,而且分散在很多页面上,回滚成本高。
如果例外占比不低,或误改会牵动品牌叫法、合同用语、已投放的物料,就只输出待确认清单,让人做最后一步。代价是人工环节仍在,处理速度受人力限制,但每次人工决定都能沉淀成新的可枚举条件,下一轮脚本能覆盖更多情况。
一个假设的例子:某次检查中,100 个页面里有 8 个标题被标为“待确认”,其中 5 个是品牌固定叫法、3 个确实该改。如果直接自动改写,那 5 个会被改错;如果只出清单,人工花时间处理 8 条,同时把“品牌固定叫法”整理成一份白名单。下一轮白名单内的页面就不再进入待确认,人工量下降。这里的关键不是 8 这个数字,而是人工处理的结果能否回流成新条件;如果不能回流,待确认清单会一直一样长,人工环节就变成了长期负担。
上面这套写法有一个明确的反例:当例外本身还在快速变化时,四段式描述会迅速过期。比如业务规则每周调整,或者页面类型正在重构,今天写好的“条件—依据”下周就不适用。此时更合理的做法不是把规则写死,而是先只做收集和展示:脚本只负责把疑似例外的条目连同原始信息列出来,不做任何判断动作,等规则稳定一个周期后再补上条件和依据。判断规则是否稳定的依据,是连续几次人工处理的结果是否指向同一批条件;如果每次结论都不一样,就还没到写判断逻辑的时候。
另外,改动前后做比较时要注意,页面表现的变化可能来自季节、搜索需求波动或数据采集口径差异,不能把一次改动直接当成原因。比较时至少让前后两段的观察窗口长度接近,并记录同期是否有其他改动同时上线。
先挑一类你手上最常人工判断的例外,按四段式写出一条完整描述,然后拿十来个样本让另一个人照着这条描述独立判断。如果两人结论基本一致,说明这条可以进脚本;如果分歧明显,先退回只收集不判断的版本,把分歧点记下来,作为下一轮补条件的输入。这个动作的结果会直接决定你是继续扩脚本,还是先停下来把规则谈清楚。