稍早前用 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 | 标记为等待审核、封禁 |
需要下列插件作为依赖:
对于能够进入审核队列的内容,将会自动进入 “小黑屋”。


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

不支持审核的,将被直接删除或重置。
对于严重违规,可以要求 LLM 进行用户封禁操作。封禁用户在任何审核模块下都可以使用。
在内容违规后,OAICA 会自动向用户发送违规站内信和通知邮件。


在处理帖子回复时,会自动包含主贴内容作为上下文。处理用户个人资料也会提供其它部分上下文,以便 LLM 进行综合推理。
支持 hide 和 suspend。具体行为由 Prompt 提示词和 LLM 自身决定。
使用的 LLM 必须支持多模态和 json_schema 输出能力。建议使用 doubao-seed-1.8 (不建议低于 1.6 )。其它 LLM 未测试,我用的火山引擎平台,每天送的免费 token 额度足够用了。LLM 的智商对审核结果有决定性作用,建议用个稍微好点的。
目前仅支持兼容 OpenAI 接口的平台,Gemini 等暂不支持。
插件支持先审后放模式,可在管理员面板设置。开启此开关后,帖子发布后将直接进入待审核队列,直至被 OAICA 处理后才会批准。
在敏感时期启用此功能可降低因队列处理程序趴窝被爆破的风险。
审核的完整记录内容、上下文、提示词、最终输出响应等会被详细记录在 oaicontaudit_logs 表中。

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

没有发布到 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,这个插件就是为这个社区写的 ;)