内容安全
平台内置内容安全审核中转:应用把待审文本/图片交给平台,平台调用云端审核引擎并返回结果。审核凭据只配置在平台侧,应用只持有自己的接入令牌——不需要(也不应该)自行申请任何云厂商账号。
适用场景:文本内容的合规检查(含用户昵称),以及用户上传图片的违规检测(色情/涉政/暴恐/违禁等,含图中文字)。
凭据
普通应用启动/重启一次后,平台自动注入两个环境变量:
| 变量 | 含义 |
|---|---|
NAE_MODERATION_API |
内容安全服务地址(集群内 DNS,仅集群内可达) |
NAE_MODERATION_KEY |
该应用的接入令牌(namo_ 前缀) |
令牌只存在于容器环境变量里——平台网页不展示明文(服务端只存哈希)。它是应用级凭据:不要打进日志、不要下发给浏览器。审核调用应由你的后端发起。
变量缺失说明应用还没在本功能上线后重启过——重启一次即注入。在「内容安全」页可查看各应用令牌状态并轮换(轮换后需重启应用生效)。
两个端点都用同一鉴权头:Authorization: Bearer ${NAE_MODERATION_KEY}。
文本审核
POST ${NAE_MODERATION_API}/v1/moderation/text
Content-Type: application/json
{"service": "comment_detection", "content": "待审核的文本"}
| service | 场景 |
|---|---|
comment_detection |
文本审核(通用文本,单次 ≤30000 字符) |
nickname_detection |
昵称审核(单次 ≤600 字符) |
响应:
{
"risk_level": "high",
"labels": ["profanity"]
}
labels空数组 = 全文通过;非空 = 命中的风险类别(如ad广告、profanity辱骂、sexual_content色情、violence暴恐、contraband违禁、political_content涉政等)。risk_level:none/low/medium/high。建议处置:high直接拦截,medium转人工复核,low/none放行。
// Node 示例
const res = await fetch(`${process.env.NAE_MODERATION_API}/v1/moderation/text`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.NAE_MODERATION_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ service: 'comment_detection', content: userText }),
})
const { risk_level, labels } = await res.json()
if (risk_level === 'high') rejectPost()
图片审核
请求体直接放图片字节(不是 JSON),Content-Type 填图片 MIME、必须带 Content-Length:
POST ${NAE_MODERATION_API}/v1/moderation/image
Content-Type: image/jpeg
Content-Length: <字节数>
<图片二进制>
限制:单图 ≤10MB;支持 PNG/JPG/JPEG/BMP/WEBP/TIFF/SVG/GIF/ICO/HEIC。
响应:
{
"risk_level": "none",
"results": [],
"request_id": "…"
}
命中风险时 results 给出各风险项(label/confidence 0~100/description/risk_level),risk_level 为整图结论。处置建议与文本一致。
审核日志保存 7 天。
// Node 示例:审核用户上传的图片 Buffer
const res = await fetch(`${process.env.NAE_MODERATION_API}/v1/moderation/image`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.NAE_MODERATION_KEY}`,
'Content-Type': 'image/jpeg',
'Content-Length': String(buf.length),
},
body: buf,
})
const { risk_level } = await res.json()
错误
| 状态码 | 含义 |
|---|---|
| 400 | 参数问题(service 不识别 / 文本超长 / 图片超限 / 平台未启用内容安全) |
| 401⁄403 | 令牌缺失或无效(检查 NAE_MODERATION_KEY 是否已注入、是否被轮换后未重启) |
| 500 | 审核引擎暂时不可用,稍后重试 |
失败响应恒为 {"error": "原因"}。
调用统计
「内容安全」页展示你各应用的调用统计(每日次数、按应用、按类型)。计数口径:实际发起的审核调用次数,失败的调用不计。