wheatandcatの開発ブログ

技術系記事を投稿してます

OpenAIのModeration APIは雑にレビューの書き込みのチェックが出来て良い

概要

趣味で作成しているサービスでレビュー機能を実装する機会があった。
その際に初めて OpenAI の Moderation API を使ってみたが、思いのほか使い勝手が良いと感じたので紹介。

Moderation APIとは?

developers.openai.com

OpenAI が提供する APIで、テキストまたは画像に対して危険・不適切な内容が含まれていないかを判定できる。

判定したい情報を渡すと、以下のようなレスポンスが返ってくる。
カテゴリーごとにフラグが立ち、どの分類で問題があるかが分かる。

※以下の例では violence = true となっており、暴力的な内容が含まれているため NG 判定となる。

{
  "id": "modr-970d409ef3bef3b70c73d8232df86e7d",
  "model": "omni-moderation-latest",
  "results": [
    {
      "flagged": true,
      "categories": {
        "sexual": false,
        "sexual/minors": false,
        "harassment": false,
        "harassment/threatening": false,
        "hate": false,
        "hate/threatening": false,
        "illicit": false,
        "illicit/violent": false,
        "self-harm": false,
        "self-harm/intent": false,
        "self-harm/instructions": false,
        "violence": true,
        "violence/graphic": false
      }
    }
  ]
}

モチベーション

  • 簡単なレビュー機能を実装したい
  • そこまで厳密なフィルタリングは不要だが、ノーガードで公開するのは怖い
  • 運用コストは出来るだけ抑えたい

上記の条件で調べたところ、Moderation APIomni-moderation-latest モデルを使用する場合、無料で利用できることが分かり採用した。

公式ドキュメントにも以下のように記載がある。

Our omni-moderation models are made available free of charge ✌️

developers.openai.com

ただし、判定ロジックのカスタマイズは基本的に出来ないため、その点は注意が必要。

実装

OpenAI の API Key 作成

Moderation API 自体は無料だが、クライアント初期化時に API Key が必要。

platform.openai.com

Node.jsでの実装

まず openai パッケージをインストール。

$ npm install openai

環境変数に API Key を設定。

■ .env

OPENAI_API_KEY=sk-****************************

コード側でクライアントを初期化し、Moderation API を呼び出す。

import OpenAI from "openai";

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

export async function moderateText(text) {
  try {
    const response = await client.moderations.create({
      model: "omni-moderation-latest",
      input: text,
    });

    return { flagged: response.results[0].flagged };
  } catch (error) {
    // API障害時は安全側に倒す
    return { flagged: true };
  }
}

あとは moderateText に投稿内容を渡し、flagged === true の場合は 「不適切な内容のため投稿できません」といったメッセージを表示すれば良い。

まとめ

これまで「ユーザーが自由にテキスト入力できて、かつパブリックに公開される機能」は、 管理方法を慎重に考える必要があり、気軽には実装しづらかった。

しかし Moderation API を使うことで、

  • 雑にガードを入れる
  • 人力運用をほぼゼロにする
  • コストを抑える

といったことで実装のハードルが、かなり低くなった。

レスポンスも非常に速いため、リアルタイム判定でもほぼ問題ないレベル。

「厳密な審査までは不要だが、最低限の安全対策は入れたい」というケースには、かなりおすすめできる API だと感じた。