首页使用帮助OpenAI Moderation API
HELP / OPENAI MODERATION

OpenAI Moderation API 怎么用?

服务端调用 POST /v1/moderations,优先使用 omni-moderation-latest;先读 flagged,再结合 categories、category_scores 和 category_applied_input_types决定拦截、人工复核或允许。文本与图片可以一起审核,但分数必须用真实业务样本持续校准。

主关键词:OpenAI Moderation API 怎么用文本与图片阈值校准更新:2026-10-31
先给结论

不要把“分数大于某个固定值”当成完整内容安全方案。默认先用官方 flagged 做第一层判断,再按类别、输入类型和业务风险分流;高风险动作在审核完成前不要执行。自定义阈值要用代表性评测集校准,并在模型或策略变化后重新验证。

官方资料(2026-10-31 核对):Moderation guide · Create moderation reference · omni-moderation-latest model · Deprecations

Moderation API 能审核什么?

OpenAI 当前把 Moderation 定位为有害内容分类能力。你可以单独把文本或图片提交到 Moderation 端点,也可以在生成请求中附带审核配置,取得输入与完整输出的审核信号。当前 omni-moderation-latest 支持文本和图片,不支持音频;Moderation 端点当前免费,图片文件上限为 20 MB。

输入支持情况注意
文本支持可传字符串、字符串数组或 text 对象
图片支持使用 image_url,可传远程 URL 或 Base64 Data URL;当前上限 20 MB
音频不支持不要把语音文件直接交给 Moderation 模型
流式增量不逐 delta 返回审核结果生成请求附带的审核分数要等完整输出可用

若是已知或疑似 CSAM,不要发送给 Moderation API。官方明确说明它不是 CSAM 检测或处置系统,也不能替代专门的儿童安全保障与报告流程。

最小可用调用:先在服务端审核文本

API Key 必须保存在服务端环境变量中。下面示例把用户文本提交给官方 SDK,读取第一条结果;生产代码还要补充鉴权、超时、日志脱敏和错误策略。

import OpenAI from "openai";

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY
});

const moderation = await openai.moderations.create({
  model: "omni-moderation-latest",
  input: userText
});

const result = moderation.results[0];

if (result.flagged) {
  return {
    action: "review",
    categories: result.categories
  };
}

return { action: "allow" };

端点是 POST /v1/moderations。API Reference 当前仍列出旧的 text-moderation-* 名称,但官方弃用页显示这些旧模型已在 2025-10-27 停用;新实现应使用 omni-moderation-latest,若需要稳定行为可评估官方列出的快照。

文本和图片怎样一起审核?

多模态 input 是一个对象数组。文本项使用 type: "text",图片项使用 type: "image_url"。远程图片地址必须能被服务读取;Base64 图片使用 Data URL。不要只看总的 flagged,还要确认每个类别实际应用到 text、image 还是两者。

const moderation = await openai.moderations.create({
  model: "omni-moderation-latest",
  input: [
    {
      type: "text",
      text: userCaption
    },
    {
      type: "image_url",
      image_url: {
        url: "https://example.com/upload.png"
      }
    }
  ]
});

const result = moderation.results[0];
console.log({
  flagged: result.flagged,
  categories: result.categories,
  scores: result.category_scores,
  appliedTo: result.category_applied_input_types
});

四个结果字段应该怎样读?

字段含义推荐用途不要误解为
flagged至少一个类别被模型标记第一层分流你的最终法律或业务结论
categories每个类别的布尔判断决定阻断、复核或提示类型所有类别都适用于所有输入
category_scores0 到 1 的类别置信分数评测、分级路由和人工队列排序可永久通用的概率或固定阈值
category_applied_input_types该类别分数适用于 text、image 或两者解释多模态结果每个类别都支持图片

当前类别包括 harassment、hate、illicit、self-harm、sexual、violence 及部分细分类别。harassment、hate、illicit 与 sexual/minors 等类别是文本限定;self-harm、sexual、violence 及其部分细分类别支持文本和图片。纯图片输入遇到文本限定类别时,官方说明会返回 0 分。

怎样设计阈值和人工复核?

  1. 先定义动作,不先拍脑袋定数字:区分允许、提示、限制功能、人工复核、拒绝与紧急处置。
  2. 按类别与场景拆开:公开发布、私聊、搜索、工具执行和支付动作的容错成本不同。
  3. 准备代表性评测集:包含正常内容、边界内容、明确违规内容与常见语言变体,并记录人工标签。
  4. 计算误报与漏报:按类别查看 precision、recall 和业务损失,不用一个阈值覆盖全部类别。
  5. 记录模型标识:若依赖分数阈值,升级模型或切换快照后重新跑评测。
  6. 保留复核和申诉:尤其是高影响账户动作,不应只凭一次自动分类直接永久处罚。
为什么要重新校准?

官方说明 Moderation 端点的底层模型会持续升级,因此依赖 category_scores 的自定义策略可能需要随时间重新校准。若你必须保持稳定阈值,应结合官方快照、变更管理和回归测试。

输入审核、输出审核和工具调用怎样排顺序?

