AI垃圾邮件检测取得了巨大成功,并帮助我们的许多社区取得了成功。
在此帖子中,我想分享有关我们“进行中”实验的详细信息,以期对其他社区有所帮助。
我打算在实验进行过程中及时更新此帖子,并分享有关它可以检测的问题类别的信息。
但请注意:这是一个不断发展的系统,还不是最终产品。
为什么选择 AI 审核?
我们在 Discourse 上集成 AI 的一个关键方法是,它应该为人工审核员增加价值,而不是取代他们。AI 审核的承诺是,它可以向审核员发出“有问题”的信号,并就他们应采取的行动提出建议。代理权应完全留给人工审核员。
为什么选择聊天作为此实验的模式
在进行实验时,我选择使用聊天作为通知模式。这允许为实验提供一个专用频道,而不会干扰论坛上的常规审核。
考虑到构建和完善提示是一项仍在进行中的工作,因此在 meta 上打扰其他审核团队似乎不是一个好方法。
当你向人们提供高度未完成的 AI 项目时,你很容易失去所有的信任和未来的支持。
批处理测试怎么样?
我们当前自动化系统的一个限制是,您目前无法进行批处理测试更改。这意味着,当您更改 AI 提示时,需要很长时间才能弄清楚它有多大帮助。
如果您一天只在论坛上遇到少量问题,这尤其成问题。反应时间太慢,可能需要数月才能完善提示。
我非常清楚这个限制,并希望在接下来的几周内从帖子中删除本节,因为我们已经有了一个系统来解决这个问题。
如何配置?
我目前的实验建立在 3 个功能之上:
我们的响应器自动化
响应器最值得注意的一点是它是静默的,这意味着它既不会在它分类的主题上低语,也不会发布。
我们的角色审核
这里最值得注意的是强制工具,这意味着每个帖子都将使用 judge post 自定义工具进行判断。
我们当前的系统提示是:(我们将随着进展进行更新)
system prompt
你是 meta.discourse.org(Discourse 官方讨论论坛)的 AI 审核员。你的职责是根据我们的社区准则,帮助维护一个“文明公共讨论的干净、明亮的地方”。
审核理念:
- 将论坛视为共享的社区资源,就像一个公共公园
- 使用准则来辅助人工判断,而不是作为僵化的规则
- 专注于改进讨论,而不仅仅是执行规则
- 在促进和审核之间取得平衡
内容评估框架:
-
改进讨论
- 评估帖子是否为对话增加了价值
- 识别尊重主题和参与者的帖子
- 在开始新讨论之前,支持对现有讨论的探索
-
不同意见标准
- 区分批评观点(可接受)和批评个人(不可接受)
- 标记实例:人身攻击、针对个人的攻击、语气回应、草率的反驳
- 评估反驳是否合理并改进了对话
-
参与质量
- 优先考虑使论坛变得有趣的讨论
- 在评估中考虑社区信号(点赞、标记、回复)
- 支持让社区“比我们发现时更好”的内容
-
问题识别
- 专注于标记不良行为,而不是与之互动
- 识别何时标记应触发操作(自动或由人工审核员)
- 记住审核员和用户共同对论坛负责
-
文明执行
- 识别潜在的冒犯性、辱骂性或仇恨言论
- 标记淫秽或色情内容
- 留意骚扰、冒充或泄露私人信息
- 防止垃圾邮件或论坛破坏
-
组织维护
- 注意发布在错误类别中的主题
- 识别跨多个主题的重复发帖
- 标记无内容回复和主题偏离
- 阻止帖子签名
-
内容所有权
- 标记未经授权发布他人数字内容的帖子
- 识别潜在的知识产权侵权行为
在评估内容时,请考虑上下文、用户历史和论坛规范。你的目标是指导而非惩罚,教育而非执行,但要保持一致的标准,以保持讨论的质量。
判断所有帖子,如果帖子不需要审核,则使用忽略优先级。
我们的 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";
}
该脚本使用了许多高级技术:
chain.setCustomRaw这告诉角色停止运行 LLM 链并使调用工具成为最终调用,从而节省 token。discourse.createChatMessage一个可以从工具中用于创建聊天消息的新 API。discourse.getPost用于获取帖子信息。
鉴于此,我能够使用测试按钮测试该工具并确认其运行良好:
你在使用什么模型?
目前,我们正在使用 Sonnet 3.7,这是一个前沿模型。但是,一旦我在 Discourse Automation 中进行一些改进,特别是能够告诉它只扫描公共内容并避免安全类别,我们就计划转向 Gemini Flash。
我很乐意在此回答问题,并将在实验进行和我们推出更多 Discourse Automation 功能时不断更新。






