V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
AkaGhost
V2EX  ›  分享创造

Flarum 扩展插件,用 LLM 来做内容审核 - flarum-openai-content-audit

  •  
  •   AkaGhost ·
    Ghost-chu · 16 小时 43 分钟前 · 275 次点击

    稍早前用 Flarum 搭了个 BitTorrent 主题的论坛,那么作为 UGC 内容社区,内容审核无疑是第一位的。俗话说的好,UGC 有多自由,牢底就能坐穿多久……

    不过,Flarum 上面也没什么好用的审核插件,fof/filter 只能做到基本的关键字匹配,Flarum 中文社区倒是有一个阿里云的内容审核插件,但是也仅限于基本的帖子内容审核。

    要是用户在帖子里插了个逆天图片,或者换了个逆天头像和用户名,这茶还是喝定了。

    所以花了半周,Vibe Coding 了个内容审核的扩展插件,又打磨了半周,似乎工作的还可以。尽管代码质量看起来有待提高,但至少测试都跑过了。

    由于目前还没决定好正式发布,也不是专业 PHP 开发者,所以就先没有上传 packagist 。
    支持 Flarum v1.8.x ( v2.x 暂时还不支持……),通过 OpenAI 兼容 API ,使用 LLM 进行内容审核。有些权限设置还没来得及改,但现在已经完全可用了,所以出来发一发。

    审核支持范围

    类型 插件 支持的违规处理动作
    用户用户名(包括创建新用户、编辑) core 重命名为 user_<uid>_随机数、封禁
    用户头像 core 删除、封禁
    用户昵称(包括创建新用户、编辑) flarum/nicknames 删除、封禁
    用户签名档 fof/user-bio 更改为特定字符串、封禁
    用户头图 sycho/profile-cover 删除、封禁
    主题标题(包括创建和编辑) core 标记为等待审核、封禁
    主题、回复的内容(包括创建和编辑) core 标记为等待审核、封禁
    主题、回复的内容图片(包括创建和编辑)( URL 外部直链) core 标记为等待审核、封禁
    主题、回复的上传图片与小文本附件内容(包括创建和编辑) fof/upload 标记为等待审核、封禁

    需要下列插件作为依赖:

    • Approval (flarum/approval)
    • Suspend (flarum/suspend)

    审核、处理违规内容

    对于能够进入审核队列的内容,将会自动进入 “小黑屋”。

    小黑屋
    违规跳转 1

    站点管理员可以跳转到审核内容处决定最后处理:

    违规跳转 2

    不支持审核的,将被直接删除或重置。

    对于严重违规,可以要求 LLM 进行用户封禁操作。封禁用户在任何审核模块下都可以使用。

    违规通知

    在内容违规后,OAICA 会自动向用户发送违规站内信和通知邮件。

    站内信提醒

    通知邮件

    上下文支持

    在处理帖子回复时,会自动包含主贴内容作为上下文。处理用户个人资料也会提供其它部分上下文,以便 LLM 进行综合推理。

    违规处理动作

    支持 hidesuspend。具体行为由 Prompt 提示词和 LLM 自身决定。
    使用的 LLM 必须支持多模态和 json_schema 输出能力。建议使用 doubao-seed-1.8 (不建议低于 1.6 )。其它 LLM 未测试,我用的火山引擎平台,每天送的免费 token 额度足够用了。LLM 的智商对审核结果有决定性作用,建议用个稍微好点的。

    目前仅支持兼容 OpenAI 接口的平台,Gemini 等暂不支持。

    先审后放模式

    插件支持先审后放模式,可在管理员面板设置。开启此开关后,帖子发布后将直接进入待审核队列,直至被 OAICA 处理后才会批准。
    在敏感时期启用此功能可降低因队列处理程序趴窝被爆破的风险。

    审核记录

    审核的完整记录内容、上下文、提示词、最终输出响应等会被详细记录在 oaicontaudit_logs 表中。

    审核记录表

    截图

    (里面的 token 我已经换掉了;) )

    Menu1 Menu2 Menu3

    安装

    没有发布到 packagist ,目前只能通过手动安装:

    cd /path/to/flarum mkdir packages && cd packages git clone https://github.com/PBH-BTN/flarum-openai-content-audit

    在 composer.json 里添加本地仓库:

    ...
    "repositories": [
            {
                "type": "path",
                "url": "packages/flarum-openai-content-audit",
                "options": {
                    "symlink": true
                }
            }
        ]
    

    然后:

    composer require ghostchu/openai-content-audit:"@dev"
    

    更新

    cd packages/flarum-openai-content-audit
    git pull
    cd ..
    php flarum migrate
    php flarum cache:clear
    

    尾言

    源代码放在了这里: https://github.com/PBH-BTN/flarum-openai-content-audit
    不是很会写 PHP 代码,大部分代码都是由 Claude Code 代劳了。下载外链图片可能有一个 SSRF 的问题暂时还没修(对我个人来说影响不是很大),此外下载等行为可能暴露源站 IP 地址,非高防鸡可能要想个办法处理一下。

    前几天在 Flarum 中文社区也发了个贴,不过太冷清了,没什么人看,就来 V2 也再发一份。

    此外这里还有一个 Prompt 可以用作参考: https://gist.github.com/Ghost-chu/424f2ec618f5d52be20a75c70d661712 如果不知道 Prompt 怎么写,可以从这个样本开始改。

    最后也欢迎来看看我的 PBH-BTN BBS,这个插件就是为这个社区写的 ;)

    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   4252 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 05:20 · PVG 13:20 · LAX 21:20 · JFK 00:20
    ♥ Do have faith in what you're doing.