做法是:把经验拆成“判断条件—动作—例外分支—记录字段”,每个例外都要写清触发信号、处理动作、记录位置和人工复核条件。只写“遇到特殊情况人工处理”等于没写,脚本无法判断,执行者也会各自理解。下面用一个假设的页面标题批量改写场景,说明怎样把例外写进需求。
假设你手里有一份页面清单,每行包含页面地址、当前标题、目标关键词、页面类型。人工经验是:标题里目标关键词靠前的页面,点击情况通常更好。这个经验在少数样本上成立,但规模化后会出现例外,例如品牌词页面、栏目页、政策页。写脚本需求时,判断对象不能是“标题”,而应是“页面类型加标题结构”。
具体动作:把清单里的页面按类型分组,再为每组写一条判断规则。结果是脚本能先识别页面类型,再决定是否套用标题改写模板。下一步才是写例外分支。
“特殊情况”不是条件。可判断的条件至少能落到字段或规则上。以下是一组假设的例外写法,用于说明结构:
每条例外都要配一个动作和一个记录字段。例如“跳过并记录待人工确认”,记录字段写“例外类型、页面地址、原标题、跳过原因”。这样脚本执行后,你能从记录里看出哪些页面没有处理,而不是只看到处理成功数量。
假设清单中有三行:A 是普通文章页,B 是品牌词页面,C 是政策页。脚本需求写成:
skip_policy,不修改标题。skip_brand,不修改标题。updated。执行后,A 进入 updated,B 和 C 进入跳过记录。这个结果会影响下一步:如果跳过记录里政策页数量远高于预期,说明页面类型字段本身需要先修正,而不是继续调标题模板。这里的关键不是脚本多聪明,而是例外是否被写成可判断、可记录、可复核的分支。
人工经验写成脚本需求时,最容易漏掉的是边界。边界不是免责声明,而是“在什么条件下这条经验不适用”。例如:标题改写经验来自文章页,就不能直接照搬到栏目页;来自默认语言页面,就不能直接照搬到多语言页面;来自少量样本,就不能直接当作全站规则。
复核条件也要写进需求。可以规定:当跳过比例超过某个假设阈值时,暂停批量执行,先抽样检查页面类型字段和标题模板。这个阈值只是触发人工复核的信号,不是效果承诺。一次改动前后比较时,还要考虑季节、搜索需求变化和数据采集差异,不能把标题改动单独当成唯一原因。
实际动作可以这样安排:先在一个小分组上运行脚本,导出 updated 和跳过记录,人工检查跳过原因是否合理。若跳过原因集中在字段缺失,先补字段;若集中在模板不适配,先改模板。确认后再扩大范围。这样每一步的结果都会影响下一步,而不是一次性全量执行后再回头找问题。