批量替换前构造反例样本,核心不是找“更多例子”,而是先找会因这次替换而变坏、变歧义或失去上下文的页面。若反例样本能稳定暴露误伤,就先改规则再全量替换;若反例全部通过,才把替换范围扩大,并把样本留作回滚核对依据。
常见情形是:运营整理了几十条“应该被替换”的页面,替换后逐条检查,结果全部符合预期,于是判断规则安全。但上线后,另一些页面出现语义断裂、链接文字失真或段落重复。两种解释都成立:一是样本只覆盖了目标写法,没有覆盖不该被改的邻近写法;二是替换本身没错,但替换后页面之间的差异被抹平,触发了新的重复或歧义。
区分这两种解释,靠的不是再抽一批“正例”,而是专门构造反例:把最容易被误伤的写法、最依赖上下文的句子、最接近目标串但含义不同的表达,主动放进测试范围。反例样本的作用是提前暴露边界,而不是证明替换正确。
面对误伤,通常有两种看似合理的做法。
选择条件可以这样判断:如果反例样本中,误伤都能归因到同一个可描述的上下文,就先扩规则;如果反例之间没有共同点,只是“看起来不该改”,就先缩范围。缩范围不是失败,而是把不可控的批量操作拆成可控的小步。
构造反例时,不要只挑内容质量高的页面,而要按“替换后最容易出问题”的结构来选。
每类至少准备两三个样本,并记录替换前的原文、替换后预期、实际结果。样本不必多,但必须能回答“这条规则在什么条件下会错”。
假设你要把一批页面中的“立即咨询”统一替换为“获取方案”。正例样本显示替换成功。但反例样本里出现三种情况:一是按钮旁已有“方案下载”,替换后两个入口含义重叠;二是某篇说明里写“不需要立即咨询,可先自助排查”,替换后变成“不需要获取方案”,语义反转;三是链接文字被替换后,指向的页面标题仍是咨询类表述,用户点击预期不一致。
这时先缩范围:只替换正文中独立成句的“立即咨询”,跳过否定句、按钮区和链接文字。执行后重新跑同一批反例,确认语义反转和入口重叠消失。下一步不是马上全量替换,而是把缩范围后的规则再放到另一组未参与调参的页面上验证。只有新样本也不再出现同类误伤,才扩大范围。
替换后若观察流量、点击或咨询变化,要先把季节、搜索需求变化和数据采集差异考虑进去。一次改动前后比较,不能单独证明替换正确或错误。更稳妥的做法是:保留替换前一段时间的基线,记录同期是否有活动、节假日或采集口径变化;把反例样本的通过情况作为主要判断依据,把流量变化作为辅助信号。若反例仍有误伤,即使数据短期变好,也应先修规则。
最终决策可以归结为一句话:反例样本决定你能不能全量替换,正例样本只决定你替换什么。先让反例通过,再谈扩大范围。