每个 NSFW 检测 API 都能识别明显的色情内容。它们的分歧在于误报,也就是错误地把泳装、艺术作品或医学照片标记为露骨内容,而这才是你应该据此做选择的关键。所以我在相同的边缘图片上,将一个专用检测器与三种 LLM 视觉模型进行了测试:廉价检测器在 26ms 内将一尊大理石雕像标记为裸露,而更强的 LLM 则读取了上下文并通过了它。大多数团队应当采用的方案是:对每次上传先用一个廉价检测器,然后只把有歧义的情况发送给 LLM 进行二次查看,这样既能保持大约每 1,000 次仅 1 美元的经济性,又能减少让真实用户恼火的误报。
NSFW 检测 API 实际返回的内容
在比较工具之前,先了解会返回什么。你发送一张图像(作为 URL 或直接上传),并获得一个从 0.0 到 1.0 的概率分数,以及按类别的标签:通常包括裸露、暗示性内容和暴力;有些服务还会添加 hentai、gore、drugs 或 weapons。你来设定阈值。分数高于阈值的会被拦截,中间区间的会交由人工审核,其余的则通过。
那个 0–1 分数就是整场游戏。阈值设得太低,审核员就会被大量误报淹没;设得太高,不安全内容就会传到用户手中。大多数服务会对静态图片打分;较少有服务能处理视频(通过按你设定的间隔抽帧)或文本。请记住这些术语。下面这些选项之间的区别就在于此。
各个选项及其擅长之处
市场分为四类,它们解决不同的问题。
专用审核 API
来自 Sightengine、Hive Moderation、AWS Rekognition、Google Cloud Vision 和 Azure AI Content Safety 的专用分类器。这些工具速度快(亚秒级到约 1 秒)、按每张图片计费便宜,并在更高层级提供类别粒度以及视频支持。Hive 宣称支持 50 多个类别;Sightengine 标称响应时间低于 100 毫秒。
免费内置选项:OpenAI 审核
OpenAI 的 Moderation 端点(omni-moderation-latest)可免费使用,并接受最大 20 MB 的文本和图像。它返回 13 个类别,包括一个专门的 sexual/minors 标志,每个类别都有一个布尔值和一个 0–1 的置信度分数。由于它是免费的,因此这是首先进行基准测试的最快选项:
curl https://api.openai.com/v1/moderations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"omni-moderation-latest",
"input":[{"type":"image_url","image_url":{"url":"https://example.com/upload.jpg"}}]}'
自托管开源
NudeNet 和 Falconsai/nsfw_image_detection 模型都可在 Python 中本地运行,没有按次调用费用,并且图像数据绝不会离开您的基础设施。NudeNet 只需两行即可尝试:
from nudenet import NudeDetector
NudeDetector().detect("upload.jpg")
# -> [{'class': 'FEMALE_BREAST_EXPOSED', 'score': 0.91, 'box': [...]}, ...]
开源 safe-content-ai 项目将 Falconsai 封装为一个 Docker FastAPI 服务,你只需一条命令即可部署。其代价在于范围(这些模型主要关注裸露或简单的二元分类)以及运维:你需要自行负责正常运行时间、GPU 和更新。
通过中继实现的多模态 LLM 视觉
Vision models (GPT, Claude, GLM, doubao) can classify an image from a plain prompt. 这是最灵活的选项:你通过编辑 prompt 来更改策略,你会为每个判定得到书面理由,并且可以当场发明自定义类别。你按 token 付费,并等待几秒钟。它很少与专用工具进行基准测试对比,所以我把测试重点放在了这里。
定价以及各自最适合的场景
已根据各供应商各自的定价页面于 2026 年 7 月进行核对:
| 提供商 | 价格 | 免费层 | 最适合 |
|---|---|---|---|
| OpenAI Moderation | 免费 | 无按次调用费用 | 零成本基线,或已在使用 OpenAI 的团队 |
| AWS Rekognition | $1 / 1,000 images | 1,000/月(试用) | 大规模下最便宜;AWS 技术栈;图像 + 视频 |
| Google Cloud Vision | $1.50 / 1,000 ($0.60 at volume) | 1,000/月 | GCP 技术栈 |
| Sightengine | $29/月 = 10k ops,之后 $0.002/op | 试用 | 最低延迟;视频和直播流 |
| Hive Moderation | ~$1–5 / 1,000 | — | 最全面的类别集合(50+ 类) |
| Azure AI Content Safety | ~$1.50 / 1,000 | 5,000/月 | 严重程度评分;Azure 技术栈 |
| NudeNet / Falconsai | 免费(自托管) | — | 隐私;零按次调用成本 |
| LLM vision (via relay) | ~$0.0003–0.03 / image | — | 上下文敏感的审查层 |
我测试了误报:专用检测器 vs LLM 视觉
供应商会发布准确率数据。JigsawStack 声称准确率超过 98%,而“95%+”也是常见说法。但原始准确率掩盖了会产生支持工单的失败:对安全内容的误报。所以我构建了一个三张图片的测试集,全部都是适合工作场景的内容,并将相同图片分别输入一个专用开源检测器(NudeNet)和三个多模态视觉模型。一个对照组是办公室照片,一张是穿着得体的一体式泳装的女性,另一张是古典裸体大理石雕像,其中两个“陷阱”正是那种笨拙的裸体检测器会过度标记的图片。
对于 LLM 模型,我使用了一个提示词:*"You are an image content-moderation classifier. Return strict JSON: verdict (safe/flag/block), nsfw_score 0–1, categories {nudity, suggestive, violence}, reason. Use block only for explicit sexual content; flag means needs human review."* NudeNet 会返回每个身体部位的边界框及置信度分数,因此我将最高的暴露部位分数作为其裸露分数。结果如下:
| 模型 | 办公室(对照) | 泳装 | 古典雕像 |
|---|---|---|---|
| NudeNet(专用,自托管) | 安全 · 0.00 · 26ms | 安全 · 0.00 · 18ms | 标记 · 0.70 · 26ms |
| claude-opus-4-6 | 安全 · 0.01 | 安全 · 0.12 | 安全 · 0.08 |
| glm-5 | 无图像访问* | 安全 · 0.15 | 标记 · 0.75 |
| doubao-seed-2.0-pro | 安全 · 0.00 | 安全 · 0.15 | 安全 · 0.10 |
<sub>*在办公照片上,glm-5 返回了“safe”,但它自己的理由却承认无法读取图像,所以我将该单元格算作一次失败调用,而不是有效结果。在生产环境中,这种静默的 fail-open 才是危险的情况。</sub>
分界线并不是“专用模型 vs LLM”。而是对上下文的理解。以下是它们对这座雕像、那张让它们分歧的图片各自给出的结果:
NudeNet: BELLY_EXPOSED 0.70, FEMALE_GENITALIA_COVERED 0.41, ARMPITS_EXPOSED 0.36 -> 标记
glm-5: {"verdict":"flag","nsfw_score":0.75,"categories":{"nudity":1},"reason":"艺术性裸体描绘需要人工审核。"}
claude: {"verdict":"safe","nsfw_score":0.08,"categories":{"nudity":0.3},"reason":"博物馆中的古典维纳斯雕塑。美术作品,不是色情内容。"}
NudeNet 很快(18–26ms)且可免费自托管,但它把这座雕像标记为 0.70,因为它检测的是身体部位,而不是含义;glm-5 也以 0.75 做出了同样的判断。claude-opus-4-6 仍然将 nudity: 0.3 设定了出来——它看到了裸露——但基于上下文推翻了该结论,而这是像素级检测器所不具备的能力。需要警惕的失败模式是 glm-5 的:它在承认自己无法读取图像的同时,却把办公室照片返回为“safe”,这是一种静默的 fail-open,在生产环境中你绝不会察觉。
有三个坦诚的注意事项。LLM 的延迟为每张图像 4–14 秒,而 NudeNet 约为 20 毫秒。每张图像大约消耗 730–1,900 个输入 token,在前沿模型上这相当于 Rekognition 费用约 ~$0.001 的 10–30 倍,所以它不适合放在热路径上。而且 LLM 的输出并不标准化:你需要把散文式结果解析成分数,并且不同模型之间的质量波动很大。这只是对三张图像做的一次小型、非正式测试,不是基准测试。但这已经足以说明真实的权衡:上下文理解 vs 成本、速度和一致性。
专用 API 还是 LLM 视觉能力?一次“自建还是采购”的抉择
专用工具何时更胜一筹
大批量、每张图片预算紧张、亚秒级延迟、视频,或合规认证(SOC 2、已签署的 GDPR DPA)。如果你要审核数百万次上传,那么在 100ms 下每 1,000 次收费 1 美元,在成本和速度上都很难被超越,而 LLM vision 在这方面并不在同一水平线上。
LLM 视觉功能何时物有所值
在误报会造成严重影响的上下文敏感类别中(艺术、教育、医疗、母乳喂养),以及你需要为申诉提供人类可读的理由、需要自定义或新颖类别、或者已经为其他特征运行了 vision model 的情况中。这是智能、昂贵的审核者,而不是批量过滤器。
大多数团队应使用的分层设置
在每次上传时运行一个廉价检测器(或像 NudeNet 这样的自托管模型)。仅作为示例性的起点,在信任它之前先进行校准:高于约 0.85 自动拦截,低于约 0.3 放行,并将中间区间路由到一次 LLM-vision 调用,由其在任何人看到之前先结合上下文进行推理,然后根据你自己流量中的带标签样本来调整这些阈值。并且要把分类失败视为不安全,而不是安全:如果响应没有确认它读取了图像,或者无法解析为有效 JSON,就重试或交给人工审核,而不是让它通过,正如上面的 glm-5 fail-open 一样。这样,你只需为大多数上传支付 dedicated-API 费率,并把 LLM 成本留给那些实际上会引发争议的模糊案例,也就是艺术与裸露的边界情况——比如廉价检测器把博物馆雕像误标为违规。
该 LLM 层需要访问一个或多个视觉模型。像 AIReiter 这样的中继通过一个兼容 OpenAI 的单一端点接入 GPT、Claude 和 GLM 视觉,因此审核层可以在无需单独的 SDK 或账户的情况下切换模型;这就是我上面进行四路测试的方式。
你绝不应该自己构建的一件事:CSAM
有一条硬性底线。以上任何内容都不适用于儿童性虐待材料。不要训练、运行或“测试”你自己的 CSAM 检测器,也不要把疑似 CSAM 像普通成人内容一样通过通用 NSFW 检测 API 进行路由。既定做法是与已知数据库进行哈希匹配(Microsoft 的 PhotoDNA 以及 NCMEC 和 IWF 哈希列表),并向 NCMEC 举报。具体的报告义务因司法管辖区以及你作为服务提供商的角色而异,因此应将其视为具有专门系统的法律和执法事项,而不是一个你可以调优的分类器。
常见问题
是否有免费的 NSFW 检测 API?
是的。OpenAI 的 Moderation 端点(omni-moderation-latest)是免费的,并且支持图像。AWS Rekognition 和 Google Cloud Vision 每月各包含约 1,000 张免费图像。若要无限制免费使用,可以自行托管像 NudeNet 这样的开源模型,在我的测试中,它每张图像的运行时间约为 20ms。
检测图片和视频的最佳 NSFW 检测 API 是什么?
对于视频,Sightengine 和 Hive 都会对帧进行采样,并且就是为此而构建的,AWS Rekognition 也提供视频内容审核。对于预算有限的图片,AWS Rekognition 每 1,000 张 $1 是常见的默认选择。请根据成本、类别深度或误报率来权衡你的选择;没有绝对的赢家。
我可以在不使用付费 API 的情况下在 Python 中运行 NSFW 检测吗?
是的。NudeNet 和 Falconsai/nsfw_image_detection 模型都可在 Python 中本地运行(pip install nudenet),而开源的 safe-content-ai 项目将后者封装为 Docker FastAPI 服务。你用自己托管和维护模型来换取免除按次调用费用。
NSFW 检测 API 的准确性如何?
供应商在其自己的基准测试中声称对显式内容的准确率为 95–98%。真正关键的是对临界安全内容(艺术、泳装、医疗图像)的误报率;正如上面的测试所示,一个快速的专用检测器和一个较弱的模型都将一座博物馆雕像过度标记,而具备上下文感知的 LLM 视觉则通过了它。
我可以使用 GPT-4o 或 Claude vision 进行内容审核吗?
是的,而且对于上下文敏感的情况,它们能更好地避免误报;在我的测试中,Claude vision 将一座裸体雕像判定为美术作品,而像素级检测器却把它标记了出来。代价是速度(按秒计,而不是毫秒)和价格(每张图片大约是专用 API 的 10–30 倍),所以应把它们用作审核层,而不是前线的批量过滤器。
