登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  科技周边 >  人工智能

AI 文本审核怎么区分拒答与误报:Moderations API 结果字段和业务分流

来源:17golang原创

时间:2026-08-30 21:25:41 218浏览 收藏

评论接口返回 flagged: true 时,业务代码最容易犯的错是直接把请求判成违规;返回 false 也不等于可以跳过人工抽检。Moderations API 给出的结果更适合当作风险信号:先看整体标记,再结合 categoriescategory_scores 选择放行、复核或拒绝。

要点速览
  • flagged 是整体风险判断,不是业务最终裁决。
  • categories 说明命中的类别,category_scores 适合记录边界样本。
  • 拒答、人工复核和放行应是三条独立路径,不能用一个布尔值覆盖。
  • 模型升级或策略变化后,要重新抽样校准阈值和误报处理。

先把审核结果看成一组信号

一次审核请求可以抽象成 ModerationRequest,响应则是 ModerationResult。结果中的 flagged 负责回答“是否有类别被判为风险”,categories 负责回答“风险落在哪些类别”,category_scores 则提供各类别的评分,方便业务识别临界样本。

Moderations API 中 ModerationRequest、ModerationResult、flagged 与 Categories 的静态关系框图
图1:请求、结果与风险类别的静态对应关系

这几个字段不是互相替代的。比如整体标记命中时,业务仍然需要知道是哪个类别触发了拦截;整体未命中时,评分接近内部复核线的样本也值得保留。

用 categories 和 category_scores 拆开拒答与误报

categories 是便于程序分流的类别结果,category_scores 是同一类别的评分信息。不要把某一个分数硬编码成“超过就封禁”的全局真理:不同产品的内容类型、用户申诉成本和人工能力不同,阈值必须通过已标注样本校准。

type ModerationDecision struct {
    Flagged       bool
    Categories    map[string]bool
    CategoryScore map[string]float64
    Action        string
}

func decide(result ModerationResult) ModerationDecision {
    if !result.Flagged {
        return ModerationDecision{Flagged: false, Action: "allow"}
    }
    if result.Categories["harassment"] {
        return ModerationDecision{Flagged: true, Categories: result.Categories, Action: "review"}
    }
    return ModerationDecision{Flagged: true, Categories: result.Categories, Action: "reject"}
}

示例只演示数据边界,不代表任何具体产品的政策阈值。生产代码还应保存模型名、请求版本、类别结果和最终人工处置,便于复盘“模型命中但人工放行”的误报样本。

把业务分成放行、复核和拒绝三条路径

更稳妥的结果对象是 BusinessDecision,而不是直接返回 bool。低风险内容进入放行路径;整体标记或类别评分接近复核线的内容进入人工复核;确定性较高且与业务规则一致的风险才进入拒绝路径。

ModerationResult 通过 category_scores 连接 BusinessDecision 与人工复核的静态框图
图2:类别评分连接业务决策与人工复核入口
观察结果建议动作需要留下的证据
flagged=false,评分远离复核线放行模型名与请求时间
flagged=true,类别明确但语境复杂人工复核类别、评分、原文摘要
类别明确且命中业务硬规则拒绝类别结果与处置原因

常见坑:把误报当成模型失效

为什么 flagged=true 不能直接等于永久封禁?

它表达的是审核模型对风险类别的判断,不替代账号处罚、申诉和内容上下文规则。永久处置应由独立业务策略决定。

为什么 flagged=false 仍要抽样?

模型输出存在边界样本,抽样能发现漏报、业务新语境和策略变化,尤其适合新模型上线后的观察期。

category_scores 可以直接当作公开阈值吗?

不建议。评分应结合自有标注集、误报成本和人工处理能力校准,并记录模型版本变化。

拒绝结果要不要把全部类别返回给用户?

通常只返回稳定、可解释的提示,详细类别和评分留在内部审计记录,避免暴露策略细节。

常见问题

Moderations API 的 flagged 是不是最终处罚结果?

不是。它是整体风险信号,最终处罚还要结合类别、语境、业务规则和申诉流程。

误报样本应该怎样回流?

保留类别评分、模型版本和人工结论,脱敏后加入标注集,定期重新检查复核线。

审核服务失败时能否默认放行?

不能一概而论。高风险场景应进入保守的待处理状态,低风险场景也要记录失败并告警。

上线前检查清单

  • 是否同时保存了 flaggedcategoriescategory_scores
  • 是否存在人工复核状态,而不是只有通过与拒绝?
  • 模型升级后是否用同一批标注样本重新检查误报和漏报?
  • 申诉、回放和审计记录是否能关联到原始请求?

审核 API 的价值不在于替业务做完所有决定,而在于把风险类别和评分稳定地交给后续策略。把整体标记、类别证据和业务动作拆开,误报就有了可回放的入口,拒答也不会因为一条布尔字段被无限放大。

声明:本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>