Discourse AI - 垃圾邮件检测

:bookmark: 本指南介绍了如何配置和使用 Discourse AI 的垃圾邮件检测功能,包括设置过程、扫描标准、分类逻辑、自定义设置以及与 AI 分类系统的对比。

:person_raising_hand: 所需用户级别:管理员

:megaphone: 此功能现在对 Starter 和 Pro 客户以及我们之前的 Basic、Open Source、Creator 和 Business 客户默认开启。

Discourse AI 提供了一个高效的垃圾邮件检测功能,只需最少的配置即可识别和标记垃圾邮件帖子。虽然它设计得非常简洁,但它补充了更通用的 AI 分类系统,该系统支持更广泛的工作流程和更大的用例。

摘要

在本指南中,您将学习:

  • AI 垃圾邮件检测的工作原理以及扫描哪些内容
  • AI 使用的分类逻辑和上下文
  • 通过 /admin/plugins/discourse-ai/ai-spam 配置垃圾邮件检测的步骤
  • 大型语言模型 (LLM) 选择指南
  • 垃圾邮件检测与 AI 分类之间的主要区别
  • 如何管理已标记和漏掉的帖子

AI 垃圾邮件检测的工作原理

扫描哪些内容?

AI 垃圾邮件检测根据以下标准评估帖子:

  1. 用户信任级别

    • 扫描信任级别为 1 或更低 的用户的帖子。
    • 排除信任级别更高的用户的帖子。
  2. 帖子类型

    • 公开帖子(不包括私人消息)。
    • 根据其他阈值,包括回复帖子和第一个主题帖子。
  3. 帖子编辑

    • 扫描有重大编辑的帖子(例如,更改超过 10 个字符)。
    • 对同一帖子的扫描之间强制执行 10 分钟的延迟
  4. 帖子频率

    • 优先处理新用户在公开主题中总共发布少于 4 篇帖子 的情况。
    • 排除超出此阈值用户的帖子。

分类过程

符合标准的帖子将被发送到 AI 模型 (LLM) 进行分析。模型根据以下内容评估帖子是“SPAM”还是“NOT SPAM”:

  • 上下文:包括帖子内容、主题标题、用户帐户数据(例如,帐户年龄和信任级别)以及站点指南。
  • 自定义指令:管理员定义的规则,用于加强或调整扫描标准。
  • 自动检测
    • 标记不相关或宣传性内容(例如,广告或商业材料)。
    • 识别自动化或机器人行为。
    • 评估内容与讨论的相关性。

默认提示和上下文

AI 使用默认系统提示来指导垃圾邮件检测。此提示概述了垃圾邮件分类规则。例如:

你是一个垃圾邮件检测系统。请分析以下内容和上下文。
注意:
- 回复必须与讨论串保持相关。
- 如果内容不相关、宣传性或自动化,则标记为 SPAM。
- 将带有链接的新用户帖子视为潜在的 SPAM,除非与主题明确相关。
仅回复“SPAM”或“NOT SPAM”。

扫描器还会编译一个上下文包,包括:

  • 主题和类别的元数据。
  • 回复与主题串的相关性。
  • 作者数据(例如,帐户创建日期、帖子总数、信任级别)。
  • 帖子文本截断为 5000 个字符以供处理。

配置 AI 垃圾邮件检测

配置指南

  1. 访问设置
    导航到 /admin/plugins/discourse-ai/ai-spam

  2. 选择 LLM

:information_source: 如果您的站点由 Discourse 托管

您可以从 LLM 列表中选择我们的 CDCK 托管小型 LLM。

  1. 激活垃圾邮件检测
    通过切换功能开启垃圾邮件检测。

:information_source: 注意:连接的 LLM 是强制性的。

  1. 添加自定义指令
    • 定义特定于您论坛的规则(例如,更严格地监控外部链接)。
    • 保存任何更改以应用它们。

与 AI 分类系统的区别

垃圾邮件检测专门用于识别垃圾邮件,而AI 分类系统支持更广泛的帖子管理任务。

功能 AI 垃圾邮件检测 AI 分类系统
复杂性 简化、有针对性的设置 高度可定制和灵活
主要用例 以最小的开销检测垃圾邮件 用于分类、标记、回复、垃圾邮件检测、nsfw 检测的高级工作流程
操作 标记垃圾邮件,静默用户 标记、分类、隐藏帖子、添加回复、标记帖子、静默用户
推荐 易于设置,对大多数情况有效 用于丰富的高度可定制的工作流程

更多详情,请参阅Discourse AI - AI 分类系统


LLM 选择建议

垃圾邮件检测的性能取决于所选的 LLM。

大多数低成本 LLM 都有效,例如:

  • GPT-4o-mini
  • Claude 3.5 Haiku
  • Gemini 2.0 Flash

尝试不同的模型以找到最适合的。通过 /admin/plugins/discourse-ai/ai-llms 配置您的模型。


测试垃圾邮件扫描器行为

