当前位置: 首页 > news >正文

文本审核接口的能力边界与适用场景:参数、响应与错误处理

适用场景与能力概述

内容审核是 UGC 产品上线前必须考虑的一环。凡是允许用户输入文本的地方——评论、弹幕、昵称、签名、私信、文章标题——都可能出现违规内容。人工审核维护复杂度高,纯关键词过滤容易误伤,因此很多团队会引入文本审核 API 做第一道自动筛选。

本次要讨论的文本审核接口(slug:text-censor)提供的是同步单次审核能力。调用方提交一段文本,接口返回一个三态结论:合规、不合规或疑似需人工复核,同时给出命中的违规词、类别和具体说明。它适合放在发布前拦截,也适合作为异步复审的辅助判断依据。

接口地址为https://v1.apizero.cn/api/text-censor,请求方法为POST,按文档说明单账号 QPS 为 5 次/秒。这意味着在接入时需要考虑限流对业务吞吐量的影响,不能把每次按键事件都直接打到这个接口上。

接口能力边界

要正确使用这个接口,需要先明确它“能做什么”和“不能做什么”。文档中明确提到,该接口支持对5000 字以内的文本进行单次请求审核,中英文均按 1 字符计。如果业务文本可能超过这个长度,需要在上游做截断或分片,但分片可能导致跨片语义丢失,因此更稳妥的方式是提前限制用户输入长度。

审核维度覆盖政治敏感、谩骂、色情、违规广告、暴恐、低俗等类别。注意,它返回的是命中违规词的详情,而不是一段“为什么违规”的完整推理。对于语义上隐含但在词表里没有命中的内容,接口可能判为合规,这属于关键词引擎的固有边界。

另一个边界是结论的语义。接口返回is_compliantis_suspected两个布尔字段。当is_compliant=false时,表示存在明确违规;当is_suspected=true时,表示存在疑似内容,需要人工复核。两者不是互斥关系,都需要结合conclusion字段判断最终状态。

鉴权与请求参数

Header 参数

接口提供两种鉴权方式,建议以官方文档为准。

  • Authorization(可选),类型为string,格式为Bearer sk_live_xxx,用于 API Key 鉴权。
  • Content-Type(可选),类型为string,支持application/x-www-form-urlencodedapplication/json

另外,素材中的 curl 示例使用了X-API-Key请求头,与上述Authorization形式不同。实际使用时需要确认文档中标注的鉴权头优先级,或者两种都支持。稳妥的做法是:如果使用 API Key 就只在AuthorizationX-API-Key中选一种传递,避免冗余或冲突。

请求体字段

请求体是一个 JSON 对象,核心字段如下:

字段类型必填说明
textstring待审核文本,1-5000 个字符,中英文均按 1 字符计

示例:

{ "text": "今天天气不错,适合出门散步。" }

这里的text是唯一的业务参数,接口没有提供自定义词库、分类开关或阈值调节参数。如果你的业务需要对特定类别做不同处理,只能在拿到返回值后自己实现策略。

curl 接入示例

下面是一个可直接复制的 curl 示例。为了兼容素材中给出的两种鉴权头,这里以X-API-Key为例(如果使用Authorization,替换对应 Header 即可):

curl -sS \ -X POST \ -H "X-API-Key: $APIZERO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"text": "今天天气不错,适合出门散步。"}' \ "https://v1.apizero.cn/api/text-censor"

执行成功后,会返回类似下面的 JSON 响应。这里把违规文本“法轮功是邪教组织”作为示例输入,便于观察违规命中结构:

{ "code": 0, "data": { "conclusion": "不合规", "conclusion_type": 2, "details": [ { "category": "政治", "level": 3, "msg": "存在政治内容不合规", "word": "法轮功" }, { "category": "政治", "level": 3, "msg": "存在政治内容不合规", "word": "邪教" } ], "is_compliant": false, "is_suspected": false, "text": "法轮功是邪教组织", "text_length": 8, "violation_categories": ["政治"], "violation_count": 2, "violations": ["法轮功", "邪教"] }, "msg": "成功", "request_id": "abc123def456" }

