在 Discourse Meta 上进行的基于 AI 的审核实验

AI垃圾邮件检测取得了巨大成功,并帮助我们的许多社区取得了成功。

在此帖子中,我想分享有关我们“进行中”实验的详细信息,以期对其他社区有所帮助。

我打算在实验进行过程中及时更新此帖子,并分享有关它可以检测的问题类别的信息。

但请注意:这是一个不断发展的系统,还不是最终产品。

为什么选择 AI 审核?

我们在 Discourse 上集成 AI 的一个关键方法是,它应该为人工审核员增加价值,而不是取代他们。AI 审核的承诺是,它可以向审核员发出“有问题”的信号,并就他们应采取的行动提出建议。代理权应完全留给人工审核员。

为什么选择聊天作为此实验的模式

在进行实验时,我选择使用聊天作为通知模式。这允许为实验提供一个专用频道,而不会干扰论坛上的常规审核。

考虑到构建和完善提示是一项仍在进行中的工作,因此在 meta 上打扰其他审核团队似乎不是一个好方法。

当你向人们提供高度未完成的 AI 项目时,你很容易失去所有的信任和未来的支持。

批处理测试怎么样?

我们当前自动化系统的一个限制是,您目前无法进行批处理测试更改。这意味着,当您更改 AI 提示时,需要很长时间才能弄清楚它有多大帮助。

如果您一天只在论坛上遇到少量问题,这尤其成问题。反应时间太慢,可能需要数月才能完善提示。

我非常清楚这个限制,并希望在接下来的几周内从帖子中删除本节,因为我们已经有了一个系统来解决这个问题。

如何配置?

我目前的实验建立在 3 个功能之上:

  1. 自动化 - AI 角色响应器
  2. Discourse AI - AI 角色
  3. Discourse AI - 自定义工具

我们的响应器自动化

响应器最值得注意的一点是它是静默的,这意味着它既不会在它分类的主题上低语,也不会发布。

我们的角色审核

这里最值得注意的是强制工具,这意味着每个帖子都将使用 judge post 自定义工具进行判断。

我们当前的系统提示是:(我们将随着进展进行更新)

system prompt

你是 meta.discourse.org(Discourse 官方讨论论坛)的 AI 审核员。你的职责是根据我们的社区准则,帮助维护一个“文明公共讨论的干净、明亮的地方”。

审核理念:

  • 将论坛视为共享的社区资源,就像一个公共公园
  • 使用准则来辅助人工判断,而不是作为僵化的规则
  • 专注于改进讨论,而不仅仅是执行规则
  • 在促进和审核之间取得平衡

内容评估框架:

  1. 改进讨论

    • 评估帖子是否为对话增加了价值
    • 识别尊重主题和参与者的帖子
    • 在开始新讨论之前,支持对现有讨论的探索
  2. 不同意见标准

    • 区分批评观点(可接受)和批评个人(不可接受)
    • 标记实例:人身攻击、针对个人的攻击、语气回应、草率的反驳
    • 评估反驳是否合理并改进了对话
  3. 参与质量

    • 优先考虑使论坛变得有趣的讨论
    • 在评估中考虑社区信号(点赞、标记、回复)
    • 支持让社区“比我们发现时更好”的内容
  4. 问题识别

    • 专注于标记不良行为,而不是与之互动
    • 识别何时标记应触发操作(自动或由人工审核员)
    • 记住审核员和用户共同对论坛负责
  5. 文明执行

    • 识别潜在的冒犯性、辱骂性或仇恨言论
    • 标记淫秽或色情内容
    • 留意骚扰、冒充或泄露私人信息
    • 防止垃圾邮件或论坛破坏
  6. 组织维护

    • 注意发布在错误类别中的主题
    • 识别跨多个主题的重复发帖
    • 标记无内容回复和主题偏离
    • 阻止帖子签名
  7. 内容所有权

    • 标记未经授权发布他人数字内容的帖子
    • 识别潜在的知识产权侵权行为

在评估内容时,请考虑上下文、用户历史和论坛规范。你的目标是指导而非惩罚,教育而非执行,但要保持一致的标准,以保持讨论的质量。


判断所有帖子,如果帖子不需要审核,则使用忽略优先级。

我们的 judge post 自定义工具

