Simon 的套话检测器只高亮不拦人,我那套敢拦,10 篇稿子一篇没出来

cover

哈喽,我是飞飞。

先撇清一下,免得你觉得我又在炒冷饭。这条线上我写过几篇:一篇讲我攒了六十几条规矩删 AI 腔,一篇讲哪几种 AI 味我死活不留,还有一篇讲写 skill 的时候规则太宽会反咬。那几篇讲的都是怎么把规则写好。这篇不碰这个。

这篇只问一件事:你辛辛苦苦攒的那些检测规则,到底该不该有权把你的活拦下来。

我是被一张账单逼着想明白的。

他那个工具只高亮

事情起头是 Simon Willison 前两天扔出来的一个小玩意儿。

他用 Fable 5 顺手 vibe code 了一个网页应用,说人话就是没怎么正经设计,边聊边让模型给写出来的。功能特别单一:你把一段文字贴进去,它把大模型最爱用的十种套话给你高亮出来。

被它点名的有 no fluff, no filler, no jargon 这种链式否定,有 sit with that,有 you already know,还有 worth naming。你要是觉得英文没那么直观,换成中文的「让我们一起来看看」「值得深思」「这不仅仅是一次尝试」,那个塑料味立刻就对上了。

我盯着它看了半天。真正让我停下来的,是它的动词。

Highlight。高亮。

它不打分。稿子及不及格它不管,句子该怎么改它也不插手。它就把可疑的地方涂个颜色,剩下的全交回给你。

我当时心里咯噔一下。因为我那套东西,走的是完全相反的路。

我给检测发过阻断权

我写文章是一条流水线在跑:拉资讯、选题、调研、写稿、润色、评阅、配图、分发,十几个环节各归各的 skill 管。

里头有两层检测。

底下一层是硬扫描,靠 grep 硬查。中文那种长横破折号必须清零,那玩意儿是 AI 中文最扎眼的指纹,撒手不管一篇能塞进去二十几个。对仗句式全文最多留一处。三连否定的排比不许排。小标题超过十二个字或者带括号,揪出来重写。中文字数拿正则数一遍,卡在两千到两千五。这层规矩攒到现在一百四十多条,是跟着一百二十多篇稿子一条条长出来的。

上面一层是评分。一层专查 AI 味,从结构模板化、表达空洞、细节缺失这些维度打百分比;另一层拿刘润那套写作心法的六个维度打分,满分一百。

出事的是我给上面这层配的权力。

我当初的设计是:评分低于 80 就自动打回去重写,最多循环三轮,三轮还不达标,整条流水线停在那儿等我裁决。

写的时候我觉得这设计特别负责任。质量不达标,凭什么放出去?

那次批量跑成了空转

真正教育我的是一次批量。

那天我一口气排了十篇稿子进流水线,想着挂着让它跑,我该干嘛干嘛去。

回来一看傻眼了。

十篇里八篇全部撞到了三轮上限,一动不动卡在那儿等我拍板。我离开之前它们在跑,我回来它们还在原地,只是账单涨了:整个批次消耗六十四次 agent 调用,烧掉大约两百七十万 token。

交付了几篇?

零。一篇都没出来。钱花了,时间过了,机器忙了大半天,产出是空的。

更难受的是我一篇篇翻分数的时候。那八篇里好几篇卡在七十七、七十八,就差那么两三分。而给出这两三分的,是一个模型的主观判断。它换个时间点重跑,给到八十一也不奇怪。就为这么一个会飘的数,八篇稿子全压在那儿动不了。

说白了,我拿一个会抖的主观分数,接上了一个能停掉整条产线的开关。

硬规则和软评分该分开

复盘完我改了设计。但我动的地方跟阈值无关。

我一开始的本能是把 80 降到 75。降完琢磨了一下,这是治标不治本,下次照样有稿子卡在七十三。

真正该动的是权力。

后来的规矩是:评分环节只做一轮定点重改,改完不管多少分一律放行。总结里如实写一句「初评 73 分,复核 82 分」,或者「初评 76 分,复核 78 分」。分数照给,照实说,但它不许拦人。

这么改完,我才把两层检测的区别想清楚。

底下那层 grep 硬规则,判的是客观事实。一篇稿子里有没有破折号,小标题有没有超过十二个字,这些事没有商量余地,机器数得清,也不会今天数出一个明天数出另一个。这层我至今还留着阻断权,它揪出来我就得改。

上面那层评分,判的是主观质量。同一篇稿子,模型今天给 79、明天给 83 都算正常。把这种会抖的东西接到阻断开关上,就是给流水线埋雷。

一句话,能被机器判死的,可以有权拦你;只能被机器估个大概的,只配给你提个醒。

Simon 那个工具,踏踏实实就站在后面那一类里。它清楚自己认出来的是「可疑」而非「有罪」,所以它只涂色。

漏检和错拦差着量级

还有一笔账,我当初压根没算过。

漏检和错拦,代价根本不在一个量级上。

漏检的代价是什么?一篇稿子里混进去两句 AI 腔,读者读着觉得这段有点塑料。难受,但天塌不下来,下篇改进就是了。

错拦的代价是什么?整条产线停摆,十篇稿子一篇出不来,两百七十万 token 打水漂。

这两种错差着好几个数量级。既然差这么多,默认那一档就该偏向放行,而不该偏向拦截。

我以前把「宁可错杀不可放过」当成严谨。现在我觉得,那只是没算过错杀的账。

顺便说个更早的坑,正好是同一个道理的另一面。我那条查对仗的 grep 规则写得太宽的时候,会把「它是不是天天重复、规则是不是清晰」这种正常疑问句当成对仗句揪出来。「第一反应」被当成列表编号,「最后一步」被当成收尾套话。每次我都得人工判一遍,这是真命中还是误伤。假如这些误伤当年也带着阻断权,我大概每篇稿子都得跟机器吵一架。

该拦的地方还是得拦

话说回来,我不是在讲检测就该全线放行。

有些闸门我攥得死死的,一点没松。

比如发公众号那个环节。我把它做成必须我手打指令才触发,默认整个跳过。哪怕前面所有检测全绿、评分给到九十,它也不会自己把稿子推出去。

区别在哪儿?

发布这个动作是不可逆的,而且是对外的。推出去就收不回来了。这种地方我宁可多敲一句话,也不接受任何自动化。

而重写一遍稿子这个动作,可逆、对内、随时能补救。给它配阻断权,纯属浪费。

所以那把尺子量的不在这件事重不重要,在它出了岔子能不能补救。补不回来的,闸门焊死;补得回来的,让它先过去。

今天先给哪条降权

如果你手里也攒着一套自己的检测规则,不管是写作的、代码的,还是 agent 流水线上的,今天有件小事可以做。

把规则摊开,一条条问:这条判的是客观事实,还是主观好坏。

判客观事实的那些,留着阻断权没问题。判主观好坏的那些,降级成提醒,只报数,不拦人。

再顺手问一句:这条要是误伤了,我得花多大代价才能救回来。救不回来的,才配当闸门。

说实话,我这套东西现在也谈不上磨好了。规则还在一篇篇往上加,误伤还在偶尔发生,我也不敢说这个平衡就找准了。但至少那条产线不会再因为一个七十八分把自己锁死。

绕了一圈我才明白,检测这件事真正难的不在把规则写多严,在想清楚它到底该不该有权拦住你。Simon 那个只会涂色的小工具,早就想明白了。

你手里那套规矩,有没有哪一条其实不配有拦人的权力?或者反过来,你被自己定的规矩卡住过没有?评论区聊聊,我挺想知道别人是怎么划这条线的。