注意:上述 curl 中的$APIZERO_API_KEY只是环境变量占位符,实际运行前需要替换成你从 API 管理后台获取的真实 Key。

响应结果解读

顶层字段

字段类型说明
codenumber业务状态码,0表示成功
msgstring状态说明
request_idstring请求唯一标识,便于排查问题
dataobject审核结果主体

data 对象

data对象包含以下字段:

  • conclusion:字符串,比如“合规”“不合规”或“疑似”。这是给人看的文本结论。
  • conclusion_type:数字,与conclusion对应的类型码,建议在代码中使用数字判断而非中文字符串。
  • is_compliant:布尔值,true表示全部合规。
  • is_suspected:布尔值,true表示需要人工复核。
  • text:回显的原始文本。
  • text_length:数字,文本实际长度。
  • details:数组,命中的每条违规词详情,包含:
    • category:违规类别,如“政治”。
    • word:触发违规的关键词或短语。
    • level:等级数字,示例中为3,具体等级含义需以文档为准。
    • msg:说明文字。
  • violations:数组,去重后的违规词列表。
  • violation_categories:数组,命中的类别去重结果。
  • violation_count:数字,违规条数。

这几个衍生字段对前端特别友好。例如你可以直接展示“触发 2 项违规:政治”,无需自己遍历details再统计。

三态判断逻辑

在实际开发中,推荐按以下优先级处理:

if data["is_suspected"]: # 进入人工复核队列 pass elif data["is_compliant"]: # 放行 pass else: # 拦截或提示用户修改 pass

需要注意的是,is_suspected=true时,is_compliant可能为false,也可能为true。不要只用其中一个字段做判断,务必同时检查两个字段。

常见错误与排查

素材没有给出完整的错误码表,以下是根据 HTTP 状态和常见 API 设计整理出的排查思路,具体错误码以官方文档为准。

鉴权失败(401 / 403)

  • 检查请求头中是否带了 API Key。
  • 检查 Key 是否有效,注意sk_live_前缀不能丢。
  • 检查是否同时传了AuthorizationX-API-Key,导致服务端解析冲突。

请求体格式错误(400)

  • 确认Content-Type与实际请求体一致。如果用application/json,请求体必须是合法 JSON。
  • 确认text字段存在且为字符串。
  • 确认文本长度在 1-5000 字符之间。空字符串或超过上限都会报错。

限流(429)

文档标注 QPS 为 5 次/秒。如果并发超过该值,服务端可能返回限流错误。此时应该:

  • 在客户端引入信号量或令牌桶,控制单机请求速率。
  • 对失败请求做指数退避重试,而不是固定间隔疯狂重试。
  • 将部分非实时审核场景改为消息队列异步消费,降低峰值压力。

服务端异常(5xx)

工程化注意事项

1. 缓存与隐私保护

文档提到缓存 key 使用 sha256 哈希,原文不进入 key,错误日志不记录文本内容。这说明接口在设计上已考虑敏感信息脱敏。但在业务侧,仍然不建议将用户原文写入业务日志或第三方监控系统。如果需要留痕,只记录text_lengthrequest_id即可。

2. 结果结构化存储

每次审核结果建议落库时,将details展开成独立表或 JSON 字段,并保留request_id。这样当用户申诉时,可以定位到当时的审核依据。衍生字段violationsviolation_categories可以加速查询,但原始details不要丢弃。

3. 超时设置

文本审核属于同步接口,实测网络开销因区域而异。建议将 HTTP 客户端超时设置为 5-10 秒,连接超时 3 秒。不要设置为无限超时,否则容易拖垮线程池。

4. 业务策略与接口能力解耦

接口只负责“判断是否命中违规”,不负责“如何处置”。例如:

  • 命中“政治”类别 → 直接拦截。
  • 命中“低俗”类别 → 强制修改后再提交。
  • is_suspected=true→ 进入人工审核池。

