内容审核
自动检查用户上传的文字和图片是否违规
这是什么
内容审核就是自动检查用户上传的文字、图片是否包含违规信息(色情、暴力、政治敏感等)。
中国法律规定平台必须对用户生成内容(UGC = User Generated Content)做审核。
- 例如微信小程序在审核的时候,它会测试上传敏感文字图片,如果你的小程序没有拒绝则审核不通过。
实际上在很多支持用户评论、图片、自定义文字的场景下,都需要做内容审核。这也是避免你的网站免受攻击的一种手段。
这里我们默认使用腾讯云的安全检测 API。
两个包的关系
@repo/content-moderation— 抽象接口层,定义了统一的调用方式。不管底层用哪家云,代码写法不变@repo/tencent-cloud— 腾讯云的具体实现。实际审核由腾讯云 API 完成
打个比方:content-moderation 像万能遥控器,tencent-cloud 像具体电视品牌。你按遥控器,不管后面接什么电视,行为一致。
腾讯云的 API 密钥是敏感信息,必须放在 products/01mvp/packages/config/.env 或部署平台 Secrets 中。审核 API 按调用次数计费。
怎么接入
- 配环境变量:在
products/01mvp/packages/config/.env加云服务商的密钥 - 选审核类型:文字审核还是图片审核
- 调审核接口:把用户内容传给审核函数
- 处理结果:通过(放行)/ 拒绝(删除)/ 人工复核(标记)
环境变量配置
# 腾讯云 API 密钥(在腾讯云控制台获取)
TENCENT_CLOUD_SECRET_ID=your-secret-id
TENCENT_CLOUD_SECRET_KEY=your-secret-key
TENCENT_CLOUD_REGION=ap-shanghai文本审核
import { createTencentTextModerationClientFromEnv } from "@repo/tencent-cloud";
const client = createTencentTextModerationClientFromEnv();
const result = await client.moderateText("待审核的文本内容");
// result.suggestion: "Pass"(通过)| "Block"(拦截)| "Review"(人工复审)
// result.label: 内容分类标签
// result.score: 置信度分数
// result.keywords: 触发的敏感词图片审核
import { requestImageModeration } from "@repo/content-moderation";
const result = await requestImageModeration(
"https://example.com/image.jpg",
"content",
);
// result.ok: true 表示通过
// result.ok: false 时,result.reason 会给出拦截或复审原因requestImageModeration() 会先校验图片 URL,只接受 http / https。配置了腾讯云密钥时,它会调用 @repo/tencent-cloud 的图片审核客户端;腾讯云返回 Block 或 Review 时都会得到 { ok: false, reason }。如果没有配置密钥,或者腾讯云接口临时不可用,它会 fail open 返回 { ok: true },避免因为审核服务波动阻塞用户主流程。
如果你想直接拿腾讯云的原始建议、标签、分数和 OCR 结果,也可以使用底层客户端:
import { createTencentImageModerationClientFromEnv } from "@repo/tencent-cloud";
const client = createTencentImageModerationClientFromEnv();
const result = await client.moderateImage({
bizType: "avatar",
fileUrl: "https://example.com/avatar.jpg",
});
// result.suggestion: "Pass" | "Block" | "Review"
// result.label: 违规类型标签
// result.subLabel: 细分子标签
// result.score: 置信度分数批量图片可以使用:
import { batchModerateImages } from "@repo/content-moderation";
const results = await batchModerateImages(
[
"https://example.com/image-1.jpg",
"https://example.com/image-2.jpg",
],
"content",
);常见场景
用户发帖审核 — 用户提交的文字,先审核再入库。
头像审核 — 用户上传头像时检查是否合规。
注意事项
- 审核有延迟:云 API 可能需几百毫秒,建议异步处理
- 审核收费:按调用次数计费
- 降级策略:审核服务挂了可选"先放行事后抽查"或"全部拒绝"
- 辅以人工:机器可能误判,敏感分数区间的做人工复核
@repo/content-moderation 默认采用 fail open:密钥缺失或审核 API 短暂不可用时会放行。上线 UGC 或头像上传前,应根据业务风险决定是否改成“审核失败则进入人工复核”。
相关链接
这篇文档有问题?