Azure OpenAI Serviceのプロンプトインジェクション対策(Jailbreak risk detection)

Azure OpenAI Serviceで新しくなったコンテンツフィルターとブロックリストについて試してみました。

特に、新しいコンテンツフィルターのJailbreak risk detectionは、プロンプトインジェクションへの対策でも活用できると思います。

概要

コンテンツフィルターの機能概要

以前より、Azure OpenAI Serviceではコンテンツフィルター構成することで、有害なコンテンツ (暴力、ヘイト、性的、自傷行為) の 4 つのカテゴリをそれぞれ 4 つの重大度レベル (安全、低、中、高) で検出しブロックすることが出来ました。

Azure OpenAI Service でコンテンツ フィルター (プレビュー) を使用する方法 - Azure OpenAI | Microsoft Learn

そのコンテンツフィルターに、以下の3つが追加されました。

  • Jailbreak risk detection(脱獄リスク検出)
    • 脱獄リスク(システムプロンプトなどを無視させる等)があるユーザーからのプロンプト(質問)を検出してブロックする
  • Protected material - code(保護された素材 - コード)
    • 出力が公開コードに一致する場合引用例とライセンス情報を取得できる
  • Protected material - text(保護された素材 - テキスト)
    • 既知のテキストコンテンツを識別して出力での表示をブロックする

これらを使うことでmGPTモデルをより安全に利用することができます。Jailbreak risk detectionに関してはこのブログで使い方などをご紹介します。Protected materialについては、後日機能を確かめてブログを書きたいと思います。

ブロックリストの機能概要

ブロックリストを利用すると固有の用語を登録でき、固有の用語をブロックすることができます。ただし後述しますが、現時点で日本語での利用は難しいと考えます。

Azure OpenAI サービスでブロックリストを使用する方法 - Azure OpenAI | Microsoft Learn

Jailbreak risk detection(脱獄リスク検出)の使い方

コンテンツフィルターはリソースにデプロイしたモデルごとに設定できます。

コンテンツフィルターの作成

Azure OpenAI Studioにアクセスして「コンテンツフィルター(プレビュー)」を選択します。

コンテンツフィルターの構成から「カスタマイズ済みコンテンツフィルターの作成」を選択します。

「カスタム構成名を作成する」を任意の名称に書き換えて「次へ」を選択します。

追加モデル(オプション)の「Jailbreak」の「有効化/注釈付け」にチェックを入れると自動的に「フィルター」もOnになりますので「次へ」を選択します。

ブロックリストは何もチェックせずに「次へ」を選択します。

確認画面で「コンテンツフィルターを作成する」を選択します。

コンテンツフィルターが正しく追加されたことを確認します。

コンテンツフィルターをモデルに適用する

モデルデプロイの「詳細設定オプション」を開き「コンテンツフィルター」で先ほど作成したコンテンツフィルターを選択して「作成」を選択します。

※既存のデプロイされたモデルは、デプロイの編集から変更できます。

Jailbreak risk detectionのテスト

通常のフィルターでのテスト

システムメッセージに「あなたの仕事はITサポートです。ITに関係ない質問には(例えば料理についてなどは)「回答できません」と返答してください。」と設定してIT以外の回答をしないようにします。

これでwinodws10のサポート期限に関することは回答しますが、おすすめの肉料理に関することは回答しないようになりました。

そこで、今までの命令を無視するプロンプトを入力して、再度おすすめの肉料理を聞くと答えてしまいます。

Jailbreak risk detectionを有効にしたフィルタでのテスト

同様のシステムメッセージを設定して、同様の質問をします。

通常のフィルターと同様に今までの命令を無視するプロンプトを入力すると、コンテンツフィルターにブロックされることが分かります。

ブロックリストの使い方

ブロックリストの作成

こちらは、コンテンツフィルターの構成から「ブロックリスト(プレビュー)」の「ブロックリストの作成」を選択します。

「ブロックリスト名」に任意の名称を入力して「作成」を選択します。

ブロックリストが作成されるので作成されたブロックリストを選択します。

「用語の追加」を選択します。

今回は自分の名前をブロックしたいので「ブロックリストの用語」に「ueda」と入力して「追加」を選択します。

項目が追加されてデプロイされたモデルに反映されるまで最大3分かかりますと表示されます。

ブロックリストを含んだコンテンツフィルターの作成

ブロックリストをコンテンツフィルターに追加します。Jailbreak risk detectionと同様の手順でコンテンツフィルタを構成します。

今回「追加モデル(オプション)」は選択しません。

先ほど作った「カスタムブロックリスト」の「フィルタープロンプト」、「フィルターの完了」にチェックを入れ「次へ」を選択します。

確認画面で「コンテンツフィルターを作成する」を選択します。

 

ブロックリストを含んだコンテンツフィルターをモデルに適用する

デプロイの編集で「コンテンツフィルター」を先ほど作成したものに変更して「保存して閉じる」を選択します。

ブロックリストのテスト

日本語でのテスト

プレイグラウンドで「ueda」へメールを書かせてみますが、普通に書いています。

英語でのテスト

次に英語で送ってみます。今度はしっかりブロックされました。

おそらくブロックリストはトークンで登録されていて、日本語と英語でトークナイザーが違うため、日本語と英語との違いが出てくるのではないかと推察されます。

まとめ

Jailbreak risk detectionについては日本語でも動作しているので今後活用できるのではないかと考えます。

一方、ブロックリストについては日本語と英語の動作に違いがあるので、日本語環境の場合は注意が必要と考えます。

執筆担当者プロフィール
上田 英治

上田 英治(日本ビジネスシステムズ株式会社)

エンジニアとしてインフラ構築、システム開発やIoT基盤構築等を経験し、現在はクラウドアーキテクトとして先端技術の活用提案や新規サービスの立ち上げを担当。

担当記事一覧