阶段推荐位置主要目的
用户输入模型调用或工具执行之前避免明显高风险请求进入后续链路
模型完整输出向用户展示或持久发布之前处理生成内容中的风险
工具参数工具执行之前审核不能替代 Schema、权限与业务规则校验
工具结果回传模型或展示之前减少外部内容直接暴露的风险

生成 API 的内联审核会给输入和完整输出返回审核容器,但模型仍会正常生成;应用必须在展示或执行下游动作前读取结果。工具调用场景中,官方说明对话内容里的工具参数与工具输出可以被覆盖,但工具名、描述、Schema 和 response-format Schema 不在审核范围内。因此 Function Calling 仍需参数校验、最小权限和显式授权。

流式输出尤其要谨慎:审核分数在完整输出后才到达,不会随每个 partial delta 返回。如果界面立即展示每个增量,用户可能先看到尚未审核的内容;可按风险选择短缓冲、完整输出后展示或使用其他分层策略。具体流式状态机见 OpenAI API Streaming 指南。

审核失败时怎样降级?

以下是应用设计建议,不是 OpenAI 为所有业务规定的统一规则:

  • 高风险写操作:审核超时或返回错误时停止动作、限制能力或转人工,不把“没有结果”当作“安全”。
  • 低风险只读场景:可根据风险承受能力提供受限降级,但要明确哪些内容和功能仍被禁止。
  • 统一错误模型:为超时、429、5xx、无效输入和图片抓取失败分别记录状态,不在日志中保存完整敏感正文。
  • 监控:跟踪审核调用成功率、延迟、flagged 比例、各类别分布、人工推翻率和模型版本。
  • 演练:模拟 Moderation 服务不可用、图片过大、远程 URL 失效和模型行为变化。

API 请求本身的 429、500、503 和超时仍按 429 速率限制与 5xx/超时指南处理;不要无限重试,也不要在浏览器暴露 Key。

上线前检查清单

  • 服务端调用 /v1/moderations,API Key 未进入前端、Git 或日志。
  • 使用 omni-moderation-latest 或经过评测的官方快照,不再依赖已停用的 text-moderation 模型。
  • 文本、图片和混合输入均有真实样本测试;图片大小与抓取失败有明确错误。
  • 代码同时读取 flagged、categories、category_scores 与 category_applied_input_types。
  • 每个类别都有允许、复核、拒绝或降级动作,且动作与风险相称。
  • 自定义阈值有版本化评测集、误报/漏报指标和重新校准计划。
  • 输入、输出、工具参数与工具结果的检查位置清楚,审核不替代权限和 Schema 校验。
  • Streaming 不会在完整审核结果到达前无条件展示高风险增量。
  • 超时、429、5xx 和审核错误有 fail-closed、受限降级或人工路径。
  • 高影响决定保留人工复核、申诉、审计与隐私最小化。

常见问题

OpenAI Moderation API 是做什么的?

它用于识别文本或图片中可能有害的内容。应用可以把结果用于拦截、路由人工复核或账户干预,但结果只是策略信号,不等于你的业务规则,也不能替代人工申诉和高风险场景的专门保障。

OpenAI Moderation API 怎么调用?

服务端使用 API Key 向 POST /v1/moderations 发送 model 和 input。当前官方推荐 omni-moderation-latest;input 可以是字符串、字符串数组,或由 text 与 image_url 对象组成的多模态数组。

flagged、categories 和 category_scores 分别是什么意思?

flagged 表示是否至少有一个类别被标记;categories 给出每个类别的布尔判断;category_scores 是 0 到 1 的模型置信分数。先用 flagged 做第一层判断,再按业务风险读取类别、分数和适用输入类型。

Moderation API 支持图片和音频吗?

omni-moderation-latest 支持文本和图片,不支持音频。官方当前说明图片文件上限为 20 MB;某些类别只支持文本,纯图片输入在这些类别上会返回 0 分,应同时查看 category_applied_input_types。

可以把 category_scores 设成固定阈值长期使用吗?

不建议把一次设定的阈值永久不变。OpenAI 会升级底层审核模型,官方提醒依赖 category_scores 的自定义策略可能需要重新校准。应使用代表性评测集、按类别设置策略、记录模型版本并定期复测。

应该审核用户输入还是模型输出?

高风险产品通常同时考虑输入和输出:输入审核可在模型调用或工具执行前阻断明显风险,输出审核可在展示前处理生成内容。具体是否拦截、复核或允许,应根据场景、法规和误判成本制定,不能只照搬统一规则。

Moderation 请求失败时应该放行还是拒绝?

没有适用于所有产品的统一答案。高风险动作更适合停止、降级或转人工;低风险只读场景可根据风险承受能力设计受限降级。无论选择哪种路径,都要设置超时、记录不含敏感正文的错误、监控失败率,并通过故障演练验证。

本文核对日期为 2026-10-31。模型、类别、费率、限制和字段可能调整,上线前请再次读取官方 Moderation 指南、模型页与 API Reference。

Moderation 不直接审核音频

音频应用应先按专用工作流转录,再决定如何审核文本与业务操作;转录、实时字幕和 TTS 边界见 OpenAI Audio API 教程。

审核不能替代生成质量评测

生成或编辑图片仍需检查参考图授权、提示遵循、品牌与安全边界;Images 端点、模型和评测见 OpenAI Images API 教程。