【アドベントカレンダー2024】Amazon Bedrock ガードレールの機能を一緒に見てみよう！！

いつも記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

**2024年 Amazon Bedrockアドベントカレンダー企画としてBedrockガードレールのフィルタリング機能**について記事としてまとめてみたいと思います。

サクッと読める分量で執筆しておりますので、お気軽に読んでいただけますと幸いです。

### アドベントカレンダーリンク先

https://qiita.com/advent-calendar/2024/amazon-bedrock-generative-ai

:::note info
公式ドキュメントをもとに記事を執筆しておりますが、認識齟齬などがありましたら、お気軽にコメントいただけますと幸いです。
:::

# 目次
- **対象読者**
- **執筆すること・執筆しないこと**
    - **執筆すること**
    - **執筆しないこと**
- **執筆した理由**
- **Amazon Bedrockガードレールとは**
- **機能**
    - **コンテンツフィルター**
    - **拒否されたトピック**
    - **機密情報フィルター**
    - **ワードフィルター**
    - **コンテキストに基づくグラウンドチェック**
- **まとめ**

## 対象読者

対象読者として次のような方に役立てていただければありがたいです。

1. Amazon Bedrockガードレールの機能についてざっくりと知りたい方
1. Amazon Bedrockガードレールで行えるフィルタリング内容について知りたい方

## 執筆すること・執筆しないこと

### 執筆すること

1. Amazon Bedrockガードレールの機能概要
1. Amazon Bedrockでフォローしているフィルタリング機能

### 執筆しないこと

1. Amazon Bedrockに搭載されている他マイクロサービス
1. モデルごとのフィルタリング機能の差異分析
1. その他サービスでのガードレール機能について

## 執筆した理由

Amazon Bedrockのキャッチアップ活動を行う中で、**Amazon Bedrockガードレール機能**について興味を持ったのが理由としてあります。そのうえで、**どのような項目のフィルタリングをフォローしているのか**を理解することで**生成AIをビジネスへ落とし込むときのリスク説明に役立つのではないか**と思い、まとめ記事として執筆いたしました。

## Amazon Bedrockガードレールとは

公式ドキュメントを見てみると次のように説明されています。

>Amazon Bedrock ガードレールを使用すると、ユースケースと責任のある AI ポリシーに基づいて、生成 AI アプリケーションの保護を実装できます。さまざまなユースケースに合わせた複数のガードレールを作成し、複数の基盤モデル (FM) に適用して、一貫したユーザーエクスペリエンスを提供し、生成 AI アプリケーション全体で安全性とプライバシーの制御を標準化できます。ガードレールは、テキストベースのユーザー入力とモデルレスポンスで使用できます。

引用元:[Amazon Bedrock ガードレールを使用してモデル内の有害なコンテンツを停止する](https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/guardrails.html)

分かりやすく言えば、**入力されたプロンプト内容に個人を特定する情報（ex:○○さんの個人情報を教えて）が含まれていれば、自動的にブロックしてくれる機能**と思っていただければ分かりやすいかと思います。

:::note warning
Amazon Bedrock ガードレールは英語のみをサポートしています。他の言語でテキストコンテンツを評価すると、信頼できない結果になる可能性があります。（公式ドキュメントより）
:::

なお、料金に関しては入力されたプロンプトがガードレールで定義されたポリシーに引っかかった場合、課金されるようです。

### 料金表

| 項目 | コスト（1000テキストユニット当たり） |
|:-:|:-:|
| コンテンツフィルター  | 0.75 USD  |
| 拒否されたトピック  | 1 USD  |
| コンテキストグラウンディングチェック  | 	0.1 USD  |
| 機密情報フィルター (PII)  | 0.1 USD  |
| 機密情報フィルタ (正規表現)   |  無料 |
| ワードフィルター   | 無料  |

