Discourse AI - 垃圾信息检测

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

: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. 用户信任级别 (User trust level)

    • 扫描信任级别等于或低于所配置的最大信任级别的用户帖子(由 ai_spam_detection_max_trust_level 站点设置控制,默认:信任级别 1)。
    • 排除信任级别更高的用户帖子。
    • 无论信任级别如何,始终排除员工 (staff)机器人 (bot) 用户的帖子。
  2. 帖子类型 (Post type)

    • 公开帖子(不包括私信)。
    • 包括回复帖子和首个主题帖子,具体取决于附加的阈值。
  3. 帖子编辑 (Post edits)

    • 扫描进行重大编辑的帖子(例如,更改超过 10 个字符)。
    • 对同一帖子的扫描之间强制执行 10 分钟延迟
    • 限制每个帖子最多进行 3 次扫描
    • 仅重新扫描过去 24 小时内被编辑的帖子。
  4. 发帖频率 (Post frequency)

    • 扫描在公开主题中发帖数量不超过配置的帖子数阈值的用户帖子(由 ai_spam_detection_max_post_count 站点设置控制,默认:3 篇帖子)。
    • 排除超出此阈值的用户帖子。
  5. 审核队列 (Review queue)

    • 已经从审核队列中批准的帖子不会被扫描。

分类过程

符合标准的帖子会发送给 AI 代理进行分析。代理会根据结构化的 JSON 输出评估帖子是垃圾邮件还是非垃圾邮件,并提供分类理由。评估基于:

  • 上下文 (Context):包括帖子内容、主题标题、分类、用户账户数据(例如,用户名、电子邮件、账户年龄、总帖子数和信任级别)以及基于 IP 的地理位置信息。
  • 图像分析 (Image analysis):帖子附加的最多 3 张图片上传将被纳入分析。
  • 回复上下文 (Reply context):对于回复帖子,包含父帖子的内容(最多 500 个字符)。
  • 站点信息 (Site information):向 AI 提供站点名称、URL、描述和前 10 个分类。
  • 自定义指令 (Custom instructions):管理员定义的用于加强或调整扫描标准的规则。
  • 自动检测 (Automated detection)
    • 标记不相关或带有推广性质的内容(例如广告或商业材料)。
    • 识别自动或机器人式的行为。
    • 评估内容与讨论的相关性。

默认提示和上下文

AI 使用默认的系统提示来指导垃圾邮件检测。内置的垃圾邮件检测代理提示涵盖:

你是一个垃圾邮件检测系统。请分析以下帖子内容和上下文。

请仔细考虑帖子类型:
- 对于回复帖子 (REPLY):检查回复是否与主题相关
- 对于新主题帖子 (NEW TOPIC):检查它是否是合法的讨论主题还是垃圾邮件推广

如果帖子符合以下任一标准,则视为垃圾邮件:
- 包含未经请求的商业内容或推广信息
- 包含可疑或不相关的外部链接
- 显示自动/机器人发帖的模式
- 包含不相关的内容或广告
- 对于回复:与讨论主题完全不相关
- 使用过多的关键词或重复的文本模式
- 显示可疑的格式或字符使用

对以下情况要特别严格:
- 忽略先前对话的回复
- 包含多个不相关外部链接的帖子
- 可以在任何地方发布的通用回复

对以下情况要公平对待:
- 做出合法首次贡献的新用户
- 认真参与的非母语人士
- 在适当情境下提及的相关产品信息

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

  • 帖子类型(NEW TOPIC 或 REPLY)以及分类和主题元数据。
  • 对于回复:父帖子的内容和主题作者。
  • 作者数据(用户名、电子邮件、账户年龄、总帖子数、信任级别和基于 IP 的位置)。
  • 帖子文本截断为 5000 个字符进行处理。
  • 帖子附加的最多 3 张图片上传

配置 AI 垃圾邮件检测

配置指南

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

  2. 选择 LLM

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

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

    • 选择适合您论坛需求的语言模型。有关配置 LLM 的信息,请参阅大型语言模型 (LLM) 设置页面
    • 通过 /admin/plugins/discourse-ai/ai-llms 访问 LLM 配置。
  3. 激活垃圾邮件检测
    通过打开开关来启用垃圾邮件检测功能。

    :information_source: 注意:连接的 LLM 是必需的。

  4. 添加自定义指令

    • 为您的论坛定义特定规则(例如,对外部链接进行更严格的监控)。
    • 保存任何更改以使其生效。
  5. 调整扫描阈值(可选):

    • ai_spam_detection_max_trust_level:设置要扫描的用户最大信任级别(默认:1)。可设置为 0 到 4。
    • ai_spam_detection_max_post_count:设置用户在仍被扫描时拥有的最大帖子数(默认:3)。可设置为 1 到 100。

与 AI 分流的区别

虽然垃圾邮件检测专门用于识别垃圾邮件,但 AI 分流 (AI triage) 支持更广泛的帖子管理任务。

| 功能 | AI 垃圾邮件检测 | AI 分流 |
|—|—|—|
| 复杂性 | 简化的、有倾向性的设置 | 高度可定制和灵活 |
| 主要用例 | 以最少开销检测垃圾邮件 | 用于分类、标记、回复、垃圾邮件检测、不适宜内容检测的先进工作流程 |
| 操作 | 标记垃圾邮件、隐藏帖子、静音用户 | 标记、分类、隐藏帖子、添加回复、标记帖子、静音用户 |
| 推荐 | 设置简单,对大多数情况有效 | 用于丰富且高度可定制的工作流程 |

更多详情,请参阅 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 粘贴到测试字段中。
  • 查看分类结果和 AI 做出决定的推理依据。
  • 在测试过程中会应用未保存的更改,从而可以在没有风险的情况下进行实验。

管理被标记和遗漏的帖子

处理被标记的帖子

当帖子被检测为垃圾邮件时,系统会:

  • 将帖子标记为垃圾邮件并添加到审核队列。
  • 静音发帖用户。
  • 隐藏帖子,使其不对公众可见。
  • 如果垃圾邮件帖子是主题的第一个帖子,则使主题不可见

被标记的帖子会出现在版主队列中。管理员可以:

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

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

处理遗漏的垃圾邮件

遗漏的垃圾邮件指的是绕过检测但被社区标记的帖子。版主可以根据需要处理这些帖子。


最佳实践

  • 定期监控被标记和遗漏的垃圾邮件,以提高系统的准确性。可点击的指标简化了此过程。
  • 使用测试用例来评估自定义指令对边缘情况的处理。
  • 在需要时审查和调整 LLM 设置。
  • 使用 ai_spam_detection_max_trust_levelai_spam_detection_max_post_count 站点设置,根据您社区的需求调整扫描用户范围。

附加资源


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

17 个赞
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
Inappropriate posts are spamming the Anthias Discourse forums
Experiments with AI based moderation on Discourse Meta
Filtering spam/troll accounts
Anyone else currently undergoing mass spam attack?
Discourse AI spam detection replaces Akismet plugin
Failing update
Watched words to block recent spam attack
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
Setting up spam detection in your community
Testing automation rules
Strategies for filtering spam / AI user accounts?
Inappropriate posts are spamming the Anthias Discourse forums
AI integration for moderation
How do I configure AI Spam protection
Documentation around actions available to moderators somewhat lacking
What's the cheapest/best AI to use for AI Spam?
How do I configure AI Spam protection
A few questions related to moderation
Posts and account not always restored when flag from Discourse AI spam detection rejected
Setting up spam detection in your community
Discourse AI
How to prevent spam posts?

我们对此进行了大量测试,但结果一直不可靠。作为背景,我们使用的是 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 个赞