垃圾邮件:追溯性地让 AI 审查最近的帖子,然后删除被标记为垃圾邮件的帖子

,

我帮助了一个每小时收到约 30 条垃圾邮件帖子的网站。我们启用了 AI Spam,但这并没有解决现有帖子存在的问题。我所做的就是这个。这可能对您有用。它没有在您的网站上进行测试,因此如果您执行了任何这些操作,您应该进行备份,并确保它看起来不像是由试图摧毁您网站的 AI 编写的。

这假定您了解 rails 的工作原理以及如何运行它。如果您不了解,您可能不应该这样做。

首先,您应该将您的网站置于 Discourse 中的只读模式,这样人们就不会在您犯下可怕错误时创建内容。然后进行备份。这意味着在您关闭只读模式之前,您可以安全地恢复到您的备份。

获取最近的帖子

攻击开始于一天多前,所以我回溯了两天。您也可以执行类似 36.hours.ago 的操作,如果您想更明确的话。如果我更聪明一些,我可能会做些什么来跳过私信中的帖子,但我决定不去担心它。

posts = Post.where("created_at >= ?", 2.days.ago)
          .where(deleted_at: nil)
          .where("user_id > ?", 1)

对这些帖子调用 SpamScanner

我不太确定是什么导致其中一些帖子失败,但如果您遇到一些“哎呀”的情况,这可能并不值得担心。

posts.each do |post|
  begin
    puts  "https://talk.commonmark.org/p/#{post.id}"
    DiscourseAi::AiModeration::SpamScanner.perform_scan(post)
  rescue
    puts "oops";
  end;
  sleep 0.2;
end

获取现在需要审核的帖子

这会获取刚刚被标记为可审核的(可能是通过上述操作)待审核帖子。我们不想盲目地将此应用于不属于这次危险冒险的内容。

reviewables = Reviewable.where(status: "pending")
  .where(potential_spam: true)
  .where("created_at >= ?", 1.hour.ago)
  .where("updated_at >= ?", 1.hour.ago)

盲目信任 AI

当然,您仔细查看了被隐藏的主题,它们看起来都确实是垃圾邮件,所以您就准备动手了。标题是个玩笑。您不是真的盲目信任 AI,对吧?!?!?

这将删除帖子并删除和阻止用户。这非常非常危险。


reviewables.each do |reviewable|
  begin
    puts "deleting https://talk.commonmark.org/t/#{reviewable.topic_id}"
    if reviewable.topic.nil?
      puts "already gone"
      next
    end
    reviewable.perform(user, :delete_user_block)
  rescue
    puts "oops"
  end
end
8 个赞