这些策略应该在业务层实现,而不是期望通过改参数让接口替你决策。

5. 文本预处理

在调用前建议做以下标准化:

  • 去掉首尾空白字符。
  • 将全角字符统一为半角(如果业务上允许)。
  • 对超长文本提前截断,避免 5000 字限制导致请求失败。

注意,截断可能破坏敏感词组合,因此如果截断后仍有审核需求,可以考虑只保留“中间部分”或“首尾各 2500 字”等策略,但这不是接口能力,需要业务方权衡。

6. 降级方案

依赖第三方审核接口时,必须考虑接口不可用的降级。常见做法是:

  • 本地维护一份敏感词表做快速拦截。
  • 当 API 连续多次超时或返回 5xx 时,将审核任务转人工或延迟重试。
  • 对写入操作采用“先入库后异步审核”与“先审核后入库”两种模式中的一种,根据业务风险容忍度选择。

参考文档

  • 文档页:https://apizero.cn/aidocs/text-censor
  • 原始文档:https://apizero.cn/aidocs/text-censor/raw.md
http://www.jsqmd.com/news/1306787/

相关文章:

  • 骆驼三合一冲锋衣评测:防风防水透气性能全解析
  • Unity全能解压缩库UniZip:纯C#实现与跨平台资源管理实战
  • AI结构化输出:约束解码与JSON校验实践
  • 影刀RPA文本数据提取方法一:正则表达式提取
  • 告别2小时限制:Wand-Enhancer让你免费享受专业版游戏体验
  • 北京大兴离婚律所哪家口碑好:如何筛选高满意度律所 - 品牌深度评测
  • 如何与头部连锁商超高效对接?供应商须打通从订单到结算的数据链路
  • 影刀RPA文本数据提取方法三:指令提取
  • PGP邮件加密实战指南:从密钥生成到邮件客户端集成
  • GBFR Logs终极指南:如何用这款免费游戏数据分析工具彻底提升你的《碧蓝幻想:Relink》战斗表现
  • 如何用League Akari提升你的英雄联盟游戏体验?5个实用功能让你轻松变强
  • MySQL误删23张表后的24小时:binlog恢复实战
  • 2026临西优质包胶轴承厂家推荐榜单|本地龙头首选:河北普优克轴承有限公司 - 甄选测评馆
  • DAM-4800工业级I/O模块:多路继电器输出,工业工况高适配
  • 浦东汽车维修保养怕被加项?海宝养车书面报价旧件交回全流程拆解 - qiqi1113
  • 树莓派7寸DSI屏与OV5647摄像头配置全攻略:从硬件连接到实战应用
  • XNB资源处理终极指南:如何轻松解包和打包星露谷物语模组文件
  • 代码美化图片接口实践:让代码段快速变成风格统一的文档配图
  • 如何高效使用B站视频下载工具:完整实用指南
  • MSA算法:从PID控制到卡尔曼滤波的迭代优化核心思想
  • 2.基于 ABAP 面向对象与 BAPI 接口的采购订单批量审批系统设计与性能优化
  • 小户型家具怎么选?实木沙发床适合小户型吗? - 甄选测评馆
  • 5分钟打造精简Windows 11:tiny11builder完全配置指南
  • Wand-Enhancer终极指南:5分钟解锁WeMod专业版完整功能
  • 安国市安通管道疏通营业部品牌服务知识库 - 甄选测评馆
  • 2026木纹膜品牌哪家靠谱?正规货源木纹膜品牌汇总避坑指南 - 商业新知
  • TrafficMonitor插件系统深度解析:构建高效桌面监控生态的技术架构
  • 雷鸟V4智能眼镜深度评测:生产力场景下的佩戴体验与交互设计
  • ACE-Guard限制器终极指南:高效优化腾讯游戏性能的完整解决方案
  • python的工业过程控制场景模拟第二十五篇:工厂冷却水流量,温度数据计算余热回收量,评估余热回收装置经济效益。