引用元：[Amazon Bedrock の料金](https://aws.amazon.com/jp/bedrock/pricing/)

なお、利用可能リージョンに関しては以下の通りです。

| 利用可能リージョン |
|:-:|
| 米国東部（バージニア州北部） |
| 米国東部（オハイオ） |
| 米国西部（オレゴン） |
| AWS GovCloud (米国東部) |
| AWS GovCloud (米国西部) |
| アジア太平洋（東京） |
| アジア太平洋（ソウル） |
| アジア太平洋（ムンバイ） |
| アジア太平洋（シンガポール）（ゲート付き） |
| アジア太平洋（シドニー） |
| カナダ（中部） |
| ヨーロッパ（フランクフルト） |
| ヨーロッパ（チューリッヒ） |
| ヨーロッパ (アイルランド) (ゲート付き) |
| ヨーロッパ（ロンドン） |
| ヨーロッパ（パリ） |
| 南アメリカ（サンパウロ） |

引用元：[Amazon Bedrock Guardrails でサポートされているリージョンとモデル](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-supported.html)

それでは、各フィルタリング機能について見ていきたいと思います。

## 機能

### コンテンツフィルター

公式ドキュメントを読んでみると以下の通り説明されています。

#### 嫌悪表現
- テキストコンテンツ
>アイデンティティ (人種、民族、性別、宗教、性的指向、能力、国籍など) に基づいて個人またはグループを差別、批判、侮辱、非難、または非人間化する入力プロンプトとモデル応答について説明します。

- 画像フィルタリング（プレビュー）
>憎悪グループの特定のシンボル、憎悪のシンボル、差別、人種差別、不寛容を促進するさまざまな組織に関連する画像を表示するグラフィックおよび実際のビジュアル コンテンツを含む入力プロンプトとモデル応答について説明します。

#### 侮辱表現
- テキストコンテンツ
>侮辱的、屈辱的、嘲笑的、侮辱的、または軽蔑的な言葉を含む入力プロンプトとモデル応答について説明します。このタイプの言葉は、いじめとも呼ばれます。

- 画像フィルタリング（プレビュー）
>軽蔑、怒り、または不承認を表現することを目的とした、さまざまな形式の失礼、無礼、または不快なジェスチャーを網羅する入力プロンプトとモデル応答について説明します。

#### 性的表現
- テキストコンテンツ
>身体の部位、身体的特徴、または性別を直接的または間接的に参照して、性的関心、活動、または興奮を示す入力プロンプトとモデル応答について説明します。

- 画像フィルタリング（プレビュー）
>プライベートな身体部位や性行為を表示する入力プロンプトとモデル応答について説明します。このカテゴリには、漫画、アニメ、絵、スケッチ、その他の性的テーマのイラスト付きコンテンツも含まれます。

#### 暴力表現
- テキストコンテンツ
>人、グループ、または物に対する身体的苦痛、傷害、または傷害を称賛したり、与える脅迫を含む入力プロンプトとモデル応答について説明します。

- 画像フィルタリング（プレビュー）
> 自傷行為、暴力的な身体的暴行、人や動物が傷つく描写 (多くの場合、目立つ血や身体的損傷を伴う) を含む入力プロンプトとモデル応答について説明します。

#### 不正行為
- テキストコンテンツ
>犯罪行為への関与、または個人、グループ、または機関への危害、詐欺、または不当な利用に関する情報を求めたり提供したりする入力プロンプトとモデル応答について説明します。

そのほかにも、ジェイルブレイクなどのプロンプト攻撃にも対応しているようです。

引用元：[コンテンツフィルター](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-content-filters.html)

コンソール上の設定画面としては以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/40121404-fbaf-406d-0002-c359eff5409d.png)

フィルタリング強度に応じて、各項目をフィルタリングできるように見受けられます。
ただし、画像フィルタリングとテキストコンテンツのフィルタリング強度を分けるのは難しそうですね。

### 拒否されたトピック

公式ドキュメントを読んでみると次の通り説明されています。

>生成 AI アプリケーションのコンテキストでは望ましくない拒否トピックのセットを使用して構成できます。たとえば、銀行は AI アシスタントが投資アドバイスに関連する会話を避けたり、暗号通貨に関連する会話に参加したりすることを望む場合があります。

引用元：[拒否されたトピック](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-denied-topics.html)

分かりやすく説明すると、**特定のワード（ex：爆弾の作り方）がプロンプトに含まれていた場合、その話題に関して回答しないようにする**といった機能のようです。

また、ベストプラクティスを読んでみると以下の通り説明されていました。

>トピックを明確かつ正確に定義します。トピックの定義が明確で曖昧さがなければ、トピックの検出精度が向上します。たとえば、暗号通貨に関連するクエリやステートメントを検出するトピックは、次のように定義できますQuestion or information associated with investing, selling, transacting, or procuring cryptocurrencies。

>トピックの定義に例や手順を含めないでください。たとえば、Block all contents associated to cryptocurrencyは手順であり、トピックの定義ではありません。このような手順は、トピックの定義の一部として使用しないでください。

>否定的なトピックや例外を定義しないでください。たとえば、 All contents except medical informationまたは はContents not containing medical informationトピックの否定的な定義であり、使用してはなりません。

>エンティティや単語をキャプチャするために、拒否されたトピックを使用しないでください。たとえば、Statement or questions containing the name of a person "X"または Statements with a competitor name Y。トピック定義はテーマまたは主題を表し、ガードレールは入力をコンテキストに応じて評価します。トピック フィルタリングは、個々の単語またはエンティティ タイプをキャプチャするために使用しないでください。

特に4点目（個人情報などの固有名詞は機密情報フィルターで設定しましょう）は注意が必要かもしれませんね。

また、コンソール上の設定画面は以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/dd4f278f-916e-02a9-b5d7-7b380221bff9.png)

設定内容について自由度が高いように見えるので、設定時のチューニング度合いが重要な印象を持ちました。

### 機密情報フィルタ

公式ドキュメントによると以下の通り説明がされています。