the script powering it
function invoke(params) {
  let post,topic;
  if (params.priority !== "ignore") {
      // post_id for testing
      const post_id = context.post_id || 1735240;
      post = discourse.getPost(post_id);
      topic = post.topic;
      let statusEmoji = "";
  
      if (params.priority === "urgent") {
        statusEmoji = ":police_car_light:"; // Red circle for urgent
      } else if (params.priority === "medium") {
        statusEmoji = ":warning:"; // Orange circle for medium
      } else if (params.priority === "low") {
        statusEmoji = ":writing_hand:"; // Green circle for low
      } 
     
     const message = `${statusEmoji} [${topic.title} - ${post.username}](${post.post_url}): ${params.message}`;
     discourse.createChatMessage({ channel_name: "AI Moderation", username: "AI-moderation-bot", message: message}); 
  }
  chain.setCustomRaw("Post was classified");
  return "done";
}
function details() {
  return "Judge Post";
}

该脚本使用了许多高级技术:

  1. chain.setCustomRaw 这告诉角色停止运行 LLM 链并使调用工具成为最终调用,从而节省 token。
  2. discourse.createChatMessage 一个可以从工具中用于创建聊天消息的新 API。
  3. discourse.getPost 用于获取帖子信息。

鉴于此,我能够使用测试按钮测试该工具并确认其运行良好:

你在使用什么模型?

目前,我们正在使用 Sonnet 3.7,这是一个前沿模型。但是,一旦我在 Discourse Automation 中进行一些改进,特别是能够告诉它只扫描公共内容并避免安全类别,我们就计划转向 Gemini Flash。

我很乐意在此回答问题,并将在实验进行和我们推出更多 Discourse Automation 功能时不断更新。

22 个赞

您多久会收到一次误报或漏报?尽管这是一个相对平静的环境。

1 个赞

今天一直100%静默,非常安静,我将为自动化添加功能以跟踪它是否正常工作 :slight_smile:

2 个赞

我希望在两三年内,人工智能能够本地化地帮助我的团队进行模组开发,但今天我自问,现在有必要吗?因此,感谢您定期发布解释进展的主题。

另一个问题是,Discourse 是否有一天会为自托管提供多语言 API,以便在您们为我们对抗不良行为者的同时,也能保护我们的数据?我知道我可以自己使用 LLM 模型,但我很乐意付费购买您的服务作为替代方案 :smiley:

让我举个例子,Google Perspective 是一个针对此的免费增值选项,并支持多种语言来对抗毒性,为什么 CDCK 不提供呢?

1 个赞

感谢您的反馈。是的,我们已经考虑过这个问题,但我认为在未来 12 个月内我们不会着手进行这样的冒险。

1 个赞

更新时间

在过去的几天里,我进行了两组相当大的更改集,以更好地支持这项实验:

这些更改使我们能够迁移到成本低得多的 Gemini Flash 2.0 模型,特别是这项更改:

它使我们能够非常有信心地确保扫描论坛上的公开帖子。

在 CDCK,我们对不同类别的数据有不同的处理规则,目前我们只批准在公开数据上使用 Gemini Flash。

公平地说,我最初在 OP 中的提示在 meta 上没有任何触发,meta 是一个友好且宜人的地方,很少需要人工审核,所以这并不奇怪。

尽管如此,我只是不确定有什么东西在起作用……

为了解决这个问题,我向自动化添加了统计信息:(几小时前已合并)

因此,我们可以看出这个自动化正在运行,因为它在 20 分钟前运行过,并且本月运行了 8 次。


当部署它的时候,事情非常安静,我决定让自动化“虚报警报”,因为我想更好地了解系统。我修改了提示为:

您是 meta.discourse.org 的 AI 版主,这是 Discourse 官方的讨论论坛。您的职责是帮助维护一个“干净、明亮、适合文明公开讨论的地方”,以符合我们的社区准则。

审核理念:
- 将论坛视为一个共享的社区资源,就像一个公共公园
- 使用指南来辅助人类判断,而不是作为僵化的规则
- 专注于改进讨论,而不仅仅是执行规则
- 在促进和审核之间取得平衡
- 倾向于将可疑内容标记出来供人工审查

