🛡️

ChatGPTClientにOpenAI Moderation APIを実装してAIの安全性を向上させる

に公開

はじめに

AIアプリケーションを開発する際、生成されるコンテンツの安全性を確保することは非常に重要です。ユーザーの入力やAIの出力に有害なコンテンツが含まれていないかチェックすることで、より健全なサービスを提供できます。

この記事では、既存のChatGPTClientクラスにOpenAI Moderation APIを統合し、テキストの有害性チェック機能を実装した事例を紹介します。

OpenAI Moderation APIとは

OpenAI Moderation APIは、テキストコンテンツが有害である可能性を検出するためのAPIです。以下のカテゴリで有害性を判定します:

  • harassment: ハラスメント
  • harassment/threatening: 脅迫的なハラスメント
  • hate: ヘイトスピーチ
  • hate/threatening: 脅迫的なヘイトスピーチ
  • self-harm: 自傷行為
  • self-harm/intent: 自傷の意図
  • self-harm/instructions: 自傷の指示
  • sexual: 性的コンテンツ
  • sexual/minors: 未成年に関する性的コンテンツ
  • violence: 暴力
  • violence/graphic: グラフィックな暴力

最新のモデルomni-moderation-latestでは、テキストと画像の両方をチェックすることができます。

実装内容

1. 必要なTypeScriptの型定義をインポート

import {
    ModerationCreateParams,
    ModerationCreateResponse,
} from 'openai/resources/moderations'

2. moderateTextメソッドの実装

ChatGPTClientクラスに以下のメソッドを追加しました:

/**
 * テキストの内容をモデレーション(有害性チェック)する
 * @param input チェックするテキスト(文字列または文字列配列)
 * @param model 使用するモデル(デフォルト: omni-moderation-latest)
 * @returns モデレーション結果
 */
public static async moderateText(
    input: string | string[],
    model: ModerationCreateParams['model'] = 'omni-moderation-latest'
): Promise<ModerationCreateResponse> {
    try {
        const result = await openai.moderations.create({
            input,
            model,
        })
        return result
    } catch (e: unknown) {
        SentryLib.captureException(e)
        throw e
    }
}

メソッドの特徴

  1. 静的メソッド: インスタンス化せずに使用可能
  2. 柔軟な入力: 単一の文字列または文字列配列を受け付ける
  3. デフォルトモデル: 最新のomni-moderation-latestモデルを使用
  4. 型安全: OpenAIのSDKが提供する型定義を活用

使用例

基本的な使い方

// 単一のテキストをチェック
const result = await ChatGPTClient.moderateText("チェックしたいテキスト");

if (result.results[0].flagged) {
    console.log("有害なコンテンツが検出されました");
    // 詳細なカテゴリをチェック
    const categories = result.results[0].categories;
    if (categories.harassment) {
        console.log("ハラスメントが検出されました");
    }
}

複数のテキストを一度にチェック

const texts = [
    "テキスト1",
    "テキスト2", 
    "テキスト3"
];

const result = await ChatGPTClient.moderateText(texts);

result.results.forEach((res, index) => {
    if (res.flagged) {
        console.log(`テキスト${index + 1}に有害なコンテンツが含まれています`);
    }
});

カスタムモデルの使用

// 特定のモデルを指定
const result = await ChatGPTClient.moderateText(
    "チェックしたいテキスト",
    "text-moderation-007"
);

実装時の考慮点

1. パフォーマンス

Moderation APIは高速ですが、大量のテキストをチェックする場合は以下を考慮してください:

  • バッチ処理: 複数のテキストを配列で渡す
  • 非同期処理: Promise.allを使った並列処理
  • キャッシュ: 同じテキストの重複チェックを避ける

2. プライバシー

Moderation APIに送信されるテキストは、OpenAIのサーバーで処理されます。機密情報を含むテキストをチェックする際は注意が必要です。

3. 誤検出への対処

AIによる判定のため、誤検出の可能性があります:

  • False Positive: 安全なコンテンツを有害と判定
  • False Negative: 有害なコンテンツを見逃す

重要な判定には人間によるレビューを組み合わせることを推奨します。

まとめ

OpenAI Moderation APIをChatGPTClientに統合することで、AIアプリケーションの安全性を大幅に向上させることができました。主な改善点は:

  1. ✅ テキストの有害性チェック機能の追加
  2. ✅ エラーハンドリングの改善
  3. ✅ 型安全な実装

この実装により、ユーザーの入力やAIの出力をリアルタイムでチェックし、有害なコンテンツをフィルタリングできるようになりました。

今後の展望として、画像のモデレーション機能の追加や、カスタムフィルタリングルールの実装なども検討できるでしょう。

安全で信頼性の高いAIアプリケーションの開発に、この記事が参考になれば幸いです。

Discussion