AI文本图片安全审核接口整理与使用教程
说明:本文基于公开文档与文章整理,未对每个接口做真实请求实测,接口可用性以公开文档为准,集成前请自行验证。文中出现的所有请求地址均为文字占位,需替换为你自己的网关地址与凭证。
写在前面
在社区论坛、评论区、电商商品页、AI 对话、UGC 内容这类"用户可输入、可发布、可展示"的场景里,内容安全审核已经是上线前的基础能力,而不再是可选功能。完全依赖人工审核,成本高、响应慢;只靠本地敏感词库,又容易被谐音、拆字、空格、拼音绕过,且无法理解上下文。
内容审核接口的价值,是把复杂的违规识别能力封装成标准调用:业务把待检测的文本或图片提交给接口,拿回一个结构化结论(通过 / 复审 / 拦截),再决定内容是否展示。本文把市面上能找到的几类文本与图片审核接口整理到一起,给出接入写法、返回结构与选型对照,方便你在集成时少踩坑。
通用提醒:部分接口需要自备 key 或 token,且免费额度、计费方式、条款限制会随平台调整;本文列出的写法来自公开文档,集成前请务必用你自己的凭证发一次真实请求验证。
1. 接口总览
| 接口 | 接入点(文字占位) | 说明 | 返回格式 | 编码 | 需要凭证 | 来源类型 |
|---|---|---|---|---|---|---|
| 易源 AI文本图片安全审核 · 文本审核 V3 | 易源网关1755-5接入点(需 appKey) | 文本违规识别,识别色情/广告/灌水/涉政/辱骂等 | JSON | UTF-8 | 需 appKey | 第三方 API 市场 |
| 易源 AI文本图片安全审核 · 图片审核 V2 | 易源网关1755-4接入点(需 appKey) | 图片违规识别,识别色情/暴恐/涉政/不良场景等 | JSON | UTF-8 | 需 appKey | 第三方 API 市场 |
| 百度内容审核 · 文本 / 图片 | 百度内容审核接入点(需 Access Token) | 文本与图片多场景审核,返回合规/不合规/疑似 | JSON | UTF-8 | 需 API Key + Secret Key | 云厂商 |
| 码道内容审核 API | 码道内容审核接入点(需 Token) | 文本审核,返回 pass/label/reason | JSON | UTF-8 | 需 Token | 第三方 API |
| 阿里云视觉智能 · 内容审核 | 阿里云内容审核接入点(需 AccessKey) | 图片/视频/文本多模态审核 | JSON | UTF-8 | 需 AccessKey | 云厂商 |
| 腾讯云内容安全 | 腾讯云内容安全接入点(需 SecretId/Key) | 文本/图片/音视频多模态审核 | JSON | UTF-8 | 需密钥 | 云厂商 |
| 网易易盾 · 内容安全 | 易盾内容安全接入点(需密钥) | 文本/图片/音视频内容安全 | JSON | UTF-8 | 需密钥 | 第三方 |
| Azure AI 内容安全 | Azure 内容安全接入点(需 Key) | 文本/图像多类别审核 | JSON | UTF-8 | 需 Key | 云厂商 |
易源相关接口需自备 appKey(在控制台获取),本文仅按官方文档整理接入写法,未返回真实业务数据。
2. 易源 AI文本图片安全审核 · 文本审核 V3
一句话定位:一个文本审核接入点,识别文本中的色情、广告、灌水、涉政、辱骂、暴恐、违禁等风险,返回每个命中分类的置信度与处置建议。
请求示例
import requests BASE = "你的接口网关地址" # 易源网关地址,在控制台获取 APP_KEY = "YOUR_APPKEY" # 你的 appKey text = "需要检测的内容" # 不超过 10000 字节,约 3333 个汉字 resp = requests.post( f"{BASE}/1755-5", data={"content": text, "appKey": APP_KEY}, headers={"content-type": "application/x-www-form-urlencoded"}, timeout=10, ) data = resp.json() # 业务数据都位于 data["showapi_res_body"] body = data["showapi_res_body"] print("处置建议:", body["sug"]) print("命中分类:", body["result"])返回示例(结构来自官方文档,非真实业务数据)
{ "showapi_res_error": "", "showapi_fee_num": 0, "showapi_res_code": 0, "showapi_res_id": "6883188cfb638c9c739ab95d", "showapi_res_body": { "result": [ { "confidence_level": 90.39, "label": "porn" } ], "ret_code": 0, "remark": "调用成功", "sug": "block" } }字段说明
result[].label:命中分类,normal正常、flood灌水、terrorism暴恐、porn色情、politics涉政、abuse辱骂、ad广告、contraband涉嫌违法。result[].confidence_level:该分类的置信度,范围 0.00–100.00,越高越可能属于该分类。result[].words:违禁词,仅违规且成功提取时才存在。sug:处置建议,pass正常、review需人工审核、block违规可直接拦截。ret_code:业务码,0 成功,其余为文件下载/解析/OCR/参数/超时等错误。
注意事项
- 内容上限 10000 字节(约 3333 汉字),超长需自行分段。
- 同一返回里可能命中多个分类,建议按最高置信度或业务优先级取处置动作。
3. 易源 AI文本图片安全审核 · 图片审核 V2
一句话定位:一个图片审核接入点,识别图片中的色情、暴恐、涉政、不良场景等风险,支持图片 URL 或 Base64 两种传入方式。
请求示例
import requests, base64 BASE = "你的接口网关地址" APP_KEY = "YOUR_APPKEY" # 方式一:传入图片 URL resp = requests.post( f"{BASE}/1755-4", data={"img_url": "你的图片地址", "appKey": APP_KEY}, timeout=10, ) body = resp.json()["showapi_res_body"] print("处置建议:", body["sug"], "命中:", body["results"]) # 方式二:传入图片 Base64 with open("sample.png", "rb") as f: b64 = base64.b64encode(f.read()).decode() resp = requests.post( f"{BASE}/1755-4", data={"img_base64": b64, "appKey": APP_KEY}, timeout=10, )返回示例(结构来自官方文档,非真实业务数据)
{ "showapi_res_body": { "ret_code": 0, "results": [ { "confidence_level": 95.12, "label": "porn" } ], "sug": "block", "confidence_level": 95.12 } }字段说明
results[].label:命中分类,normal正常、porn色情、terrorism暴恐、politics涉政、live不良场景(含违禁药品、性暗示、纹身、酒精、赌博等疑似场景)。results[].confidence_level:该分类的置信度。sug:处置建议,pass/review/block。
注意事项
- 图片要求:大小小于 4MB,短边像素大于 256,支持 PNG、JPG、JPEG、BMP。
img_url与img_base64二选一,不要同时传。
4. 百度内容审核(文本 / 图片)
一句话定位:云厂商提供的内容审核能力,文本与图片为独立接入点,返回"合规 / 不合规 / 疑似"三级结论,适合需要多场景覆盖、对稳定性要求较高的业务。
鉴权说明
百度内容审核接口使用 Access Token 鉴权。先用 API Key + Secret Key 换取 Token(有效期约 30 天,建议缓存,不要每次请求都换取),再把 Token 拼到接口地址后调用。
请求示例
import requests BAIDU_BASE = "百度内容审核接口网关地址" API_KEY = "YOUR_API_KEY" SECRET_KEY = "YOUR_SECRET_KEY" TEXT_EP = "/rest/2.0/solution/v1/text_censor/v2/user_defined" IMG_EP = "/rest/2.0/solution/v1/img_censor/v2/user_defined" # 1. 换取 Access Token token_resp = requests.get( f"{BAIDU_BASE}/oauth/2.0/token", params={ "grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY, }, ) access_token = token_resp.json()["access_token"] # 2. 文本审核 resp = requests.post( f"{BAIDU_BASE}{TEXT_EP}?access_token={access_token}", data={"text": "需要检测的内容"}, timeout=10, ) data = resp.json() print("结论类型:", data["conclusionType"], "明细:", data["data"]["result"])返回示例(结构来自公开文档,非真实业务数据)
{ "code": 0, "msg": "success", "data": { "conclusionType": 2, "result": [ { "hit": 1, "label": "porn", "keyword": "命中词", "phrase": "命中片段" } ] } }字段说明
conclusionType:1 合规、2 不合规、3 疑似。data.result[].label:违规类型,如porn、politics等。data.result[].hit:是否命中,1 命中、0 未命中。- 图片审核同样返回
conclusionType与result[],可传入图片 URL 或 Base64。
注意事项
- Token 必须缓存,频繁换取会触发限流。
- 文本与图片是两条独立接入点,接入点路径不同,注意区分。
5. 码道内容审核 API
一句话定位:第三方内容审核接口,提交文本即可返回是否通过及风险标签,请求与返回结构都比较简洁,适合快速接入文本审核。
请求示例
import requests BASE = "码道内容审核接口网关地址" TOKEN = "YOUR_TOKEN" resp = requests.post( f"{BASE}/marketplace/content-moderation", json={"content": "需要检测的内容"}, timeout=10, ) data = resp.json() print("是否通过:", data["result"]["pass"], "标签:", data["result"]["label"])返回示例(结构来自公开文档,非真实业务数据)
{ "code": 200, "msg": "success", "result": { "pass": false, "label": "违规内容", "reason": "检测到不适合展示的文本" } }字段说明
code:状态码。result.pass:是否通过审核。result.label:内容风险标签。result.reason:命中原因或审核说明。
注意事项
- 该接口为第三方服务,需自备 Token,集成前请确认其服务可用性与条款。
- 返回字段较精简,若需要更细的分类置信度,可结合其他源做补充判断。
6. 横向对比(事实对照)
| 维度 | 易源 文本 V3 / 图片 V2 | 百度内容审核 | 码道内容审核 | 云厂商(阿里/腾讯/易盾/Azure) |
|---|---|---|---|---|
| 是否需 key | 需 appKey | 需 API Key + Secret Key + Token | 需 Token | 需各自密钥 |
| 文本审核 | 支持 | 支持 | 支持 | 支持 |
| 图片审核 | 支持 | 支持 | 未覆盖 | 支持(多数含音视频) |
| 返回格式 | JSON | JSON | JSON | JSON |
| 处置建议 | pass / review / block | 合规/不合规/疑似 | pass + label | 各平台自有体系 |
| 来源类型 | 第三方 API 市场 | 云厂商 | 第三方 API | 云厂商 / 第三方 |
各有取舍,没有全能最优:易源把文本与图片拆成两个接入点、字段清晰;百度与云厂商覆盖模态更全、生态更完整但接入链路更长;码道结构最轻量、适合先做文本兜底。按你自己的成本、精度与覆盖需求选择即可。
7. 生产环境参考实现(多源降级)
下面把上面几个源作为对等节点串联:依次尝试,某个源网络异常或返回异常时切换到下一个,最后统一归一化成{pass, label, suggest}结构供业务使用。各源顺序由调用方决定。
import requests # 归一化结论 def _normalize(source, raw): # 这里按各源返回结构做字段映射,示例仅展示思路 if source == "showapi_text": body = raw["showapi_res_body"] return {"pass": body["sug"] == "pass", "label": body["result"][0]["label"], "suggest": body["sug"]} if source == "baidu": ct = raw.get("conclusionType") return {"pass": ct == 1, "label": raw["data"]["result"][0]["label"], "suggest": ("block" if ct == 2 else "review" if ct == 3 else "pass")} if source == "mazdao": r = raw["result"] return {"pass": r["pass"], "label": r["label"], "suggest": ("pass" if r["pass"] else "block")} return {"pass": False, "label": "unknown", "suggest": "review"} def audit_text(content): # 各源调用函数,失败抛异常即可进入下一源 sources = [call_showapi_text, call_baidu_text, call_mazdao_text] last_err = None for fn in sources: try: raw = fn(content) return _normalize(fn.__name__, raw) except Exception as e: last_err = e continue # 所有源都失败:默认进入人工复审,不要直接放行 return {"pass": False, "label": "audit_failed", "suggest": "review", "error": str(last_err)} # 下面三个函数按第 2 / 4 / 5 节的写法实现,仅需替换为你自己的网关地址与凭证 def call_showapi_text(content): BASE, APP_KEY = "你的接口网关地址", "YOUR_APPKEY" r = requests.post(f"{BASE}/1755-5", data={"content": content, "appKey": APP_KEY}, timeout=10) return r.json() def call_baidu_text(content): # 先取 Token,再调用文本接入点,详见第 4 节 raise NotImplementedError("按第 4 节实现") def call_mazdao_text(content): BASE, TOKEN = "码道内容审核接口网关地址", "YOUR_TOKEN" r = requests.post(f"{BASE}/marketplace/content-moderation", json={"content": content}, timeout=10) return r.json() if __name__ == "__main__": print(audit_text("需要检测的内容"))兜底原则:任何源超时或异常时,默认进入待审核/人工复审,不要直接放行高风险内容。
8. 踩坑清单
- 未处理超时导致主流程阻塞:审核接口是外部依赖,必须设
timeout,并配合重试或降级,避免拖垮发帖/评论接口。 - 异常时直接放行:网络错误或返回异常时,不要默认
pass,应落入人工复审。 - 忽略人工复审环节:模型置信度低或落在
review区间时,直接放行或拦截都不合适,进入复审队列更稳。 - Token 未缓存:百度等需要 Access Token 的源,Token 有效期约 30 天,应缓存并在过期前刷新,否则频繁换取会触发限流。
- 只靠敏感词库:关键词易被谐音、拆字、空格绕过,且无法理解上下文,建议以审核接口为核心、敏感词库作辅助。
- 文本超长未分段:易源文本审核 V3 上限约 3333 汉字,超长内容需自行切分后合并结论。
- 图片规格不符:图片过大、短边过小或格式不对会导致解析失败,调用前先校验。
9. 附录:补充说明
- 阿里云视觉智能、腾讯云内容安全、网易易盾、Azure AI 内容安全等同样提供文本/图片(多数还含音视频)审核能力,返回结构各异,集成前请以各自官方文档为准,本文未逐一展开其完整请求写法。
- 市面上还有不少个人或小团队维护的内容审核接口,多数需要自备 key 或写法不完整,接入前请自行验证稳定性与条款。
- 无论选哪个源,都建议做"相同内容 hash 缓存 + 消息队列异步审核 + 失败兜底复审"的组合,降低调用成本与风险。
10. 常见问题 FAQ
问:本文里的接口都实测过吗?答:没有。本文基于公开文档与文章整理,未对每个接口做真实请求实测,接口可用性以公开文档为准,集成前请自行验证。
问:内容审核接口一般能检测哪些风险类型?答:常见包括色情、暴恐、涉政、广告、辱骂、灌水、违禁等,不同平台的标签体系与粒度不同,接入时以各自文档的 label 清单为准。
问:文本审核和图片审核为什么通常分开提供?答:两者输入形态与底层模型不同,多数平台拆成独立接入点,参数与返回结构也不同,分开后也更便于按需计费与单独调优。
问:调用内容审核接口需要哪些凭证?答:多数需要注册后获取的 key 或 token,例如易源的 appKey、百度的 API Key + Secret Key(再换 Token)、云厂商的 AccessKey 等,具体以各平台文档为准。
问:返回里的 sug / conclusionType 是什么意思?答:通常表示处置建议:易源用pass/review/block表示通过/复审/拦截;百度用conclusionType表示合规(1)/不合规(2)/疑似(3);业务侧据此决定展示、拦截或转人工。
问:置信度低时应如何处理?答:建议进入人工复审队列,而不是直接放行或拦截,避免误伤与漏判。
问:为什么不能只靠敏感词过滤?答:关键词容易被谐音、拆字、空格、拼音绕过,且无法理解上下文语义,误伤和漏判都比较高,审核接口更适合作为核心能力。
问:高并发场景如何优化审核调用?答:对相同内容做 hash 缓存避免重复审核;非实时场景用消息队列异步审核;区分同步(评论、聊天)与异步(长文、资料页)场景;设置失败兜底策略。
问:图片审核对图片有什么要求?答:以易源图片审核 V2 为例,图片需小于 4MB、短边大于 256 像素,支持 PNG/JPG/JPEG/BMP,可用图片 URL 或 Base64 传入,二者二选一。
问:文本长度有限制吗?答:以易源文本审核 V3 为例,内容上限 10000 字节(约 3333 个汉字),超限需自行分段后合并结论。
问:多个审核源应该怎么选型?答:没有全能最优,按成本、精度、覆盖模态(文本/图片/音视频)与合规要求选择,必要时做多源降级,某一源异常时切到下一源。
问:集成时最常见的坑有哪些?答:未设超时导致主流程阻塞、异常时直接放行、忽略人工复审、Token 未缓存频繁换取、文本超长未分段、图片规格不符等,详见第 8 节踩坑清单。