纯关键词匹配容易误判——用户说退群和退货意思完全不同但字库里退就一个字。加上下文窗口过滤能解决大部分误判。再配上三级预警既能实时拦截又不会误伤。群消息监听的事件推送格式、撤回和踢人的接口调用示例可以在 Eyun 接口文档 里找到。一、Trie 上下文窗口让匹配有判断第一步还是 Trie O(n) 匹配——词库建一棵 Trie每条消息扫一遍秒级拿到所有命中的关键词。第二步加上下文窗口——匹配到关键词 K 后看 K 前后 5-10 个字的语义是否真的敏感。比如退货里的退前后是货说明是正常咨询不算退群风险。上下文窗口的语义判断不用大模型用简单的词典和规则——退 后面是 群 → 敏感退群、退 后面是 货/款/钱 → 正常退货退款。覆盖主要歧义场景够用跑起来不慢。二、三级预警敏感→一般→待确认所有命中按严重程度分三级严重违规政治色情→ 立即撤回踢人报警到管理员一般违规广告骚扰→ 撤回警告拉黑待确认边界模糊的词→ 不自动处理只推给群主看一眼再决定。待确认这一层是纯词库和强规则都做不到的——比如群里说私我可能是正常引流也可能是违规导流机器不好判断就推给群主看一眼再处理。三、误报日志让规则越跑越准每次自动处罚撤回/踢人都要记录原始消息、命中的关键词、上下文窗口判断结果、为什么判成这个级别。运营定期扫误报日志把容易误判的词从敏感词库清掉或调整上下文规则。规则是跑出来的不是一次写死的。Trie 树构建和上下文窗口的词典规则模板Eyun 技术文档 有示例可以参考。敏感词监控对照环节做法关键点常见坑Trie 匹配O(n) 扫一遍毫秒级纯词库没判断上下文窗口前后 5-10 字语义词典规则全靠大模型慢三级预警严重→一般→待确认边界推给人工一律踢人误伤误报日志每次处罚留记录运营定期扫规则写死不迭代上下文增强敏感词监控实现class ContextualWarden: SENSITIVE_WORDS [色情, 赌博, 退群] AMBIGUOUS_WORDS [退, 留, 加] def __init__(self, api, store, trie): self.api api self.store store self.trie trie # 预构建的 Trie def scan(self, event): hits self.trie.scan(event[content]) if not hits: return for hit in hits: level self._classify(hit, event[content]) self._act(level, event, hit) def _classify(self, hit, full_text): # 拿 hit 前后 5 字的上下文窗口 pos hit[pos] left full_text[max(0, pos-5):pos] right full_text[pos:pos10] window left right # 歧义判断退 要看是 退群 还是 退货 if hit[keyword] in self.AMBIGUOUS_WORDS: if 退 in hit[keyword]: if any(x in right for x in [货, 款, 钱, 费]): return normal # 退货退款 if any(x in right for x in [群, 圈, 出]): return severe # 退群退圈 # 其他歧义词推给人工 return pending # 明确敏感词色情/赌博直接判严重 if hit[level] severe: return severe return medium def _act(self, level, event, hit): # 先留痕以后做误报分析 self.store.log_scan(event, hit, level) if level normal: return # 上下文判断正常放过 if level pending: # 推给群主人工确认 self.api.post(/send, { wxid: self.store.group_owner(event[group_id]), content: (f群 {event[group_id]} 疑似敏感 f{hit[keyword]} 上下文 f{event[content][max(0, hit[pos]-10):hit[pos]15]} f 发送人{event[from]})[:500]}) return # 自动处理撤回 分级处罚 self.api.post(/group/recall, {group_id: event[group_id], msg_id: event[msg_id]}) if level severe: self.api.post(/group/kick, {group_id: event[group_id], wxid: event[from]}) self.store.blacklist(event[group_id], event[from]) self.api.post(/send, { wxid: self.store.group_owner(event[group_id]), content: f严重违规已处理: {hit[keyword]}}) elif level medium: self.api.post(/group/send, { group_id: event[group_id], content: (f{self.store.nickname(event[from])} f 请注意群规)[:500]})落地建议敏感词监控别纯 Trie 匹配就直接踢人——加上下文窗口看关键词前后 5-10 个字用简单词典规则就能把退货和退群区分开。命中分三级严重违规立即撤回踢人报警、一般违规撤回警告、边界模糊的推给群主人工确认别自动处理。每次自动处罚都留原始消息、命中词、上下文判断结果运营定期扫误报日志迭代词库和规则——规则是跑出来的不是写死的。群消息监听、撤回、踢人这些微信侧的操作接口由Eyun这类平台提供上下文判断、三级预警、误报迭代这些属于你的业务规则需要自建服务实现。