OpenAI Moderation API
で有害コンテンツを検出する
ユーザー投稿を受け付けるサービスや、AIで文章を生成するサービスを運用していると、「有害な内容をどう機械的に見つけるか」という課題に必ず突き当たります。すべての投稿や生成結果を人が読むのは現実的ではありません。OpenAIのModeration(モデレーション)APIは、テキストと画像から有害な内容を検出できる無料のAPIです。
この記事では、検出できる13カテゴリとスコアの読み方、2つの使い方、安全に運用するためのベストプラクティスまでを、OpenAIの公式ドキュメントを一次情報として整理します。Azure AI Content SafetyやNeMo Guardrails・Guardrails AIといったほかのコンテンツフィルタとの比較は、別記事で詳しく扱います。AIで生成した文章の品質を業務で担保する考え方は、AI出力の品質管理でも扱っています。
OpenAI Moderation APIは、omni-moderation-latest モデルでテキストと画像を13のカテゴリに分類し、各カテゴリの真偽(categories)と確信度スコア(category_scores、0〜1)を無料で返します。使い方は、単独の入力を分類する方法と、生成テキストと同時にスコアを取得する方法の2つです。
重要なのは、結果を自動ブロックの判定ではなく、アプリのポリシーに沿った判断材料として扱うことです。flagged を一次判定にしつつ、スコアと用途に応じてブロック・人間レビュー・記録を振り分けます。モデレーションは安全対策の一部で、敵対的テスト・人間レビュー・入力制限などと組み合わせて初めて機能します。
01.結論:OpenAI Moderation APIとは
OpenAI Moderation APIは、入力されたテキストや画像が「有害なカテゴリに当てはまるか」を判定して返すAPIです。OpenAIの公式ドキュメントによると、omni-moderation-latest モデルがテキストと画像の入力を受け取り、ヘイト・ハラスメント・暴力・性的表現・自傷など13のカテゴリについて、それぞれ違反フラグと確信度スコアを計算します。音声は分類できません。
判定結果は、コンテンツのフィルタリング、レビューへの振り分け、繰り返し違反するアカウントへの対応など、サービス側のポリシーを実行するために使えます。エンドポイントは無料で、画像は1枚あたり最大20MBまで扱えます。
| 項目 | 内容 |
|---|---|
| モデル | omni-moderation-latest(テキスト+画像対応) |
| 料金 | モデレーション専用エンドポイントは無料 |
| 入力 | テキスト・画像(画像は1枚最大20MB)。音声は非対応 |
| カテゴリ数 | 13(テキスト専用と、テキスト+画像対応が混在) |
| 返る値 | flagged(全体判定)/categories(カテゴリ別の真偽)/category_scores(0〜1の確信度)/category_applied_input_types(適用された入力種別) |
| 使い方 | ①単独入力の分類 ②生成テキストと同時にモデレーション |
OpenAIは安全性のベストプラクティスの中で、Moderation APIを「不適切な内容の頻度を下げるために自由に使える無料ツール」と位置づけています。提供元から見ると、APIの上に作られるサービスが安全に運用されるほど、モデルやプラットフォーム全体の不正利用を抑えられます。開発者に広くコンテンツのスクリーニングを促すこと自体が、OpenAIの安全性の目的にかなうため、判定専用のエンドポイントを無料で開放していると整理できます(料金設計の詳しい理由はOpenAIから公表されていません)。
無料は導入のハードルを下げますが、無料ゆえに気をつける点もあります。
- 提供条件は変わり得る:無料の判定ツールに、有償サービスのようなSLAや手厚いサポートが伴うとは限りません。実際、無料で広く使われたGoogleのPerspective APIは提供終了が告知されています(コンテンツモデレーションツールの比較で扱います)。1つの無料APIに依存しきらず、差し替えできる作りにしておくと安全です。
- 判定の基準が動く:OpenAIはモデルを継続的に改良すると明記しており、スコアの分布は時間とともに変わり得ます。閾値は定期的に見直します。
- データはOpenAIのサーバーで処理される:判定対象のテキスト・画像はOpenAIに送信されます。OpenAIのデータに関するドキュメントによると、API経由のデータは既定ではモデルの学習には使われません(明示的にオプトインした場合を除く)。ただし不正利用の監視のために入力・出力が最大30日ほど保持されてから削除されます(対象や用途によってはゼロデータ保持=ZDRを申請できます)。機密情報を含む場合は、社内のデータ取り扱い方針と突き合わせます。
- 利用上限がかかる場合がある:レート制限など利用上の上限により、大量に処理するときは設計で吸収する必要があります。
02.Moderation APIの全体像と2つの使い方
OpenAIのドキュメントは、モデレーションのワークフローを大きく2つに分けています。生成と同時にスコアが欲しいのか、生成とは独立に入力だけを判定したいのかで、使う口が変わります。
| ワークフロー | こんなときに使う |
|---|---|
| 生成コンテンツのモデレーション | Responses API や Chat Completions で文章を生成し、その入力と出力のモデレーションスコアも同時に欲しいとき |
| 単独入力の分類 | モデルに文章を生成させず、テキストや画像だけを判定したいとき(ユーザー投稿の監視など) |
どちらの場合も返ってくるカテゴリの構造は同じで、flagged で一次判定し、categories と category_scores で詳細を見るという読み方は共通です。違うのは「呼び出し方」と「課金」です。単独入力の分類はモデレーション専用エンドポイントなので無料、生成と同時のモデレーションは生成側のトークン課金が発生します。
生成レスポンスをストリーミング(逐次表示)する場合、モデレーションのスコアは生成出力が出そろった後に届きます。途中の差分(delta)には含まれません。逐次表示しながら危険な出力を途中で止めたい場合は、表示の前に別途モデレーションを挟むなどの設計が必要です。
03.検出できる13カテゴリと対応する入力
モデレーションエンドポイントが判定する13カテゴリは次のとおりです。「テキストのみ」と書いたカテゴリは画像入力に対応せず、画像だけを送るとそのカテゴリのスコアは0が返ります。
| カテゴリ | 内容 | 対応入力 |
|---|---|---|
| harassment | 対象を問わず、嫌がらせを表現・扇動・助長する内容 | テキストのみ |
| harassment/threatening | 暴力や重大な危害を含む嫌がらせ | テキストのみ |
| hate | 人種・性別・民族・宗教・国籍・性的指向・障害・カーストに基づく憎悪 | テキストのみ |
| hate/threatening | 対象集団への暴力や重大な危害を含む憎悪表現 | テキストのみ |
| illicit | 違法行為のやり方を助言・指示する内容(例:万引きの手口) | テキストのみ |
| illicit/violent | illicit に加え、暴力や武器の入手に言及する内容 | テキストのみ |
| self-harm | 自殺・自傷・摂食障害などの自傷行為を助長・描写する内容 | テキスト+画像 |
| self-harm/intent | 話者自身が自傷に及んでいる・及ぶ意図を述べる内容 | テキスト+画像 |
| self-harm/instructions | 自傷行為を促す、またはやり方を指示・助言する内容 | テキスト+画像 |
| sexual | 性的興奮を意図した内容や性的サービスの宣伝(性教育・健康は除く) | テキスト+画像 |
| sexual/minors | 18歳未満が関わる性的内容 | テキストのみ |
| violence | 死・暴力・身体的傷害を描写する内容 | テキスト+画像 |
| violence/graphic | 死・暴力・身体的傷害を露骨に描写する内容 | テキスト+画像 |
カテゴリの定義は更新されることがあり、OpenAIはモデレーションの基盤モデルを継続的に改良すると明記しています。そのため、category_scores を使った独自の閾値ポリシーは、時間が経つと再調整(recalibration)が必要になる可能性があります。カテゴリの正確な一覧と定義は、OpenAIのモデレーションガイドを一次情報として確認してください。
04.レスポンスの読み方(flagged・scores)
モデレーションのレスポンスは、カテゴリの真偽とスコアを持つオブジェクトを返します。OpenAIのドキュメントが挙げている、戦争映画の1フレーム(暴力を含む画像)に対する出力例を抜粋すると、次のようになります。
{
"id": "modr-970d409ef3bef3b70c73d8232df86e7d",
"model": "omni-moderation-latest",
"results": [
{
"flagged": true,
"categories": {
"violence": true,
"violence/graphic": false,
"harassment": false
// ...(ほかのカテゴリは省略)
},
"category_scores": {
"violence": 0.8599265510337075,
"violence/graphic": 0.37701736389561064,
"harassment": 0.0011643905680426018
// ...(ほかのカテゴリは省略)
},
"category_applied_input_types": {
"violence": ["image"],
"violence/graphic": ["image"]
// ...
}
}
]
}この例では violence のスコアが 0.86 と高く、カテゴリも true、全体の flagged も true になっています。各フィールドの意味は次のとおりです。
| フィールド | 意味 |
|---|---|
| flagged | 内容が有害の可能性ありとモデルが判定したら true、そうでなければ false。一次判定に使う |
| categories | カテゴリごとの違反フラグ(真偽)の辞書。違反と判定したカテゴリが true |
| category_scores | カテゴリごとの確信度スコア(0〜1)。高いほどそのカテゴリに該当するという確信が強い |
| category_applied_input_types | そのカテゴリのスコアが、どの入力種別(text/image)に適用されたかを示す |
OpenAIは、まず flagged で一次判定し、その後 categories と category_scores をログ・振り分け・監査証跡・人間レビュー用のキューに使うことを勧めています。注意点として、有害な内容を「断る」回答や安全に配慮した応答でも、その文章が有害な話題に触れていれば flagged が立つことがあります。スコアはあくまで判断材料で、ブロックの自動判定そのものではありません。
モデレーションのステップが完了できなかった場合、入力側または出力側のモデレーション欄に、スコアではなくエラーが入ることがあります。スコアを読む前に結果の型を確認し、モデレーション自体が失敗したケースを分岐させておくと、判定漏れを防げます。
05.単独入力を分類する(標準的な使い方)
最もよく使うのが、モデルに文章を生成させず、テキストや画像だけを判定する使い方です。ユーザー投稿の監視や、AIで生成済みの文章のチェックに向きます。OpenAIのライブラリ(Python)では、モデレーションエンドポイントを次のように呼び出します。
from openai import OpenAI
client = OpenAI()
response = client.moderations.create(
model="omni-moderation-latest",
input="ここに判定したいテキストを入れる",
)
result = response.results[0]
print(result.flagged) # 全体として有害と判定されたか(True / False)
print(result.categories) # カテゴリごとの真偽
print(result.category_scores) # カテゴリごとの確信度(0〜1)画像も判定したいときは、入力をテキストと画像のリストとして渡します。画像は URL か、Base64 でエンコードしたデータとして渡せます。
response = client.moderations.create(
model="omni-moderation-latest",
input=[
{"type": "text", "text": "判定したいテキスト"},
{
"type": "image_url",
"image_url": {"url": "https://example.com/image.png"},
},
],
)画像を含めた場合は、category_applied_input_types を見ると、どのカテゴリのスコアが画像由来でどれがテキスト由来かを切り分けられます。なお、self-harm 系・sexual・violence 系以外のカテゴリはテキスト専用なので、画像だけを送ってもそれらのスコアは0です。
TypeScript(Node.js)でも、公式SDKの型定義を使って同じように呼び出せます。アプリのクライアントクラスに、共通のモデレーション用メソッドを1つ用意しておくと、入力チェックと出力チェックの両方から呼べます。
import OpenAI from "openai";
const openai = new OpenAI();
// 単一テキストでも文字列配列でも受け取れるようにしておく
async function moderateText(input: string | string[]) {
const result = await openai.moderations.create({
model: "omni-moderation-latest",
input,
});
return result;
}
// 使い方:flagged を一次判定にし、カテゴリで詳細を見る
const res = await moderateText("チェックしたいテキスト");
if (res.results[0].flagged) {
const categories = res.results[0].categories;
if (categories.harassment) {
// ハラスメントとして検出されたときの処理
}
}複数のテキストをまとめて判定したいときは、入力を配列で渡します。results は入力と同じ順序で返るので、インデックスで対応づけます。コメント一覧やインポートした記事群の一括チェックに向きます。
const texts = ["テキスト1", "テキスト2", "テキスト3"];
const res = await moderateText(texts);
res.results.forEach((r, index) => {
if (r.flagged) {
// texts[index] が有害と判定された
}
});- 性能:大量に判定するときは、配列でまとめて渡す・
Promise.allで並列化する・同じテキストの重複判定をキャッシュで避ける、の3点が効きます。 - プライバシー:判定対象のテキストはOpenAIのサーバーで処理されます。機密情報を含む文章を送るときは、送ってよいデータかを社内の取り扱い方針と突き合わせて確認します。
- 誤検知:安全な内容を有害と判定する誤検知(False Positive)と、有害な内容を見逃す取りこぼし(False Negative)の両方が起こり得ます。重要な判定には人間レビューを組み合わせます。
- エラー処理:API呼び出しは失敗し得ます。例外を捕捉して監視(Sentryなどのエラー監視)に送り、判定不能のときの既定動作(保留にするか通すか)を決めておきます。
06.生成テキストと同時にモデレーションする
Responses API や Chat Completions で文章を生成し、その入力・出力のモデレーションスコアも一緒に欲しい場合は、生成リクエストにトップレベルの moderation オブジェクトを渡します。これにより、別途モデレーションを呼ばなくても、生成と同時にスコアが返ります。
response = client.responses.create(
model="gpt-5.5",
input="ユーザーからの入力",
moderation={"model": "omni-moderation-latest"},
)
# 入力側・出力側それぞれの moderation_result を確認する
print(response.moderation.input)
print(response.moderation.output)モデルの生成自体は通常どおり行われます。OpenAIは、ユーザーに出力を見せたり後続の処理をしたりする前に、モデレーション結果を確認するよう勧めています。返ってくるカテゴリの構造は単独分類のときと同じです。ツール呼び出し(function calling)を使うリクエストでは、会話の内容に現れるツール呼び出しの引数とツール出力はモデレーションの対象になりますが、ツール名・ツールの説明・スキーマは対象外です。
07.スコアを運用ポリシーに落とす
モデレーションのスコアは「判断材料」であって、それ自体がブロックの可否を決めるものではありません。実務では、カテゴリと用途ごとに閾値を決め、スコアの帯域に応じて打ち手を分けます。たとえば次のような3段階の振り分けが基本形です。
| スコアの帯域 | 打ち手 | 考え方 |
|---|---|---|
| 高(明確に違反) | 自動でブロック・非公開にする | 誤検知のコストより、表示してしまうリスクが大きい領域 |
| 中(グレー) | 人間レビューのキューへ送る | 機械では判断しきれない。文脈を人が確認する |
| 低(問題なし) | 通過させ、スコアを記録する | 後から閾値を見直すための監査証跡として残す |
閾値は、カテゴリの重大さと、サービスがどれだけ誤検知(本来問題ない投稿をブロックすること)を許容できるかで変わります。子ども向けサービスや高リスク領域では sexual/minors や self-harm の閾値を低めにして取りこぼしを減らし、一般的なコミュニティでは誤検知を抑えるためにグレーの帯域を広めにとる、といった調整をします。
グレー帯を人間レビューに回す設計は、AI出力の品質管理で使う Human-in-the-Loop(HITL: 人間が確認に入る仕組み)と同じ考え方です。機械の判定を一次フィルタにして、人の確認が必要なものだけを人に回します。
- 01一次判定(機械)
投稿・生成物の全件をモデレーションAPIに通し、カテゴリごとにスコアを付ける
- 02高・低は自動処理
高=自動ブロック、低=通過(スコアは記録)。機械で完結する部分
- 03グレー帯だけ人間レビュー
判断が難しい中間帯のみ、人の確認キューへ回し、文脈を見て可否を決める
- 04記録して閾値に反映
レビュー結果を残し、誤検知・取りこぼしの傾向を閾値や設計の見直しに戻す
人がすべてを読むのではなく、機械の判定を一次フィルタにして、確認が必要なものだけを人に回す
08.安全に使うためのベストプラクティス
OpenAIの安全性のベストプラクティスは、モデレーションAPIを「有害コンテンツの頻度を下げる一手段」と位置づけ、ほかの対策と組み合わせるよう案内しています。主な項目は次のとおりです。
| 対策 | 内容 |
|---|---|
| 敵対的テスト(red-teaming) | 「前の指示を無視して〜」のようなプロンプトインジェクションを含め、壊そうとする入力で広くテストする |
| 人間によるレビュー(HITL) | 可能な限り、実運用の前に人が出力を確認する。コード生成や高リスク領域では特に重要 |
| プロンプト設計 | 話題やトーンを制約し、望まない出力が出にくいようにする。良い例を数件示すと方向づけしやすい |
| Know Your Customer(KYC) | 登録・ログインを必須にし、既存アカウント連携やクレジットカード・本人確認でリスクを下げる |
| 入力・出力の制限 | 入力できる文字数を絞ってプロンプトインジェクションを避け、出力トークンを制限して悪用を減らす |
| 報告窓口 | 不適切な挙動をユーザーが簡単に報告でき、人が監視・対応する手段を用意する |
| 限界の理解と共有 | ハルシネーション・偏り・不快な出力などの限界を把握し、利用者の期待を適切に調整する |
入力を自由記述ではなく、検証済みの選択肢(ドロップダウンなど)に絞れる場面では、それだけで悪用の余地を狭められます。出力も、ゼロから生成するより、検証済みの素材から選んで返すほうが安全な場面があります(たとえば問い合わせを、その場で回答を作るのではなく、最も近い既存のサポート記事へ案内する)。
09.OpenAIによる違反対応と透明性
モデレーションは自社サービス側の話ですが、OpenAI自身もプラットフォームとして、規約やポリシーに反する内容を監視・対応しています。OpenAIの透明性とコンテンツモデレーションのページによると、分類器・推論モデル・ハッシュ照合・ブロックリストなどの自動システムによる事前検知と、ユーザーからの報告、人によるレビューを組み合わせて監視しています。
規約違反が見つかった場合の対応には、アカウントの制限・停止、警告、特定コンテンツの共有制限、検索結果のブロック、GPTの公開制限などがあります。OpenAIは、法的要件・違反の重大さ・過去の違反歴などを考慮して措置を決めるとしています。措置に不服がある場合は、報告や異議申し立て(trustandsafety@openai.com など)の窓口が用意されています。
OpenAIは、ユーザーを一意に識別する safety_identifier を送ると、不正利用の検知が速くなり、問題があったときに一人の悪用が組織全体のアクセスを止めてしまう事態を避けやすいと説明しています。識別子はメールやユーザー名をハッシュ化した値を使います。あわせて、APIキーが漏れた疑いがあれば速やかに無効化して再発行することも案内されています。
10.メディア運用・コンテンツ制作での使いどころ
モデレーションAPIは、コンテンツを扱うメディア運用の現場でそのまま役立ちます。代表的な使いどころを整理します。
- ユーザー投稿(UGC)の投稿監視: コメント欄・レビュー・フォーラムなど、ユーザーが書き込む場で、公開前または公開直後にスクリーニングし、明確な違反は自動で非表示、グレーは人間レビューへ回します。
- AI生成記事の公開前チェック: AIで下書きした記事を公開する前に、ヘイト・ハラスメント・暴力・性的表現などのカテゴリで一次スクリーニングし、機械的に弾けるリスクを先に落とします。
- 画像の事前確認: 記事やバナーに使う画像を、暴力・性的・自傷の観点で機械チェックし、人の目視確認の前にあたりをつけます(テキスト専用カテゴリは画像では判定されない点に注意)。
- 問い合わせ・チャットの入口での確認: サイトに設置したチャットやAIアシスタントへの入力を判定し、悪用や不適切な依頼の比率を把握・抑制します。
ただし、モデレーションが見るのは「有害カテゴリ」であって、事実の正しさ・著作権・景表法やステマ規制までは見ません。AIで書いた記事を公開する場合、誇張表現や根拠のない実績表示、出典の欠落といった表現・法務面のチェックは別に必要です。この観点はコンテンツ制作の法務リスクで扱っています。
AI出力の品質管理|ハルシネーション・出典確認・人間レビューの実務チェック
モデレーションが見ない「事実の正しさ・出典・最終責任」を、誰がどの段階で確認するか。AI生成物を業務で使うためのレビュー手順を整理しています。
11.ほかのコンテンツフィルタとの違い
コンテンツの安全対策に使えるのは、OpenAI Moderation APIだけではありません。大きく分けて、クラウド事業者が提供する「判定API」(Azure AI Content Safety・Amazon Bedrock Guardrailsなど)と、LLMの入出力にチェックを挟む「ガードレール用のフレームワーク」(NVIDIA NeMo Guardrails・Guardrails AIなど)があります。役割が違うので、目的に応じて使い分けるか、組み合わせます。
OpenAI Moderation APIは、無料で導入が軽い判定APIです。まずOpenAIで生成しているなら、Moderation APIから始め、必要に応じてガードレール用フレームワークでチェックを体系化していくと、無理なく広げられます。各ツールのカテゴリ・対応入力・料金・拡張性を並べた比較と、用途別の選び方・組み合わせ方は、別記事で扱っています。
投稿監視に使うコンテンツモデレーションツールの比較|投稿監視のAI化
OpenAI Moderation API・Azure AI Content Safety・Amazon Bedrock Guardrails・Google Perspective API・NeMo Guardrails・Guardrails AIを、判定カテゴリ・対応入力・料金・拡張性で比較し、用途別の選び方と組み合わせ方を整理しています。
12.導入の進め方
モデレーションは、いきなり全自動でブロックを始めると誤検知のクレームにつながります。スコアを記録するところから始め、自社のデータで閾値を確かめてから自動化に進むのが安全です。
- 01記録から始める
まずブロックせず、入力・出力にスコアを付けてログに残す
- 02閾値を見極める
自社データでカテゴリごとの分布を見て、誤検知と取りこぼしの境目を探す
- 03振り分けを設計
高=自動ブロック、中=人間レビュー、低=通過の3段階に分ける
- 04人間レビューを接続
グレー帯のキューと、判断基準・差し戻し手順を用意する
- 05定期的に見直す
モデル更新や運用実態に合わせて閾値を再調整する
モデルは継続的に改良されるため、閾値は一度決めて終わりにしない
あわせて、safety_identifier をリクエストに含める、入力文字数と出力トークンを制限する、報告窓口を用意する、といったベストプラクティスを最初の設計に織り込んでおくと、後から作り直す手間を減らせます。
13.注意点と限界
モデレーションAPIは強力ですが、できないこと・気をつけることもあります。導入前に押さえておきます。
- 有害カテゴリ以外は見ない: 事実の正しさ(ハルシネーション)、著作権、景表法・ステマ規制、ブランド毀損などは判定対象外です。これらは別の品質管理・法務チェックで担保します。
- スコアは判断材料であって判決ではない:
flaggedが立っても、安全に配慮した応答が有害な話題に触れて反応しただけ、という場合もあります。自動ブロックの可否は用途に応じて設計します。 - 閾値は再調整が要る: 基盤モデルは継続的に改良されるため、
category_scoresに依存した独自ポリシーは、時間が経つと挙動が変わることがあります。 - 入力種別の対応に差がある: テキスト専用カテゴリは画像では判定されません。音声は分類できません。扱うコンテンツの種類とカテゴリの対応を確認します。
- 日本語の精度は自社データで確かめる: 言語や文脈によって検出の精度は変わり得ます。本番に入れる前に、自社で扱う実データで誤検知・取りこぼしを確認してください。
モデレーションは、人がすべてを読む代わりに機械で一次スクリーニングする仕組みです。これだけで安全性を担保できるものではなく、敵対的テスト・人間レビュー・入力制限・報告窓口といった対策とセットで初めて機能します。高リスクの領域ほど、人による確認を省略しない設計にしてください。
TANTOU ─ AI×人間のハイブリッドで、安全で品質の高いコンテンツを
独自開発のAI SEOエンジンで、検索意図リサーチから記事制作・CMS入稿までを一貫して提供します。AIで量産しつつ、モデレーション・出典確認・法務チェックと人間レビューを組み合わせ、安全で品質の高い記事を低コストで継続します。
14.よくある質問(FAQ)
OpenAI Moderation APIは無料ですか?
モデレーションのエンドポイント(omni-moderation-latest)は無料で使えるとOpenAIの公式ドキュメントに明記されています。画像ファイルは1枚あたり最大20MBまで扱えます。ただし無料なのはモデレーション専用エンドポイントで、生成(Responses APIやChat Completions)と同時にスコアを取得する場合は、生成側の通常のトークン課金が発生します。
flagged が true なら必ずブロックすべきですか?
いいえ。OpenAIはモデレーション結果を「自動的なブロック判定」ではなく、アプリのポリシーに沿った判断材料(signal)として扱うよう案内しています。flagged は一次判定として使い、category_scores とカテゴリごとの真偽を見て、ブロック・人間レビューへの送り・記録のどれにするかを決めます。閾値はカテゴリごと・用途ごとに調整します。
画像も判定できますか?
できます。omni-moderation-latest はテキストと画像の両方を入力に取れます。ただし画像に対応するのは self-harm 系・sexual・violence・violence/graphic など一部のカテゴリで、harassment や hate、illicit などはテキスト専用です。画像だけを送ると、テキスト専用カテゴリのスコアは0が返ります。音声は分類できません。
safety_identifier は必須ですか?
必須ではありませんが、個々のユーザーがモデルとやり取りする製品では推奨されています。安定した識別子を safety_identifier として送ると、OpenAIが不正利用を検知しやすくなり、問題があったとき組織全体ではなく該当ユーザー単位で対処しやすくなります。ユーザー名やメールはそのまま送らず、ハッシュ化した値やセッションIDを使います。
Moderation APIだけで安全性は担保できますか?
モデレーションAPIだけでは不十分です。OpenAIは、敵対的テスト(red-teaming)、人間によるレビュー(HITL)、プロンプト設計、入力・出力の制限、ユーザー登録(KYC)、問題の報告窓口など、複数の対策を組み合わせるよう案内しています。モデレーションは「有害コンテンツの頻度を下げる」一手段で、運用全体の設計とセットで使います。
AIが書いた記事の公開前チェックに使えますか?
使えます。生成した文章をモデレーションエンドポイントに通せば、ヘイト・ハラスメント・暴力・性的表現などのカテゴリで機械的に一次スクリーニングできます。ただし事実の正しさ(ハルシネーション)や著作権、景表法・ステマ規制までは見ません。これらは別の品質管理・法務チェックと人間レビューで担保します。
15.まとめ
OpenAI Moderation APIは、テキストと画像を13カテゴリで判定し、確信度スコアを無料で返すAPIです。単独入力の分類と、生成テキストと同時のモデレーションという2つの使い方があり、ユーザー投稿の監視やAI生成記事の公開前チェックにそのまま使えます。
要点は、結果を自動ブロックの判定ではなく、ポリシーに沿った判断材料として扱うことです。スコアの記録から始め、自社データで閾値を確かめ、高=自動ブロック・中=人間レビュー・低=通過の3段階に振り分けます。そして、敵対的テスト・人間レビュー・safety_identifier・入力制限・報告窓口といった対策と組み合わせて初めて、安全対策として機能します。まずOpenAIで生成しているなら、導入が軽いModeration APIから着手し、必要に応じてガードレール用フレームワークでチェックを体系化していくと着実に進められます。

