本指南介绍了如何配置和使用 Discourse AI 的垃圾邮件检测功能,包括设置过程、扫描标准、分类逻辑、自定义设置以及与 AI 分类系统的对比。
所需用户级别:管理员
此功能现在对 Starter 和 Pro 客户以及我们之前的 Basic、Open Source、Creator 和 Business 客户默认开启。
Discourse AI 提供了一个高效的垃圾邮件检测功能,只需最少的配置即可识别和标记垃圾邮件帖子。虽然它设计得非常简洁,但它补充了更通用的 AI 分类系统,该系统支持更广泛的工作流程和更大的用例。
摘要
在本指南中,您将学习:
- AI 垃圾邮件检测的工作原理以及扫描哪些内容
- AI 使用的分类逻辑和上下文
- 通过
/admin/plugins/discourse-ai/ai-spam配置垃圾邮件检测的步骤- 大型语言模型 (LLM) 选择指南
- 垃圾邮件检测与 AI 分类之间的主要区别
- 如何管理已标记和漏掉的帖子
AI 垃圾邮件检测的工作原理
扫描哪些内容?
AI 垃圾邮件检测根据以下标准评估帖子:
用户信任级别:
- 扫描信任级别为 1 或更低 的用户的帖子。
- 排除信任级别更高的用户的帖子。
帖子类型:
- 公开帖子(不包括私人消息)。
- 根据其他阈值,包括回复帖子和第一个主题帖子。
帖子编辑:
- 扫描有重大编辑的帖子(例如,更改超过 10 个字符)。
- 对同一帖子的扫描之间强制执行 10 分钟的延迟。
帖子频率:
- 优先处理新用户在公开主题中总共发布少于 4 篇帖子 的情况。
- 排除超出此阈值用户的帖子。
分类过程
符合标准的帖子将被发送到 AI 模型 (LLM) 进行分析。模型根据以下内容评估帖子是“SPAM”还是“NOT SPAM”:
- 上下文:包括帖子内容、主题标题、用户帐户数据(例如,帐户年龄和信任级别)以及站点指南。
- 自定义指令:管理员定义的规则,用于加强或调整扫描标准。
- 自动检测:
- 标记不相关或宣传性内容(例如,广告或商业材料)。
- 识别自动化或机器人行为。
- 评估内容与讨论的相关性。
默认提示和上下文
AI 使用默认系统提示来指导垃圾邮件检测。此提示概述了垃圾邮件分类规则。例如:
你是一个垃圾邮件检测系统。请分析以下内容和上下文。 注意: - 回复必须与讨论串保持相关。 - 如果内容不相关、宣传性或自动化,则标记为 SPAM。 - 将带有链接的新用户帖子视为潜在的 SPAM,除非与主题明确相关。 仅回复“SPAM”或“NOT SPAM”。扫描器还会编译一个上下文包,包括:
- 主题和类别的元数据。
- 回复与主题串的相关性。
- 作者数据(例如,帐户创建日期、帖子总数、信任级别)。
- 帖子文本截断为 5000 个字符以供处理。
配置 AI 垃圾邮件检测
配置指南
访问设置:
导航到/admin/plugins/discourse-ai/ai-spam。选择 LLM:
如果您的站点由 Discourse 托管
您可以从 LLM 列表中选择我们的 CDCK 托管小型 LLM。
- 选择适合您论坛需求的语言模型。请参阅大型语言模型 (LLM) 设置页面以配置 LLM。
- 访问
/admin/plugins/discourse-ai/ai-llms进行 LLM 配置。
- 激活垃圾邮件检测:
通过切换功能开启垃圾邮件检测。
注意:连接的 LLM 是强制性的。
- 添加自定义指令:
- 定义特定于您论坛的规则(例如,更严格地监控外部链接)。
- 保存任何更改以应用它们。
与 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”)并分析日志以了解原因。
- 未保存的更改在测试期间应用,从而可以进行实验而无风险。
管理已标记和漏掉的帖子
处理已标记的帖子
已标记的帖子会出现在审核队列中。管理员可以:
- 批准被错误分类为垃圾邮件的合法帖子。
- 拒绝垃圾邮件主题以保持系统准确性。
重要提示:拒绝被错误分类的帖子的垃圾邮件标记。在解决标记之前,用户将保持静默状态。
处理漏掉的垃圾邮件
漏掉的垃圾邮件是指绕过了检测但被社区标记的帖子。版主可以根据需要进行管理。
最佳实践
- 定期监控已标记和漏掉的垃圾邮件以优化系统准确性。可点击的指标简化了此过程。
- 使用测试用例来评估自定义指令在边缘情况下的表现。
- 在需要时查看和调整 LLM 设置。
附加资源
有效配置 AI 垃圾邮件检测可以减少手动审核工作量,确保社区干净无垃圾邮件。
我们对此进行了大量测试,但结果一直不可靠。作为背景,我们使用的是 gpt-4o 模型。
为了测试其准确性,我给出了以下简单说明:
你是一个垃圾邮件检测系统。分析以下内容和上下文。
请注意以下几点。如果以下任何一项为真,则将其标记为垃圾邮件:
- 用户名是“testjon”,则*始终*是垃圾邮件。
- 只回复“SPAM - It's Jon!”或“NOT SPAM”。
在用户名为 testjon 的帖子上的测试结果是 NOT SPAM。似乎它根本不听从指示。有什么建议吗?
其他人是否在 AI 垃圾邮件检测方面有过好或坏的经历?
我不知道这种情况下的具体情况,但总的来说,引用的陈述很容易出错。它不理解ANY(任何)的含义,只要能找到东西就会继续下去。然后,它最终会找到NOT SPAM(非垃圾邮件)。
所以你是说要移除“ANY”的加粗,还是你指整体的“如果下面有任何项目”这个陈述?
我是在说你必须写得更合乎逻辑、更精确。你不能让人工智能以任何方式进行选择。请记住,它无法计数,而且绝对无法先全部阅读,然后再回来尝试进行逻辑工作。请用你给一个懒惰的、患有多动症的 3 岁孩子讲指示的方式来解释。举例来说,这并没有错,但会增加 token 的使用量。
这是很棒的信息。例如,您可能会如何以不同的方式写出这个确切的场景?
类似这样……
你是一个垃圾邮件检测系统。你的工作是默默地分析内容,以保持论坛的高质量。你必须遵循规则来定义何时帖子是垃圾邮件。当你发现垃圾邮件时,你的回应将在规则中说明。你只能使用指定的回复。
## 垃圾邮件规则
我不会为你做这件事😏 但你需要一些解释和例子。例如,一个快速粗略的例子:
* 如果一个帖子包含指向外部的链接,而这些链接与赌博、性、加密货币等有关(顺便说一句,在这种情况下,“类似”是有风险的),那么该帖子就被归类为垃圾邮件。例如:www.buy-crypto.deal
你需要根据具体情况调整这一点,因为你会得到误报和漏报。
然后你必须为内容提供一些指导方针。但在测试时:
* 如果用户名是“testjon”,则跳过内容分析,直接将其归类为垃圾邮件。你的回应是“SPAM - it’s Jon”。
顺便问一下,它能看到用户吗?
## 其他内容规则
当一个帖子通过垃圾邮件分析,并且你确定它是合法内容时,你唯一的回复是“NOT SPAM”。
类似这样。当然,你必须进行测试。每次得到错误的回应时,都要尝试找出令人困惑的地方。但不要给人工智能选择的机会,因为它会选择最后、最容易或最友好的方向。它需要被编码来回答并感到满意。
我已经启用了这个功能,并期待它的效果!
是否有针对用户信任级别的设置或考虑因素?
例如:我不需要 AI 介入 TL2 及以上级别的用户,他们已经赢得了自己的位置,不应被考虑扫描。如果他们真的行为不端,我们不得不和他们谈谈 ![]()
有 2 篇帖子被拆分到新主题中: Discourse AI 插件缺失
由于这将取代 Akismet,我想知道如果你不想承担 AI 所带来的大模型成本,过滤/防止垃圾邮件的最佳替代方案是什么?
实际上,Gemini 2.0 Flash 是免费提供的,只要您每天发送的请求不是数百万次。它目前在我的论坛上运行良好,零成本,而且它绝对比 Akismet 更精确、更“智能”。
但是,如果 AI 垃圾邮件检测计划失败,我仍然在我的网站上安装了 Akismet 插件,并准备好在需要时再次使用它,而且我认为您仍然可以安装它。(不过,由于它正在被弃用,我不认为它会永远存在)。另外请记住,信任级别是 Discourse 的一个基本核心,可以帮助您管理网站上的垃圾邮件。![]()
哦,真的很酷,是否可以设置一个令牌的限制,以确保从LLM中获得的限制(零成本)存在?
据我所知,我认为如果你超过了限制,LLM 的 API 将停止响应。我的 Google Cloud Console 账户没有关联账单账户,我仍然可以在免费套餐中免费使用该 API,所以你应该没问题。 ![]()
帖子已拆分为新主题:改进用于编辑和合并的 AI 垃圾邮件检测
我可以在哪里获取“托管模型的服务 API 密钥”?
如果您使用的是我们的托管服务,则可以使用 LLM Small。
如果不是,则需要配置 LLM 并从 OpenAI/Google/Anthropic/X/其他… 获取密钥。
哦,是他们的API密钥,不是Discourse的。
启用 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."
}
]
}
}
哦,谢谢。我不小心选择了 Gemini 2.0 Flash 而不是 Gemini 2.0 Flash Lite。现在测试正常了。

