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 个赞

我们对此进行了大量测试,但结果一直不可靠。作为背景,我们使用的是 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/其他… 获取密钥。

2 个赞

哦,是他们的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 个赞