内容审核失控的那一周,我把审核流程搬进了统一网关
一、业务痛点:审核不是技术问题,是管理问题
我们是一个十人出头的小团队,做UGC社区产品。上个月平台内容量翻了三倍,问题也随之而来:
1. 审核规则散落各处。 文本审核用A厂商的API,图片审核用B厂商的,涉政敏感词又是一套自建词库。三套逻辑写在三个服务里,谁也不敢保证规则口径一致。产品经理问“这条内容为什么被放过”,没人能在一分钟内给出答案。
2. 责任无法追溯。 审核API的调用散落在业务代码里,没有统一的日志。出了漏审事故,复盘会上大家只能靠猜:是规则没覆盖,还是模型误判,还是压根没走到审核那一步?
3. 人力被重复消耗。 每次接新内容类型(比如从图文到语音),开发要重新走一遍厂商选型、Key管理、计费对账的流程。两个人力耗一周,产出却只是“又接了一个API”。
作为管理者,我意识到核心矛盾不是“审核准确率不够”,而是审核能力没有变成一条可管理的流程。技术债不是代码烂,是流程失控。
二、架构设计:把审核从“代码里”搬到“流程里”
重构后的架构很朴素,分四层:
业务服务(发帖/评论/举报处理)
│
▼
统一AI网关(这一层是关键)
├── 审核策略路由:按内容类型分发
│ ├── 文本 → 内容安全模型 + 自建敏感词前置过滤
│ ├── 图片 → 视觉审核模型(色情/暴恐/广告)
│ └── 语音 → 先转写再走文本链路
├── 统一Prompt与规则版本管理
├── 全量审计日志(谁、何时、调了什么、结果是什么)
└── 阈值分级处置:直接放行 / 机审拦截 / 转人工队列
│
▼
人工审核后台(只看机器不确定的20%)设计上有三个管理层面的决策:
决策一:所有审核调用收口到网关。 业务方不再直接持有任何API Key,只调用网关的一个内部接口。这解决的不只是安全问题,更是变更收敛——调整审核策略时改网关配置,不用发版。
决策二:规则版本化。 每次审核策略调整(换模型、调阈值、改Prompt)都打版本号。漏审复盘时可以精确回放:“事故发生时,线上跑的是v1.4.2的规则”。这对上对下都有交代:对内是复盘依据,对外是合规证明。
决策三:明确“机器管确定性,人管不确定性”。 高置信度的违规直接拦,高置信度的正常直接放,中间地带全部转人工。人工审核员只处理机器犹豫的部分,效率提升立竿见影,但更重要的是,责任边界清晰了:机器判错是策略问题,人工漏判是流程问题。
三、关键实现步骤
落地时我们分了五步,每步都能独立交付价值:
第一步:盘点与收口(第1周)
- 列出所有现有的审核调用点和API Key
- 网关侧配置各厂商的模型接入,业务侧改为调用统一审核接口
- 这一步不改任何规则,只做收口,先保证“看得见所有调用”
第二步:策略配置化(第2周)
网关侧的审核路由配置,核心逻辑大致如下:
# 网关侧:审核策略路由(简化示意)
REVIEW_POLICY = {
"text": {
"pre_filter": "local_sensitive_words", # 本地词库前置,省钱省时
"model": "content-safety-v2", # 网关统一接入的内容安全模型
"thresholds": {"block": 0.9, "pass": 0.1}, # 中间地带转人工
},
"image": {
"model": "vision-moderation-v1",
"thresholds": {"block": 0.85, "pass": 0.15},
"fallback": "manual_queue", # 模型超时降级到人工,不漏审
},
}
async def review(content_type: str, payload: dict) -> dict:
policy = REVIEW_POLICY[content_type]
if content_type == "text" and policy["pre_filter"]:
if hit_local_words(payload["text"]):
return {"action": "block", "reason": "local_wordlist"}
score = await gateway.invoke(policy["model"], payload)
action = classify(score, policy["thresholds"])
log_audit(content_type, policy["version"], score, action) # 全量留痕
return {"action": action}第三步:审计日志与看板(第2-3周)
- 每次调用的内容快照、模型输出、最终处置、时间戳全部落库
- 管理看板暴露三个指标:漏审率(人工抽检回溯)、误拦率(申诉量)、人工队列积压深度
- 这三个数字成了我每周例会必看的报表
第四步:降级与兜底(第3周)
- 模型超时或厂商故障时,自动降级到备用模型,再不行进人工队列
- 宁可审核变慢,不可审核断链——这是UGC平台的生命线
第五步:策略迭代机制(持续)
- 每两周一次策略评审:产品、审核运营、开发三方过漏审误拦案例
- 调整后的规则先在5%流量灰度,观察指标再全量
四、为什么统一AI网关能降低维护成本
这次改造最超预期的收益来自网关这一层。原因很直接:
1. Key管理从N份变成1份。 以前三个服务、七八个Key,轮换一次要发三次版。现在密钥只在网关侧配置,业务侧完全无感,轮换从半天变成五分钟。
2. 模型升级变成配置变更。 内容安全模型厂商更新版本,我们在网关侧切换,业务代码一行不动。没有网关时,这类升级平均要拖一个月,因为总有人“忙完这阵再改”。
3. 计费和用量天然可归集。 所有调用走网关,费用按内容类型、按业务线自动分账。以前月底对账要开发手工拉日志,现在看板直接出数。对小团队来说,省下的不只是钱,是那两个每月做对账的人日。
4. 团队协作界面变简单了。 运营提的审核规则调整,落在网关配置上,开发评审后生效;业务开发只面对一个稳定的内部接口。接口越少,扯皮越少——这是管理上的隐性收益。
五、结果与一点反思
改造完成后一个月内,机审覆盖率100%,人工审核量下降约六成(团队内部统计,仅供参考),漏审事故归零。更重要的变化是组织层面的:审核从“散在代码里的黑盒”变成了“有版本、有日志、有指标、有例会”的流程。
给同样规模的团队一个建议:不要等出事故才收口。内容审核这类能力,天然适合在第一天就走统一网关——它的规则会持续变、模型会持续换、责任会持续被追问,晚收口一天,迁移成本就多一分。
如果你也在为多个AI厂商的Key管理、计费对账和调用收口头疼,可以试试我们目前在用的统一AI网关:https://api.thistoken.ai/register
---
本文的示例只需一个 API Key 就能复现:在 https://api.thistoken.ai/register 注册即用。