AI出海实战:给自动化管道做内容过滤,别想着把规则调到完美
做了个批量截图的小脚本,给一堆第三方网站自动截首屏,回写到自己的库里。

做了个批量截图的小脚本,给一堆第三方网站自动截首屏,回写到自己的库里。
有一件麻烦事。这些站里混着 AI 女友、换脸、各种擦边内容,截图要是自动上线,等于把这些东西直接挂到自己页面上。
于是加了一道过滤,截完之后读网页文本,命中敏感词就拦下来。听着比较简单,结果来回改了六七轮。
关键词分不清一个站是在提供,还是在禁止
第一版很直接,准备一个词表,nsfw、porn、adult、undress 之类,页面文本里出现就拦。
跑完一看,误杀一片。
一个老实的 AI 写书工具被拦了,因为它页面上写了 young adult,青少年读物的分类。一个干净的视频生成工具也被拦了,翻出来一看,命中的词在它隐私政策里,原文是禁止上传 porn 内容。
同一个词,提供这种内容的站会写,明令禁止这种内容的站照样会写。
想把规则调到完美,是在打地鼠
我的第一反应是接着调词表,把误伤的删掉,把漏掉的补上。
调一轮冒一个新的,再调一轮又冒一个。改到第六轮我停了。
页面文本里的词,天生带不了这个站到底在干嘛的信息。指望一条正则把语义判准,从一开始就不现实。
机器负责召回,人负责定夺
最后定下来的做法很简单。
机器这一层故意往宁可错杀的方向调。漏掉一张擦边图,它就真挂到线上了;错杀一个正经站,不过是少一张截图。两边的代价差得远,那就让机器尽管多拦。
被拦下来的连同命中了哪个词,一起拼成一张审核图。人扫一眼就清楚,写书工具命中的是 young adult,放过;另一个命中的是 ai girlfriend,拦得对。
词也分两种。girlfriend、undress 这类描述功能的词,正经站基本不会写,交给机器直接拦没问题。adult、porn 这类政策里也会出现的词,只适合标出来给人看一眼,别让机器自己拍板。
更正规的做法是判图
识别这种内容更正规的路子,是把截图直接喂给视觉模型或者内容审核 API,让它看图判断,我抠的是页面文字,不是非常严谨。
没上视觉模型是我觉得现在这个量级用不着,关键词初筛加人工扫一眼差不多够了,后期可能考虑加上。
这套东西怎么搭的
AI做的,几个现成轮子拼起来:
- Playwright 无头浏览器截图,上面那张审核图也是用它截的,把缩略图拼成一个本地 HTML 网格再截下来
- sharp 把 PNG 压成 WebP
- @aws-sdk/client-s3 传 Cloudflare R2
- Supabase client 读工具列表、回写截图
- tsx 跑 TypeScript