您可以直接从配置页面测试垃圾邮件检测规则。

  • 帖子 URL 或 ID 粘贴到测试字段中。
  • 查看分类结果(例如,“SPAM”或“NOT SPAM”)并分析日志以了解原因。
  • 未保存的更改在测试期间应用,从而可以进行实验而无风险。

管理已标记和漏掉的帖子

处理已标记的帖子

已标记的帖子会出现在审核队列中。管理员可以:

  • 批准被错误分类为垃圾邮件的合法帖子。
  • 拒绝垃圾邮件主题以保持系统准确性。

:warning: 重要提示:拒绝被错误分类的帖子的垃圾邮件标记。在解决标记之前,用户将保持静默状态。

处理漏掉的垃圾邮件

漏掉的垃圾邮件是指绕过了检测但被社区标记的帖子。版主可以根据需要进行管理。


最佳实践

  • 定期监控已标记和漏掉的垃圾邮件以优化系统准确性。可点击的指标简化了此过程。
  • 使用测试用例来评估自定义指令在边缘情况下的表现。
  • 在需要时查看和调整 LLM 设置。

附加资源


:mega: 有效配置 AI 垃圾邮件检测可以减少手动审核工作量,确保社区干净无垃圾邮件。

16 个赞
Discourse AI spam detection replaces Akismet plugin
Setting up spam detection in your community
AI powered Spam detection
Tips for Preventing Spam
How to block certain types of user registrations
Experiments with AI based moderation on Discourse Meta
Filtering spam/troll accounts
Anyone else currently undergoing mass spam attack?
Inappropriate posts are spamming the Anthias Discourse forums
Discourse AI spam detection "Scan log" is frequently truncated
Watched words: Does Discourse automatically remove unsupported html tag
Best practices for AI antispam plus AI post triage operating together?
Discourse AI - Large Language Model (LLM) settings page
Human-driven copy-paste spam
Responding to the error "You can’t log in from that IP address”, but IP not blocked"
Unlock All Discourse AI Features with Our Hosted LLM
Account left silenced without review when user deletes spam flagged post
"Needs Approval" review items from “Triage posts using AI” script of “Automation” plugin not visible to moderators
What's the cheapest/best AI to use for AI Spam?
Inappropriate posts are spamming the Anthias Discourse forums
Testing automation rules
Strategies for filtering spam / AI user accounts?
Discourse AI
Posts and account not always restored when flag from Discourse AI spam detection rejected
A few questions related to moderation
Setting up spam detection in your community
Setting up spam detection in your community
How to prevent spam posts?
Discourse AI spam detection replaces Akismet plugin
Failing update
Watched words to block recent spam attack

我们对此进行了大量测试,但结果一直不可靠。作为背景,我们使用的是 gpt-4o 模型。

为了测试其准确性,我给出了以下简单说明:

你是一个垃圾邮件检测系统。分析以下内容和上下文。
请注意以下几点。如果以下任何一项为真,则将其标记为垃圾邮件:
- 用户名是“testjon”,则*始终*是垃圾邮件。
- 只回复“SPAM - It's Jon!”或“NOT SPAM”。

在用户名为 testjon 的帖子上的测试结果是 NOT SPAM。似乎它根本不听从指示。有什么建议吗?

其他人是否在 AI 垃圾邮件检测方面有过好或坏的经历?

我不知道这种情况下的具体情况,但总的来说,引用的陈述很容易出错。它不理解ANY(任何)的含义,只要能找到东西就会继续下去。然后,它最终会找到NOT SPAM(非垃圾邮件)。

1 个赞

所以你是说要移除“ANY”的加粗,还是你指整体的“如果下面有任何项目”这个陈述?

我是在说你必须写得更合乎逻辑、更精确。你不能让人工智能以任何方式进行选择。请记住,它无法计数,而且绝对无法先全部阅读,然后再回来尝试进行逻辑工作。请用你给一个懒惰的、患有多动症的 3 岁孩子讲指示的方式来解释。举例来说,这并没有错,但会增加 token 的使用量。

1 个赞

这是很棒的信息。例如,您可能会如何以不同的方式写出这个确切的场景?

1 个赞

类似这样……

你是一个垃圾邮件检测系统。你的工作是默默地分析内容,以保持论坛的高质量。你必须遵循规则来定义何时帖子是垃圾邮件。当你发现垃圾邮件时,你的回应将在规则中说明。你只能使用指定的回复。

## 垃圾邮件规则

我不会为你做这件事😏 但你需要一些解释和例子。例如,一个快速粗略的例子:
* 如果一个帖子包含指向外部的链接,而这些链接与赌博、性、加密货币等有关(顺便说一句,在这种情况下,“类似”是有风险的),那么该帖子就被归类为垃圾邮件。例如:www.buy-crypto.deal

你需要根据具体情况调整这一点,因为你会得到误报和漏报。

然后你必须为内容提供一些指导方针。但在测试时:

* 如果用户名是“testjon”,则跳过内容分析,直接将其归类为垃圾邮件。你的回应是“SPAM - it’s Jon”。

顺便问一下,它能看到用户吗?

## 其他内容规则

当一个帖子通过垃圾邮件分析,并且你确定它是合法内容时,你唯一的回复是“NOT SPAM”。

