把人工判断写成脚本需求,难点不在主流程,而在例外。以百度指数为例:人工看数时会凭经验跳过明显异常、合并同义关键词、对旧词做取舍,这些动作如果不写进需求,脚本就会把本该保留的部分一起清掉。描述例外的关键,是先给每条例外写清触发条件、判断依据和替代动作,再决定它是硬性拦截还是仅记录待人工确认。
退出旧内容、旧系统或旧合作关系时,例外通常来自两类原因,处理方式完全不同。
选择依据可以简化成一句:如果例外会改变后续动作,就必须写进需求;如果只是让人多看一眼,就放进日志。前者影响脚本分支,后者只影响复核节奏。
人工经验常被写成“明显异常就跳过”“差不多就合并”,这类描述脚本无法执行。改成三段式:触发条件、判断依据、替代动作。
这样写的好处是:例外不再是模糊的“特殊情况”,而是一个有输入、有理由、有输出的分支。复核时也能直接看到脚本为什么做了这个决定。
假设要写一个脚本,按百度指数决定一批旧关键词是否退出维护。主流程是:指数持续走低且无关联页面引用,则退出。例外可以这样描述:
触发条件:某词指数连续若干周期为0,但词面与一个仍在维护的词高度相似。 判断依据:疑似被归并,而非真实需求消失。 替代动作:不退出,保留原词记录,仅在下游展示中合并到主词,并标记“待人工确认”。
这个分支的实际影响是:脚本不会因为一次数据归零就删掉旧词,下一步的复核对象从“全部旧词”缩小到“被标记的少数词”,人工工作量下降,同时避免误删仍有价值的部分。
例外不是无条件通用。写需求时要说明它成立的前提,否则脚本换个场景就会误判。
把这些条件写进需求,例外的边界才清楚:什么情况下脚本自动处理,什么情况下必须交回人工。
例外描述完成后,先小范围跑一轮,观察被标记的词是否符合预期。如果标记过多,说明触发条件太宽,应收紧;如果该拦的没拦,说明判断依据不足,应补充证据字段。一次改动前后的比较要考虑季节和搜索需求变化,不能只凭单次数据判断对错。
最终判断标准不是“脚本有没有按规则执行”,而是“执行后仍需人工处理的部分是否变小,且没有丢掉该保留的部分”。达到这一点,例外描述才算合格,脚本也才真正承接了人工经验。