AI生成内容被拦截大多不是模型本身有问题,而是安全过滤链路对上下文不敏感。一个词表命中就判违规,导致医疗、编程、法律等正常内容频繁被误伤。有人试图用replace把敏感词替换成拼音或拆字,但会破坏语义,而且可能被更严格的语义模型识别为变体。正确的做法是先理解触发原因,再用合规改写策略优化。

一、敏感词拦截误报的根源:不是词表太严,而是上下文缺失
传统敏感词过滤依赖多模式匹配,包括AC自动机、DFA等,只要文本中出现词表中的词就拦截。但中文多义词很多,例如“杀”在“杀死进程”中是技术词,“自杀风险”是心理评估术语。系统没有上下文感知能力,会产生大量误报。另外,基于分类模型的安全审核也存在阈值问题,模型可能将“如何实现支付接口”误判为金融违规。理解这些能帮助定位是词表问题还是模型问题。
某内容平台曾把“账号”设为敏感词,结果所有包含“账号管理”的正常文章全部无法发布。修复方式是给词表增加规则:当“账号”与“登录”“管理”“设置”等词共现时降低风险等级。这就是上下文规则。单纯依赖词表命中无法解决这类问题,需要在过滤链路中加入规则引擎和分类模型的分层判断。
下面是一段基于AC自动机的多模式敏感词检测示例,可以看到命中逻辑本身很简单,但缺少语义判断:
import ahocorasick
def build_filter(words):
automaton = ahocorasick.Automaton()
for idx, word in enumerate(words):
automaton.add_word(word, (idx, word))
automaton.make_automaton()
return automaton
def check_sensitive(text, automaton):
hits = []
for end_index, (idx, word) in automaton.iter(text):
start_index = end_index - len(word) + 1
hits.append((word, start_index, end_index))
return hits
words = ["银行卡", "身份证", "验证码"]
text = "用户需要输入银行卡并进行身份证验证,然后获取验证码。"
automaton = build_filter(words)
for word, start, end in check_sensitive(text, automaton):
print(f"命中敏感词:{word},位置:{start}-{end}")
二、从硬过滤到合规改写:保留语义的三种策略
不要用拆字、拼音或emoji替代敏感词,这些属于对抗性写法,可能被更严格的内容安全模型识别为变体,反而加重处罚。合规改写的核心是保留原意但规避歧义。策略一是同义替换,比如把“如何杀死进程”改为“如何结束进程”或“如何终止进程”。策略二是上下文补全,添加限定语消除歧义,例如“如何合理管理账号”比“如何获取账号”风险更低。策略三是调用大模型进行改写,输入原始文本,要求在不改变技术含义的前提下使用更规范的表述。
大模型改写的优势在于它能理解完整语义,而不是机械替换。实际使用时可以通过提示词对改写目标进行约束,避免模型删减关键信息或添加原文没有的内容。下面是一个基于OpenAI兼容接口的合规改写示例:
import openai
def compliant_rewrite(original_text):
prompt = f"""请对以下文本进行合规改写,要求:
1. 保留核心信息和原意;
2. 避免使用可能触发内容安全拦截的歧义词汇;
3. 语言自然、专业,不改变技术含义;
4. 不添加原文没有的事实。
原文:
{original_text}
改写结果:"""
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=0.3,
)
return response["choices"][0]["message"]["content"]
text = "怎么杀死后台运行的进程?"
print(compliant_rewrite(text))
实际生产中,改写后需要再做一次同样的安全过滤,确保不再命中。如果仍然命中,可将改写前和改写后的文本一并交给人工审核。这种双阶段机制能有效降低误报率,同时保留对高风险内容的拦截能力。不要指望一次改写就能解决所有问题,过滤策略和改写策略需要同步迭代。
三、自建安全过滤系统:词库维护、误报白名单与灰度发布
如果使用第三方内容安全服务,通常只能看到风险标签,无法调整内部词表。自建系统能获得更多控制权。核心组件包括敏感词库、上下文规则引擎、分类模型、白名单和人工审核接口。词库要按类别维护,支持加词、删词和有效期,不要把所有词混在一个大表中,否则命中后很难排查原因。
一个可落地的过滤配置可以设计为JSON格式,将敏感词、上下文规则和白名单分开管理:
{
"sensitive_words": [
{"word": "银行卡", "level": "high", "category": "finance"},
{"word": "身份证", "level": "high", "category": "identity"},
{"word": "验证码", "level": "medium", "category": "security"}
],
"context_rules": [
{
"word": "账号",
"risk_level": "low",
"allow_with": ["登录", "管理", "设置", "绑定"],
"action": "downgrade"
}
],
"whitelist": [
"账号管理系统",
"进程终止操作"
],
"review_threshold": 0.75
}
灰度发布也是过滤系统的重要环节。新规则上线时先对10%流量生效,对比误报率和漏报率,稳定后再全量。可以采用A/B测试,将命中文本自动采样到人工审核队列,反过来优化词表和规则。这种闭环能持续降低误拦截,同时防止因为规则过严而影响正常内容发布。
四、合规边界:改写不是绕过监管,而是降低误报
本文所有策略只用于解决正常内容被误拦截的问题,不能用于生成违法、有害、侵权或诈骗信息。无论词表过滤如何调整,都必须遵守法律法规和平台规范。如果文本本身就包含违规内容,任何改写都不应该被允许通过。合规改写的红线是不能改变事实、不能隐瞒风险、不能规避必要的内容审查。
以金融领域为例,即使通过改写避开了“稳赚”等敏感词,如果内容仍在承诺收益或夸大宣传,也应被拦截。因此安全过滤系统的最终判断不能只靠词表,还需要业务规则和人工审核。可以把改写链路设计为:生成、敏感词检测、合规改写、再次检测、人工抽审、发布。这样既保证了效率,也保留了安全底线。
掌握敏感词检测算法、上下文规则和大模型改写技巧,能帮助团队减少误拦截。但所有优化都应围绕合规展开。建议定期复盘被拦截的文本,把正常内容加入白名单,把新型违规变体加入词库。安全过滤不是静态的,而是一个持续迭代的工程。只有把内容安全和生成质量放在同一套体系里优化,才能真正解决AI生成内容频繁被误拦截的问题。