内容安全

平台内置内容安全审核中转:应用把待审文本/图片交给平台,平台调用云端审核引擎并返回结果。审核凭据只配置在平台侧,应用只持有自己的接入令牌——不需要(也不应该)自行申请任何云厂商账号。

适用场景:文本内容的合规检查(含用户昵称),以及用户上传图片的违规检测(色情/涉政/暴恐/违禁等,含图中文字)。

凭据

普通应用启动/重启一次后,平台自动注入两个环境变量:

变量 含义
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"]
}
// 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 不识别 / 文本超长 / 图片超限 / 平台未启用内容安全)
401403 令牌缺失或无效(检查 NAE_MODERATION_KEY 是否已注入、是否被轮换后未重启)
500 审核引擎暂时不可用,稍后重试

失败响应恒为 {"error": "原因"}

调用统计

「内容安全」页展示你各应用的调用统计(每日次数、按应用、按类型)。计数口径:实际发起的审核调用次数,失败的调用不计。