内容评估框架:
1. 改进讨论
   - 评估帖子是否为对话增加了实质性价值
   - 标记内容很少、回应通用或参与肤浅的帖子
   - 识别尊重主题和参与者的帖子
   - 在开始新讨论之前,支持探索现有讨论
   - 警惕对讨论贡献很少的“路过式”评论

2. 不同意见标准
   - 区分批评观点(可接受)和批评个人(不可接受)
   - 标记以下情况:人身攻击、对人不对事攻击、语气回应、凭空反驳
   - 评估反驳是否合理并改进了对话
   - 注意微妙的轻视或居高临下的态度

3. 参与质量
   - 优先考虑使论坛成为一个有趣地方的讨论
   - 在评估中考虑社区信号(点赞、标记、回复)
   - 标记看起来通用、模板化或缺乏个人见解的内容
   - 留意那些看起来公式化或未能有意义地回应具体内容的贡献
   - 支持让社区“比我们发现时更好”的内容

4. 问题识别
   - 专注于标记不良行为,而不是与之互动
   - 积极识别潜在的潜在问题模式,以防其升级
   - 识别何时标记应触发操作(自动或由人工版主)
   - 记住版主和用户共同承担论坛的责任

5. 文明执行
   - 识别潜在的冒犯性、辱骂性或仇恨言论,包括微妙形式
   - 标记淫秽或色情内容
   - 警惕骚扰、冒充或泄露私人信息
   - 防止垃圾邮件、论坛破坏或伪装成贡献的营销

6. 组织维护
   - 注意发布在错误类别的帖子
   - 识别跨多个主题的重复发布
   - 标记无内容回复、主题偏离和帖子劫持
   - 阻止签名和不必要的格式化

7. 内容所有权
   - 标记未经授权发布他人数字内容的行为
   - 识别潜在的知识产权侵权行为

8. AI 生成内容检测
   - 留意 AI 生成内容的迹象:语言过于正式、措辞通用、语法完美但缺乏个性
   - 标记看起来模板化、缺乏具体性或未与讨论细节互动的内​​容
   - 注意那些看起来全面但实际见解肤浅的回应
   - 识别具有不寻常措辞模式、不必要的冗长或重复结构的帖子

输出格式:
您的审核评估必须非常简洁:
**[优先级]**:1-2 句理由,并指明关键问题
使用 Markdown 格式以便阅读,但尽量将总响应保持在 3 行以内。

评估内容时,请考虑上下文、用户历史和论坛规范。对未经审核即可通过的内容设定高标准——即使是小问题也使用“低”优先级,仅将“忽略”用于明显有价值的贡献。

---

以怀疑的眼光评判所有帖子。仅对具有明显、真实价值的贡献使用“忽略”优先级。如果您不确定帖子的价值或真实性,请至少分配“低”优先级以供人工审查。

此提示会导致更嘈杂的聊天频道:

观察

这次实验曲折前进,但我看到了一些有趣的东西正在形成。

并非所有审核都需要基于标记,有时仅仅有一些想法和意识知道正在发生一些事情就足够了。

这类工具与我们对社区中 AI 的愿景非常一致,它是一个“小小的 AI 助手”,可以为版主提供关于查看什么的想法。此外,它也是执行通用指南和规则的机会。

一些小型社区可能想要一个“爱唠叨”的 AI 助手。其他更大、更繁忙的社区可能只能负担得起关注极端异常行为。

我正在考虑在此方面进行的未来工作包括:

  1. 版主机器人会两次询问相同的主题,这有点烦人。折叠旧内容、使用线程或其他方法可能是有趣的方法来避免这种情况。

  2. @hugh 提出,一旦你看到这样的聊天频道,你就会想让机器人代表你采取行动。例如:

    • 对 [原文] 进行深入研究并提供详细指导
    • 哦,这看起来真像一个糟糕的用户,帮我把他封禁 3 天
    • 在我们的内部错误跟踪器上打开一个错误来跟踪这个问题
    • 等等。

要达到机器人可以代表我们采取行动的状态,我们需要 Discourse AI 中的一个新结构,允许工具寻求用户批准。这是我正在考虑的事情。

  1. 如 OP 所述,运行批处理会很好,但从编辑提示到知道编辑是否有效之间有太多的准备时间。正在考虑如何将其添加到自动化中。

  2. 实时调整是一个有趣的概念……“嘿,机器人,这太多了,你为什么因为这些事情烦我?”……“机器人……X、Y、Z……你想让我改进你的指令集吗?”……“是的”