类似这样。当然,你必须进行测试。每次得到错误的回应时,都要尝试找出令人困惑的地方。但不要给人工智能选择的机会,因为它会选择最后、最容易或最友好的方向。它需要被编码来回答并感到满意。

我已经启用了这个功能,并期待它的效果!

是否有针对用户信任级别的设置或考虑因素?

例如:我不需要 AI 介入 TL2 及以上级别的用户,他们已经赢得了自己的位置,不应被考虑扫描。如果他们真的行为不端,我们不得不和他们谈谈 :sweat_smile:

有 2 篇帖子被拆分到新主题中: Discourse AI 插件缺失

由于这将取代 Akismet,我想知道如果你不想承担 AI 所带来的大模型成本,过滤/防止垃圾邮件的最佳替代方案是什么?

2 个赞

实际上,Gemini 2.0 Flash 是免费提供的,只要您每天发送的请求不是数百万次。它目前在我的论坛上运行良好,成本,而且它绝对比 Akismet 更精确、更“智能”。

但是,如果 AI 垃圾邮件检测计划失败,我仍然在我的网站上安装了 Akismet 插件,并准备好在需要时再次使用它,而且我认为您仍然可以安装它。(不过,由于它正在被弃用,我不认为它会永远存在)。另外请记住,信任级别是 Discourse 的一个基本核心,可以帮助您管理网站上的垃圾邮件。:+1:

5 个赞

哦,真的很酷,是否可以设置一个令牌的限制,以确保从LLM中获得的限制(零成本)存在?

2 个赞

据我所知,我认为如果你超过了限制,LLM 的 API 将停止响应。我的 Google Cloud Console 账户没有关联账单账户,我仍然可以在免费套餐中免费使用该 API,所以你应该没问题。 :+1:

5 个赞

帖子已拆分为新主题:改进用于编辑和合并的 AI 垃圾邮件检测

我可以在哪里获取“托管模型的服务 API 密钥”?

如果您使用的是我们的托管服务,则可以使用 LLM Small。

如果不是,则需要配置 LLM 并从 OpenAI/Google/Anthropic/X/其他… 获取密钥。

3 个赞

哦,是他们的API密钥,不是Discourse的。

2 个赞

启用 Gemini 2.0 Flash 的 AI 垃圾邮件检测似乎并没有阻止这些垃圾邮件。我以前从未遇到过如此明显的垃圾邮件能够绕过过滤器。也许它是专门为 Discourse 网站设计的?

| QuickBooks Payroll Error After an Update +1-800-223-1608 Step- by- Step Resolution new | Americas - Canada | | 1 | 2 | 1h |
|----|----|----|----|----|----|
| Understanding QuickBooks Payroll Tax Table Update Error +1-800-223-1608 new | Americas - Canada | | 1 | 2 | 1h |
| Understanding QuickBooks Payroll Error PS107 +1-800-223-1608 new | Americas - Canada | | 1 | 2 | 2h |
| Full List Of QuickBooKs CusTomer™ SUPPORT®️ USA Contact™ Numbers : Your Expert Guide new | Americas - Canada | | 1 | 2 | 5h |
| Complete QuickBooks®️ Payroll \u0026 Error Support Numbers™️: 2025 Reference Guide new | Asia | | 1 | 2 | 5h |
| {Expert\~ Guide} QuickBooks® Payroll Support® Contact Info – 2025 USA Guide new | Americas - Canada | | 1 | 4 | 5h |
| {Call@ +1-855-510-6777} How Can I Talk To \~$#Expedia Vacation Package Booking Support? new | Louisiana | | 1 | 6 | 5h |
| Complete List of™️ Caribbean Support™️ – The Detailed Official Guide new | Asia | | 1 | 2 | 6h |
| \[Call^Agent^Direct\] What Number Connects To Expedia Vacation Package Support? {Dial +1-855-510-6777} new | Americas - Canada |

您的 API 密钥无效,因此它没有执行任何测试。

如果您在 https://www.foodtalkcentral.com/admin/plugins/discourse-ai/ai-spam 进行测试并粘贴该 URL,您将收到 500 错误。如果您深入查看 /var/discourse/shared/web-only/log/rails/production.log 中的日志并搜索“ 500 ”,您会看到

Completed 200 OK in 399ms (Views: 123.1ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 22.9ms)
DiscourseAi::Completions::Endpoints::Gemini: status: 400 - body: {
  "error": {
    "code": 400,
    "message": "API key not valid. Please pass a valid API key.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "API_KEY_INVALID",
        "domain": "googleapis.com",
        "metadata": {
          "service": "generativelanguage.googleapis.com"
        }
      },
      {
        "@type": "type.googleapis.com/google.rpc.LocalizedMessage",
        "locale": "en-US",
        "message": "API key not valid. Please pass a valid API key."
      }
    ]
  }
}
1 个赞

哦,谢谢。我不小心选择了 Gemini 2.0 Flash 而不是 Gemini 2.0 Flash Lite。现在测试正常了。

1 个赞