嘟嘟社区

[经验] 【开源】一个基于AI用于反垃圾信息的telegram群管机器人


本帖最后由 codeas 于 2024-8-5 10:51 编辑

大概在前年的时候,由于自己`Telegram`的开源交流群快1万人了。

对于这种”大群“而言,早已被各大垃圾广告脚本列入群发名单了,所以经常能看到很多群发垃圾信息广告。

管理员多次跟我抱怨“广告垃圾太多了,根本删不完,有的还会偷偷趁管理都睡了进来发,防不胜防”,

当时就在计划写一个`反广告`的机器人,

最开始的设想很简单,找一批`违禁词`做基础数据源,然后在根据用户的发言做`关键词拆分`,

如果用户发言里面包含的关键词`命中n个`以后,就代表是垃圾信息,立马对用户进行`封禁操作`。

但是上线后发现以下几个弊端:

– 1.违禁词库不够大,能找到的很多都是一些旧数据了,导致命中率很低
– 2.只能识别文字信息,如果对方在消息里插入符号、特殊字符、emoji等来混淆信息,就根本无法识别了
– 3.无法识别图片和表情
– 4.如果`违禁词`出现更新和变种,那么还得管理员经常去做词库更新,累之~

再运行一段时间发现以上缺点后,我就开始失望了,因为我没有精力和时间去做更多的手段完善`识别率`,

只能祈祷用爱发电的管理员们多多关注群消息,手动删除。

我也尝试过许多第三方的机器人,但是效果可能都不太如尽人意。

但是在上个星期,一位好友突然让我尝试一个机器人,说识别率很高,我就去扫了一眼。

发现它是基于chatgpt去做识别的,

这次发现突然给了我灵感,对啊,为什么我没想的用`AI`去做识别呢?


我这人有个缺点,就是了解原理以后,喜欢自己造轮子,命运得握在自己手上不是?

这里也非常感谢https://t.me/ZUOLUOTV_AI_BOT机器人以及它的作者在推特上透露的灵感,

当然使用`AI`还有个好处就是,现在很多`AI`接口的中转站,价格相较于官方会便宜很多很多,

而且`AI`是支持`多语言交互的`,不仅仅局限于反`中文垃圾消息`,随着模型的成熟,它能理解并判断更多的语言。

说干就干,`IDEA`启动!

这里简单可以描述群发广告机器人的原理:

  1. 1. 广告脚本控制的telegram账号其实都是`协议号`,这种号是活不久的,用完就换,几乎是一次性的
  2. 2. 已知这种账号如果活不久的话,程序在控制它们的时候肯定会尽快发挥价值,说不定一个号在短时间内会加很多群然后发垃圾广告信息
  3. 3. 广告号一般特征非常明显,会在昵称和简介里包含垃圾信息

复制代码

好了,现在我们了解了`茅`的原理了,接下来我们开始实现`盾`

`盾`的实现原理如下:

  1. 1. 机器人监听新用户加群事件,将用户的信息存在本地数据库中
  2. 2. 机器人监听新用户发言事件,将用户的发言次数存在本地数据库中
  3. 3. 判断条件:如果一个新用户在加入群后的`n`天内发言,并且`n`次发言内容都没问题,则后续这个用户将直接放入白名单,不再验证

复制代码

这样做的理由是什么:
– 1.由于大群内发言人数非常多,为了钱包考虑,永远不可能每次发言都交给`AI`做判断,对正常用户来说这样做是没意义的,造成无意义的成本消耗
– 2.根据上述原理我们得知,广告号的存活时间非常短暂,telegram官方也会做封禁,所以大部分的广告号特征就是新加入群,马上就开始发垃圾广告,这样识别起来成功率非常高!
– 3.当然如果一个用户在一定时间内的发言都没问题的话,后续也不需要在验证了,节约钱包

剩下的事情就简单多了,只需要预先设置好`AI的prompt`,然后把用户发言的内容交给它判断就行了。

暂时我只实现了`Openai`的接口,目前看来足够使用,其他模型等后续有时间再做。

我们来看一下效果:

我和朋友在线上测试了几天,发现识别效果还是不错的,当然速度的话还是取决于你的服务器和AI的接口。

我将它开源了出来,有需求或者对Telegram机器人开发感兴趣的话可以看看。

基于go语言和docker启动,数据源用的sqlite,无需过多依赖,可以一键启动。

项目地址:https://github.com/assimon/ai-anti-bot

原文地址:https://utf8.hk/archives/ai-anti-bot.html

膜拜技术大佬