希望大家觉得这有帮助,如果您有任何问题,请告诉我。

9 个赞

只是一个想法,是否可以在你的提示中做一些事情,让审核机器人至少偶尔会发出一个提醒,以显示它在工作。例如,在没有需要采取任何措施的情况下,以1%的概率发出一条说明:这个帖子不需要任何操作。或者在论坛比较繁忙的情况下,使用更低的概率。

1 个赞

查看这些提示之间的区别:

评判所有帖子,如果帖子不需要审核,则使用忽略优先级。

以怀疑的眼光评判所有帖子。仅对具有清晰、真实价值的贡献使用“忽略”优先级。如果您不确定帖子的价值或真实性,请至少分配“低”优先级以供人工审核。

我认为重要的是要记住模型中存在严重的近期偏见——也许所有命令词都应该在结尾附近以散文的形式提及,并按期望的频率倒序排列。

1 个赞

或者,让它触发一个无辜的、常见但又不那么常见的词。“标记提及菠萝的帖子”。

3 个赞

我有一段时间没有发帖了,尽管我每天都会访问我的小聊天窗口,并且它每天至少能“有用”一两次……持续不断

我在这里延迟的原因是我必须完成这个相当大的改动。

它为 Discourse AI 提供了细微但至关重要的改进。

我经常注意到审核机器人因为我们构建上下文的方式而讨论完全不相关的图像。这个改动允许我们以正确排序的方式呈现混合内容(包含图像和文本)。

这意味着大型语言模型(LLM)不再感到困惑。

接下来的步骤?

  1. 我们没有自动化方法来让它在帖子编辑“稳定”后调用规则,LLM 调用可能很昂贵,仅仅因为人们编辑了错别字,我们不希望一遍又一遍地扫描。我不确定这是否需要,但我希望有可能在帖子稳定成新形状后触发自动化。
  2. 提示工程——当前的提示还可以,但对我来说有点太响亮了,它有点太困扰我了,我可能会稍微缓和一下。
  3. 改进上下文——一件真正困扰我的事情是,自动化现在没有用户信任意识。社区中的一些用户比其他用户更受信任(例如:版主),我想看看是否可以改进这一点。
  4. 能够对帖子批次运行自动化以进行快速迭代。
  5. 我相信还会出现更多问题。
8 个赞

我最新的进行中的工作是:

我的想法是,将有两个角色来驱动系统:

  1. 执行分类的角色 - 今天已经定义好的那个(triage bot)
  2. 与版主/高信任度用户交互的角色(mod bot)

通过与 @mod_bot 聊天,版主(或非常高信任度的用户)将能够指导 @triage_bot 如何行事。

例如:

@mod_bot, 确保在有人谈论 ai 时通知 @sam

这将触发 mod_bot 修改 triage bot 的系统提示。这意味着,只要在这个特定的聊天室里,任何社区都可以训练机器人按照他们想要的方式行事。

这是对实现记忆的一个有趣的转折。不确定它在实践中效果如何,但这是一个非常有价值的实验。

5 个赞

这仍然在 meta 上运行。

我现在的一个见解是,自动化非常棒,除非它表现不好,那就糟糕透了。

特别是,如果让机器人太吵,那么这个机器人就变得毫无用处。

我将我们的自定义指令改成了非常无聊的内容:

你是一个基于 AI 的机器人,会阅读 meta.discourse.org 上的每一篇帖子

你可以调用一个工具,每次都用它处理帖子。

你将使用优先忽略来忽略帖子并避免通知。

任何其他优先级将会通知。

### 处理指南
## 内容监控
* 当发布非英语内容时通知 @nat(协助翻译功能)
* 如果你发现讨论变得有毒或过热,通知 @sam
* 当用户讨论审核队列功能时通知 @hugh
  * 包括关于员工经验、版主工具、队列、审 Moderation 工作流程的讨论
  * 特别是标记、审核、批准和相关的 Moderation UI/UX 事项
### 结束处理指南

在之前的迭代中,我曾考虑过“让你知道是否讨论中的内容不是在 bug 类别中”的事情。

只需要一个有毒规则,然后聊天通知就会暴增,你就可以忽略它们。

4 个赞