如何建立博客:把人工经验写成脚本需求时怎样描述例外情况

📍 WDQWDWQD987AAAAA:216.73.217.135
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /ad53f1f96cf4.html
📄

如何建立博客:把人工经验写成脚本需求时怎样描述例外情况

直接回答:不要只写“遇到例外就跳过”,而要把例外拆成可判定的条件、可观察的信号和明确的处置动作。人工经验里“这条不合适”往往包含多个判断,脚本需求必须把这些判断写成条件—信号—动作三段式,并注明无法判断时是停止、降级还是转人工。判断标准是:只要同一例外在两次运行中可能得到不同结果,就说明描述还不够具体。

先区分两类例外:可判定的与需要人工介入的

把人工经验转成脚本需求时,最常见的错误是把所有“特殊情况”塞进同一个分支。更有效的做法是先分成两类。

区分的依据不是例外本身复杂不复杂,而是判断所需的信息是否已经结构化。如果判断依赖“读起来是否合适”,就应进入人工队列;如果依赖“字段是否为空、值是否超限”,就应写成自动分支。

用条件—信号—动作描述每一个例外

人工经验通常以口语存在,例如“太短的不要”“重复的不要”“看起来像广告的不要”。这些说法不能直接变成脚本需求,因为“太短”“重复”“像广告”都没有边界。转换时至少补齐三件事:

  1. 条件:在什么前提下才检查这个例外。例如仅对正文类内容检查长度,对短讯类内容不检查。
  2. 信号:脚本实际读取什么。例如字符数、字段是否为空、是否命中预设词表、同一标识是否在指定时间窗内出现过。
  3. 动作:命中后做什么。例如跳过、降级处理、写入待审清单、记录原因码并继续。

假设一个场景:你从人工整理的经验里总结出“来源不明的文章先不发”。写成需求时可以落成:当来源字段为空,且正文中没有可核对的出处说明时,将该条写入待审清单,记录原因码 missing_source,不进入发布队列。这个动作的结果会直接影响下一步——待审清单的数量和原因分布,决定你是继续补充来源字段,还是调整采集规则。

两种条件下的不同选择:自动跳过还是转人工

同一个例外,在不同条件下应做出不同选择。可以用下面这组对照来判断。

选择依据可以归纳为一句话:脚本能说清“为什么判它例外”,就自动处理;说不清,就转人工。如果一条例外规则写完后,你无法向别人解释它在什么输入下会触发,那它就不适合直接写进脚本。

出现与直觉相反的结果时,先分清三种解释

把经验写成脚本后,常会出现与预期相反的结果:本该被过滤的内容通过了,或者本该保留的内容被跳过了。这时不要立刻改规则,先区分可能的原因。

区分方法是保留一次运行的输入样本和命中记录,逐条核对触发原因。如果同一批输入在两次运行中结果不同,优先检查规则是否依赖了不稳定字段;如果输入本身不同,则先确认采集范围是否变化。一次改动前后的比较还要考虑季节、搜索需求变化和数据采集差异,不能只凭单次结果断定规则有效。

把例外写进需求文档的最小结构

为了让后续维护的人能判断规则是否仍然成立,每个例外至少写清以下内容:

完成这一步后,下一步不是继续增加规则,而是用一批已知样本回放,确认每个例外分支都能被解释。如果某个分支从未被触发,或者触发的样本都无法归因,就说明该例外描述还需要回到人工经验里补充条件,而不是直接上线。

图1 图2

nginx