用规则引擎做内容合规:30 条规则、8 类风险,以及怎么把误报压下去
前两天做了个小工具,输入一篇小红书笔记的标题、正文和标签,输出风险分、命中清单和逐句改写建议。发出去之后有几个人问实现细节,索性把设计过程写清楚。
为什么用规则引擎,而不是直接问大模型
第一版我试过纯提示词方案:把《广告法》和社区规范塞进 system prompt,让模型直接判断。
效果不稳定。同一个句子问两次,一次说没问题,一次说有风险;让它给依据,它能编出条款号。合规这种东西,结论必须可复现、可追溯——你说我这句违规,得指到具体哪一条,而不是「模型觉得很危险」。
所以最后拆成两层:
- 规则引擎负责「查」:正则匹配,命中就是命中,不命中就是不命中,结果确定
- 模型负责「改」:把命中片段改写成合规表达,这一步需要语境理解
规则怎么组织
30 条规则,10 个类别,写在一个 JSON 里:
{
"id": "ABS-001",
"category": "absolute",
"severity": "high",
"pattern": "最(好|佳|棒|优|强|低|便宜|先进|专业|受欢迎|畅销)",
"suggestion": "改为可验证的相对表述,如「我用过的几款里比较顺手」",
"reference": "《广告法》第九条禁止使用「国家级」「最高级」「最佳」等用语"
}
关键是 pattern 写得足够窄。「最好」这个词本身没问题——「这道菜最好趁热吃」完全正常。所以模式限定成「最 + 形容词」,把它当修饰语而不是当程度副词。
十类分别是:绝对化用语、医疗与功效宣称、效果承诺、站外导流、诱导互动、价格促销违规、贬低竞品、广告标识缺失、敏感品类、隐私信息。每一类都对应具体的法规出处或社区规范,reference 字段落到条款级别。
打分:为什么是减分制
每条命中的规则扣一次分,同类不重复扣:high 扣 30,medium 扣 15,low 扣 5,下限 0。
85 分以上低风险,60 到 84 中风险,60 以下高风险。
减分制的好处是可解释:用户看到 40 分,能一眼数出来是哪两条 high 造成的。如果改成加权模型,分数会变得没法解释,用户不知道该改哪里。
最难的部分:误报
规则匹配的死亡螺旋是误报。你写得越严,误报越多;用户被误报烦两次,就不用了。
最典型的是否定和反讽:
> 第二,别信那些喊着几天就能见效的话术。
这句话里有「见效」,字面命中「效果承诺」。但它恰恰是在劝人别信。
我的处理是在命中词前 24 个字符里找否定线索:
NEG_CUES = re.compile(
r"(别信|不要信|别买|不是|谁说|谁跟|避免|谨防|拒绝|切勿|"
r"没有|无需|不用|不再|不会|划过去|反着来|骗人|智商税|踩坑|别再)"
)
def is_negated(text, start):
return bool(NEG_CUES.search(text[max(0, start - NEG_WINDOW):start]))
命中否定线索就不计分,但不丢弃——单独放进报告的「已忽略」区,标上「建议人工确认」。
这个设计很重要。如果我直接把否定语境的结果吞掉,用户会以为漏检了;列出来但不计分,既降低误报又不丢信息。
一个真实的量化对比
我拿一篇故意写满违规点的样例测:
原稿:0 分,14 类命中,从绝对化用语到站外导流到诱导互动全覆盖。
改写后:100 分,零命中,结构检查也全过。
改写不是简单删词,是三条原则:
1. 保留信息量。删掉「全网最低」,要补上「我买的时候 99,官方旗舰店,10 月 12 日下单」——信息密度不能因为合规而下降
2. 降级到主观感受。「三天见效」改成「我用了两周,下巴那颗红肿的消下去了」,把结论换成过程
3. 换到站内动作。「加微信」改成「主页有合集」,转化路径不能因为合规而断掉
工程细节
纯 Python 标准库,没有依赖,python compliance_check.py note.md 直接跑。
支持两种输出:默认 Markdown 报告给人看,--format json 给流水线用。
17 个单元测试,覆盖解析、规则命中、否定排除、打分、样例端到端。其中一条测试专门验证「规则 id 不重复」和「所有正则能编译」——规则库会一直长,这两条是最容易在增量维护时崩掉的。
边界
这个工具做的是发布前自检,不是平台审核模拟器。
它不看图片、不看视频、不看封面文字,也不处理评论区。规则库覆盖的是有明确文本特征的问题,语义层面的问题还是要人判断。
报告里每一条命中都带 reference,遇到边界情况按条款原文判断,而不是按我的规则判断。
工具已经发布到小红书 Skill Hub 和华为云 Skill 市场,搜「小红书笔记合规体检」能找到。想加规则的话,往 JSON 里加一条就行,不用改代码。
- 点赞
- 收藏
- 关注作者
评论(0)