治理一个 Telegram 社群,听上去像是一个已被解决的问题,直到你真的去运营一个。一个上万人的群组会喷涌出海量消息,而其中潜藏着一些垃圾信息发布者——他们花了数年时间,学会如何避开你能写出的每一个幼稚过滤器。他们混用多种文字、插入零宽字符、把话术翻译成三十种语言,并以比黑名单更新更快的速度轮换措辞。
Telm 就是我们对此给出的答案。它背后的设计原则是:垃圾信息检测同时是两个问题——它必须足够快,能赶在一条消息被看到之前动手;又必须足够准,才不会误伤真实成员。这两个目标彼此背道而驰——最准确的检查往往也最慢——所以我们没有二选一,而是构建了一条三层流水线,每一层都去捕捉上一层无法捕捉的东西,只把真正棘手的情况向下传递。
第一层:规则引擎
第一层是一套手工调校的规则引擎,它承担了绝大部分工作。它携带 200 多条模式,覆盖那些几乎从不改变的垃圾信息:加密货币拉盘邀请、虚假招聘、“私信我轻松赚钱”、钓鱼链接,以及用来把它们偷运过过滤器的各种混淆伎俩。
让它行之有效的,是两点:覆盖面和速度。
- 它在匹配前会对文本做归一化——合并形近的 Unicode 字符、剥除零宽空格、瓦解那种把“invest”变成一串看似完全相同、实则不同的字符串的同形异义伎俩。垃圾信息发布者依赖的,正是让你的正则看到的东西与人眼看到的东西不一样;归一化恰好堵上了这道缝隙。
- 它覆盖 30 多种语言,因为一条只懂英语的规则,对世界上大部分垃圾信息都是视而不见的。
- 它的运行耗时不到 10 毫秒。正是这个数字,让 Telm 得以在会话室还没真正看到一条消息之前就把它删除,而不是等到损害已经造成之后。
规则引擎单凭自身就能抓住绝大多数垃圾信息。但规则有其上限:它只知道别人告诉过它的东西,而一场真正新颖的骗局不会匹配任何已有模式。这,正是接下来两层的用武之地。
第二层:AI 分类器
当一条消息从规则手下逃脱、却依然显得可疑时——一个不寻常的链接、一种古怪的发帖规律、一位首次发帖者带着一条形似话术的消息——它会被送往一个机器学习分类器,该分类器是在已标注的垃圾信息与正常消息上训练出来的。
分类器能抓住规则无法言明的东西:骗局的语气、操纵企图的结构、一条技术上干净、统计上却透着垃圾味的消息的形态。问题在于,模型推理代价高昂,若对每一条消息都跑一遍,就会击穿规则引擎费尽心力守护的延迟预算。
于是,分类器坐落在一层缓存之后。垃圾信息成波涌来——同一场活动会在几分钟之内,用近乎相同的消息轰炸许多个群组。我们以消息的归一化指纹作为缓存键,因此一场活动的第一个实例支付全额推理成本,而其后每一个副本都是一次缓存命中。在实践中,缓存吸收掉了绝大部分重复流量,模型只在真正全新的内容上才真正运行。
message ──▶ normalize ──▶ rule engine (<10ms, 200+ patterns)
│ uncertain
▼
fingerprint cache ──hit──▶ verdict
│ miss
▼
AI classifier ──▶ verdict + cache write第三层:语义记忆
第三层,正是让 Telm 随时间推移越来越难以被绕过的那一层。垃圾信息发布者不会把同一条消息发两遍——他们会换一种说法。“加入我们的专属信号群”变成“获取我们私密交易频道的访问权限”,再变成同一套说辞的葡萄牙语版本。指纹缓存看到的是三个不同的字符串;人看到的是同一个骗局。
语义记忆通过作用于含义而非文本,堵上了这道缝隙。当一条消息被确认为垃圾信息时,Telm 会存储一个嵌入向量——一个数值向量,它捕捉的是消息的含义,而非它的拼写方式。新消息同样会被嵌入,并按相似度与那份记忆做比对。一句改写、一次翻译、一段重新措辞的话术,都会在向量空间里落到原文附近,尽管它们在字面字符上几乎毫无共同之处。
正是这一点,让 Telm 能够抓住一个它只见过一次的骗局的第二、第三乃至第一百个变体。规则引擎应对已知,分类器应对新颖,而语义记忆应对变异——那条恰恰因为从不逐字重复自己而得以存活下来的垃圾信息长尾。
CAS 黑名单
并非每一道防线都必须在本地计算。Telm 集成了 Combot 反垃圾黑名单(CAS),这是一份全球性的、由社区维护的注册表,收录了整个 Telegram 生态中已被确认为垃圾信息发布者的账号。
CAS 的价值在于,它在一条消息尚不存在之时就已动手。当一个已知的坏账号试图加入或发帖时,Telm 可以当场将其封禁——无需分析内容,无需运行推理,因为身份本身就是信号。这是可能的最廉价的一道检查,它在检测流水线还来不及思考这些坏分子之前,就已剔除了其中相当一部分。
监控模式:只在你信任它之后才动手
一个会做出错误判断的治理机器人,比根本没有机器人还要糟糕。在第一天就删掉一位真实成员的消息,你就等于教会了社群不要信任这个工具。所以,每一个新群组一开始都让 Telm 处于监控模式。
在这一模式下,Telm 只观察、只汇报,什么都不碰。对每一条消息,它都记录下自己*本会*采取的动作——删除、禁言、封禁——并展示给你看,却并不真的执行其中任何一项。你得以清楚地看到,在你的真实成员参与下,这条流水线面对你社群的真实流量会如何表现,而这一切都发生在它获准动手之前。
这么做有两重效果。它建立起有理有据的信任:只有当你亲眼看到它的决策与你的判断相吻合,你才会把 Telm 切换到激活状态。同时,它也是一张用于调校的安全网——如果某条规则对你群组的文化来说过于激进,你会在一份报告里发现它,而不是在一位因说了句“来看看我的项目”而被封禁的成员的愤怒消息里发现它。
从某种意义上说,监控模式把整套理念浓缩进了一项功能。检测之所以可以激进,是因为激活足够保守。你在它动手之前就已看到;而当它真正动手时,你早已知道它是对的。