1. 适用场景与接口能力边界
内容审核 API 主要用于检测文本中的敏感信息,覆盖色情、政治、广告、联系方式、、谩骂 6 大类。它通过“敏感词库 + 正则规则 + AI 特征评分”三重策略识别变体绕过(谐音、拼音、符号替换),输出safe / low / medium / high四个风险等级,并可选择自动脱敏。
该接口适用于用户评论、聊天消息、内容发布、社区巡检等场景。调用频率上限为 10 QPS(即每秒最多 10 次请求),超过限制会返回 HTTP 429。单次请求的文本长度限制为 1–5000 字。批量模式(action=batch)最多支持 50 条文本同时审核。
2. 请求参数与鉴权方式
接口地址:POST https://v1.apizero.cn/api/content-moderation
2.1 鉴权方式
根据官方提供的 curl 示例,接口使用X-API-Key请求头传递密钥。例如:
-H "X-API-Key: $APIZERO_API_KEY"$APIZERO_API_KEY需要替换为真实密钥(从平台获取)。虽然参数表中列出了Authorization字段且标记为非必填,但实际调用中建议优先使用X-API-Key方式,否则可能返回 403 或 401。
注意:密钥应妥善保管,避免硬编码到前端或公开仓库。
2.2 请求体字段说明
请求体为 JSON 对象,包含以下字段:
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
action | string | 否 | 操作类型:moderate(默认,单条审核)、batch(批量)、categories(仅返回支持的类别列表) |
text | string | 条件必填 | 当action=moderate时必须提供,1–5000 字 |
texts | array | 条件必填 | 当action=batch时必须提供,最多 50 条 |
mask | boolean | 否 | 是否返回脱敏文本,默认false。脱敏会用*替换敏感词 |
错误案例:若不指定text却设置action=moderate,服务端会返回参数校验错误。
3. curl 接入示例与变量说明
以下是一个完整的单条内容审核请求示例:
export API_KEY="your_actual_api_key_here" curl -sS \ -X POST \ -H "X-API-Key: $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "action": "moderate", "text": "你这个傻逼,脑残吧", "mask": true }' \ "https://v1.apizero.cn/api/content-moderation"3.1 预期成功响应
{ "code": 0, "data": { "categories": ["谩骂"], "details": [ { "category": "谩骂", "count": 2, "matches": ["傻逼", "脑残"], "method": "敏感词" } ], "is_pass": false, "masked_text": "你这个**,**吧", "original_length": 10, "risk_level": "high" }, "msg": "成功", "request_id": "abc123" }3.2 批量请求示例
curl -sS \ -X POST \ -H "X-API-Key: $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "action": "batch", "texts": ["这是一段正常文本", "广告加微信xxx"], "mask": false }' \ "https://v1.apizero.cn/api/content-moderation"批量模式返回的数据结构略有不同(具体以文档为准),但request_id始终返回,便于链路追踪。
4. 正常返回值逐字段解读
| 字段 | 类型 | 说明 |
|---|---|---|
code | int | 业务状态码,0 表示成功;非 0 表示异常 |
msg | string | 状态描述,成功时为“成功” |
request_id | string | 请求唯一标识,用于日志排查 |
data.is_pass | boolean | 是否通过审核(false表示发现违规) |
data.risk_level | string | 风险等级:safe/low/medium/high |
data.categories | array | 命中的违规类别列表 |
data.details | array | 每类的详细匹配信息(匹配词、数量、检测方式) |
data.masked_text | string | 脱敏后的文本(仅mask=true时返回) |
data.original_length | int | 原始文本长度(字符数) |
注意:当is_pass=true时,categories和details可能为空。
5. 常见错误分类与排查实操
5.1 鉴权与网络类错误
HTTP 401 / 403 Unauthorized
- 典型原因:API Key 缺失、无效或已过期;使用了错误的请求头(如放入
Authorization: Bearer但服务端不接受)。 - 排查方法:
- 检查环境变量
APIZERO_API_KEY是否设置正确。 - 确认请求头名称为
X-API-Key(区分大小写)。 - 尝测试
curl -v查看实际发送的请求头。 - 如果返回
403且附带{"code": 403, "msg": "Forbidden"},则密钥权限不足,联系平台管理员。
- 检查环境变量
HTTP 0 / Connection refused / Timeout
- 典型原因:网络不通、代理设置错误或目标域名解析失败。
- 排查方法:
ping v1.apizero.cn检查网络可达性。- 使用
curl -v --connect-timeout 5指定超时并观察连接阶段。 - 检查本地防火墙或公司网络策略是否拦截了 HTTPS 请求。
5.2 参数校验类错误
HTTP 400 Bad Request+ 返回 JSON 中code非 0(如 4004)
常见场景及修复:
| 错误现象 | 问题原因 | 修复方式 |
|---|---|---|
"msg": "text字段不能为空" | action=moderate时未传text或传了空字符串 | 提供 1–5000 字的有效文本 |
"msg": "texts字段格式错误" | action=batch时texts不是数组或元素为空 | 确保texts是 JSON 数组,如["文本1","文本2"] |
"msg": "超出长度限制" | 文本超过 5000 字 | 截断或分段发送 |
"msg": "不支持的action类型" | action值不为moderate/batch/categories | 检查枚举值拼写(区分大小写) |
注意:texts字段在 curl 示例中被写成字符串形式"[\"文本1\", \"文本2\"]",但正式请求时应传原生 JSON 数组,否则可能导致解析失败。建议一直使用 JSON 对象,不要对数组进行二次转义。
5.3 请求频率限制
HTTP 429 Too Many Requests
当每秒请求次数超过 10 次时,服务端会返回 429 并可能附带Retry-After头(以文档为准)。
- 排查方法:
- 在客户端代码中对请求进行计数,确认是否超出 QPS 上限。
- 检查是否有并发任务同时调用。
- 建议加入本地令牌桶或滑动窗口限流。
- 如果业务量超限,考虑降低调用频率或申请提升 QPS。
错误响应示例(假设):
{ "code": 429, "msg": "请求过于频繁,请稍后再试", "request_id": "rate-limit-xxx" }5.4 内容审核逻辑告警
有些返回码看似成功(HTTP 200),但data.risk_level低于预期或is_pass与业务不匹配。这不是接口错误,而是业务逻辑问题。
- 误判高:明明无违规却判定为
medium。可尝试调整action=categories先获取当前类别列表,或联系服务商反馈模型。 - 脱敏后文本乱码:原始文本包含未正确转义的字符。确保发送的 JSON 是合法 UTF-8 编码。
5.5 服务端内部错误
HTTP 500 Internal Server Error
表示服务端出现未预料的异常。此时应:
- 记录
request_id,以便官方定位问题。 - 重试请求(带指数退避,如间隔 1s、2s、4s)。
- 如果持续出现,检查自己的请求参数是否合规;若确认无误,联系技术支持。
HTTP 502 / 503通常表示网关或服务暂时不可用,短时重试一般可恢复。
6. 工程化注意事项
6.1 请求日志与监控
每次调用都应记录:
- 请求时间戳
- 使用的 API Key 前缀(不要记录完整密钥)
- 请求参数摘要(避免记录完整文本以防隐私泄露)
- 返回的
request_id、HTTP 状态码和业务code - 响应耗时
通过日志可以快速排查“某次审核未通过”或“调用异常”的问题。
6.2 重试与幂等
由于action=moderate每次请求均独立审核,没有副作用,天然支持幂等。建议对于网络超时或 5xx 错误使用指数退避重试,最大重试 3 次。对于 4xx 错误(除 429 外)不应重试,而应检查参数。
6.3 并发控制
使用信号量或队列控制并发请求数不超过 10。例如在 Node.js 中使用p-limit,Python 中使用asyncio.Semaphore。
6.4 脱敏数据的存储
如果开启mask=true,返回的masked_text已脱敏但仍可能包含部分敏感信息,建议不要直接写入生产日志,或对日志进行二次脱敏。
6.5 参数校验前置
在自己的代码中加入参数校验,避免将非法参数发给服务端。例如:检查text长度、texts数组元素是否为空、action是否在允许列表中。
7. 参考文档
- 官方文档页:https://apizero.cn/aidocs/content-moderation
- 原始文档 Markdown:https://apizero.cn/aidocs/content-moderation/raw.md
- 更多 API 接口信息可查阅文档站。