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