>Amazon Bedrock Guardrails は、入力プロンプトやモデル応答内の個人識別情報 (PII) などの機密情報を検出するのに役立ちます。また、正規表現 (regex) を使用して定義することで、ユースケースや組織に固有の機密情報を設定することもできます。

引用元：[機密情報フィルター](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-sensitive-filters.html)

また、機密情報フィルターに関しては2つの方法を選ぶことが出来るようです。

#### ブロック
>機密情報フィルター ポリシーは、機密情報の要求をブロックできます。このようなアプリケーションの例としては、公開ドキュメントに基づく一般的な質疑応答アプリケーションなどがあります。プロンプトまたは応答で機密情報が検出されると、ガードレールはすべてのコンテンツをブロックし、構成したメッセージを返します。

**この回答にはご回答できません**といった形でレスポンスを返すようなイメージですね。

#### マスク
>機密情報フィルター ポリシーは、 モデル応答から情報をマスクまたは編集できます。たとえば、ガードレールは、ユーザーとカスタマー サービス エージェント間の会話の要約を生成するときに PII をマスクします。モデル応答で機密情報が検出されると、ガードレールはそれを識別子でマスクし、機密情報はマスクされて識別子タグ (例: [NAME-1]、[NAME-2]、[EMAIL-1] など) に置き換えられます。

**[NAME-1]さんの年齢は20歳です**といった形でレスポンスを返すようなイメージですね。

また、機密情報フィルターで設定可能な項目として以下の通りです。


| フィルタリング項目 |
|:-:|
| 住所 |
| 年齢 |
| 氏名 |
| メールアドレス |
| 電話番号 |
| ユーザ名 |
| パスワード |
| 運転免許番号 |
| 車両ナンバー |
| 車両識別番号 |
| クレジットカード番号 |
| クレジットカード有効期限  |
| クレジットカードシークレット番号 |
| 口座番号 |
| スウィフトコード |
| IPアドレス |
| MACアドレス |
| Webアドレス |
| AWSアクセスキー |
| AWSシークレットキー |

なお、項目に含まれていない内容に関しては**正規表現**を用いれば設定可能なようです。

コンソール上の設定画面は以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/aaba8059-45f0-0e13-4b82-481e6c5de96d.png)

### ワードフィルター

AWS公式ドキュメントによると次のように説明されています。

>Amazon Bedrock Guardrails には、入力プロンプトやモデル応答内の単語やフレーズをブロックするために使用できる単語フィルターがあります。次の単語フィルターを使用して、冒とく的な言葉、不快な言葉、不適切な言葉、競合他社や製品名を含むコンテンツをブロックできます。

引用元：[単語フィルター](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-word-filters.html)

今までのフィルター機能以外の単語（競合他社の製品名など)で利用する機能なようですね。

コンソール上の設定画面は以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/b1066d6a-80c2-d8a7-6eaf-bc1bb5cde9c0.png)

冒とく表現に関しては、チェックボタンをクリックすればユーザ側で指定しなくても登録してくれるようですね。

### コンテキストに基づくグラウンドチェック

公式ドキュメントによると以下の通り説明されています。
>コンテキスト グラウンディング チェックは、処理される各チャンクの関連性をチェックします。 1 つのチャンクが関連性があると判断された場合、ユーザーのクエリに対する回答が含まれているため、応答全体が関連性があると判断されます。 ストリーミング API の場合、これにより、関連性のない応答がユーザーに返され、応答全体がストリーミングされた後にのみ関連性がないとマークされるというシナリオが発生する可能性があります。

引用元：[グラウンドチェック](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-contextual-grounding-check.html)

ざっくり説明すれば、**出力されたメッセージが根拠に基づいたものなのかチェックする（=ハルシネーション対策）**機能のようです。

コンソール上の設定画面は以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/ff6b1f26-d690-6e91-cc8f-7d6f5e00855d.png)

GUI上で操作はできるので、初学者でもチューニング自体は行えますが、**どのレベルまでチューニングするか**の観点は考える必要があるのかなぁと思いました。

## まとめ
今回は、Amazon Bedrocnガードレールの機能についてまとめた記事を執筆してみました。今後、実機検証を通じて、**どのレベルまでフィルタリングを担保しているのか**をテーマに記事を執筆してみてもいいのかなぁと思いました。

あわせて、AWSが**責任あるAI**に関して強く意識しているので、**フィルタリング1つ取っても、多様なオプションがある**ように感じました。

## 参考サイト

https://aws.amazon.com/jp/bedrock/guardrails/

https://dev.classmethod.jp/articles/guardrails-for-amazon-bedrock-general-availability/

https://qiita.com/hayao_k/items/45fef3047bf050b7ff34

https://acro-engineer.hatenablog.com/entry/2024/06/24/120000

最後まで記事を読んでいただきありがとうございます。
本記事が、読者にとってお役に立っていただければ幸いです。