

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# コンテンツフィルターを使用して有害なイメージをブロックする
<a name="guardrails-mmfilter"></a>

Amazon Bedrock ガードレールは、ガードレール内でコンテンツフィルターを設定する際に、不適切または有害なイメージをブロックするのに役立ちます。

**前提条件と制限事項**
+ この機能はイメージでのみサポートされ、ビデオコンテンツが埋め込まれたイメージではサポートされていません。
+ この機能は、米国東部 (バージニア北部）、米国西部 (オレゴン）、欧州 (フランクフルト）、アジアパシフィック (東京) で一般利用可能です。ここでは AWS リージョン、コンテンツフィルター内の憎悪、侮辱、性的、暴力、不正行為、プロンプト攻撃のカテゴリがサポートされています。
+ この機能は、米国東部 (オハイオ）、アジアパシフィック (ムンバイ、ソウル、シンガポール、シドニー）、欧州 (アイルランド、ロンドン）、米国 GovCloud (米国西部) のプレビューで使用できます。このプレビューでは AWS リージョン、コンテンツフィルター内の憎悪、侮辱、性的、暴力のカテゴリがサポートされています。
+ この機能で使用できるイメージの最大サイズは 8000 x 8000 (JPEG ファイルと PNG ファイルの両方) です。
+ ユーザーは最大 4 MB のサイズでイメージをアップロードでき、1 回のリクエストで最大 20 個のイメージをアップロードできます。
+ デフォルトの制限は 1 秒あたり 25 イメージです。この値は設定できません。
+ イメージコンテンツ向けにサポートされている形式は、PNG と JPEG だけです。

**概要**:

有害なイメージの検出とブロックは、イメージまたはテキストを含むイメージでのみサポートされます。ガードレールを作成するときに、ユーザーはイメージオプションを単独で、またはテキストオプションと一緒に選択し、それぞれのフィルタリング強度を **[なし]**、**[低]**、**[中]**、または **[高]** に設定できます。これらのしきい値は、両方のモダリティが選択されている場合、テキストコンテンツと画像コンテンツの両方に共通です。ガードレールは、ユーザーによって入力として送信されたイメージ、またはモデルレスポンスからの出力として生成されたイメージを評価します。

有害なイメージコンテンツを検出するためにサポートされているカテゴリを以下に示します。
+ **ヘイト** – 人種、民族、性同一性、宗教、性的指向、能力、出身国、その他のアイデンティティグループなど、アイデンティティに基づいて個人またはグループを差別、批判、侮辱、否定、非人間化するコンテンツ。また、差別、人種差別、不寛容を促進するさまざまな組織に関連する憎悪グループのシンボル、憎悪的なシンボル、およびイメージを表示するグラフィックおよび実際のビジュアルコンテンツも含まれています。
+ **侮辱** – 屈辱的、嘲笑的、侮辱的、または軽蔑的な言葉を含むコンテンツ。この種の発言は、「いじめ」とも呼ばれます。また、侮辱、怒り、または非承認を表すことを目的とした無作法、無礼、または不快な手のジェスチャのさまざまな形式も含まれます。
+ **性的** – 体の一部、身体的特徴、性別への直接的または間接的な言及により、性的関心、活動、性的嗜好を示すコンテンツ。また、陰部や性的行為を伴う性行為を示すイメージも含まれています。このカテゴリには、漫画、アニメ、描画、スケッチ、および性的なテーマを含むその他のイラスト付きコンテンツも含まれます。
+ **暴力** — 人、グループ、モノに身体的苦痛、傷、または傷害を与えることへの賛美または脅威を含むコンテンツ。また、有害な意図を持つ武器に関連するイメージも含まれます。
+ **不正行為** — 犯罪活動への関与、人、グループ、機関への危害、詐欺、または利用に関する情報を求めたり、提供したりする入力プロンプトとモデルレスポンス。
+ **プロンプト攻撃** – 有害なコンテンツを生成し (ジェイルブレイクとも呼ばれます)、デベロッパーによって指定された指示を無視して上書きする (プロンプトインジェクションと呼ばれます) ために、基盤モデルの安全性とモデレーション機能をバイパスすることを目的としたユーザープロンプト。プロンプト攻撃が適用されるには、入力のタグ付けが使用されている必要があります。プロンプト攻撃の検出には、入力タグを使用する必要があります。

**Topics**
+ [イメージコンテンツフィルターの使用](#guardrails-use-mmfilter)
+ [API を使用したイメージのコンテンツフィルターの設定](#guardrails-use-mmfilter-configure)
+ [ApplyGuardrail API で使用するガードレールの設定](#guardrails-use-mmfilter-api)
+ [イメージ生成モデルで動作するようにイメージフィルターを設定する](#guardrails-use-mmfilter-image-models)

## イメージコンテンツフィルターの使用
<a name="guardrails-use-mmfilter"></a>

**イメージのコンテンツフィルターを使用したガードレールの作成または更新**

新しいガードレールの作成時または既存のガードレールの更新時に、既存のテキストオプションに加えてイメージを選択するオプションが表示されるようになりました。

**注記**  
デフォルトでは、テキストオプションは有効になっており、イメージオプションは明示的に有効にする必要があります。ユーザーは、ユースケースに応じて、テキストとイメージの両方、またはどちらかを選択できます。

**フィルター分類とブロックレベル**

フィルタリングは、ユーザー入力と FM レスポンスの信頼度分類に基づいて行われます。すべてのユーザー入力とモデルレスポンスは、[なし]、[低]、[中]、[高] の 4 つの強度レベルに分類されます。フィルターの強度は、有害なコンテンツをフィルタリングする感度を決定します。フィルターの強度が高くなると、有害なコンテンツをフィルタリングする確率が高くなり、アプリケーションに有害なコンテンツが表示される可能性が低くなります。イメージオプションとテキストオプションの両方を選択すると、特定のカテゴリの両方のモダリティに同じフィルター強度が適用されます。

1. 有害なカテゴリのフィルターを設定するには、**[有害カテゴリのフィルターを設定する]** を選択します。

1. **[テキスト]** や **[イメージ]** を選択して、モデルとの間でプロンプトまたはレスポンスからテキストまたはイメージコンテンツをフィルタリングします。

1. 各カテゴリに適用するフィルターのレベルについて、**[なし]、[低]、[中]、または [高]** を選択します。**[高]** の設定は、フィルターのそのカテゴリに適用されるほとんどのテキストまたはイメージをブロックするのに役立ちます。

1. **[レスポンスに同じ有害カテゴリフィルターを使用する]** を選択して、プロンプトに使用したのと同じフィルター設定を使用します。このオプションを選択しないことで、プロンプトまたはレスポンスに異なるフィルターレベルを設定することもできます。**[しきい値をリセット]** を選択して、プロンプトまたはレスポンスのすべてのフィルターレベルをリセットします。

1. **[確認および作成]** または **[次へ]** を選択してガードレールを作成します。

## API を使用したイメージのコンテンツフィルターの設定
<a name="guardrails-use-mmfilter-configure"></a>

ガードレール API を使用して、Amazon Bedrock ガードレールでイメージコンテンツフィルターを設定できます。以下の例は、さまざまな有害コンテンツカテゴリとフィルター強度が適用された Amazon Bedrock ガードレールフィルターを示しています。このテンプレートは、独自のユースケースのサンプルとして使用できます。

`contentPolicyConfig` オペレーションでは、次の例に示すとおり、`filtersConfig` はオブジェクトです。

**イメージコンテンツフィルターを使用してガードレールを作成するための Python Boto3 コードの例**

```
import boto3
import botocore
import json


def main():
    bedrock = boto3.client('bedrock', region_name='us-east-1')
    try:
        create_guardrail_response = bedrock.create_guardrail(
            name='my-image-guardrail',
            contentPolicyConfig={
                'filtersConfig': [
                    {
                        'type': 'SEXUAL',
                        'inputStrength': 'HIGH',
                        'outputStrength': 'HIGH',
                        'inputModalities': ['TEXT', 'IMAGE'],
                        'outputModalities': ['TEXT', 'IMAGE']
                    },
                    {
                        'type': 'VIOLENCE',
                        'inputStrength': 'HIGH',
                        'outputStrength': 'HIGH',
                        'inputModalities': ['TEXT', 'IMAGE'],
                        'outputModalities': ['TEXT', 'IMAGE']
                    },
                    {
                        'type': 'HATE',
                        'inputStrength': 'HIGH',
                        'outputStrength': 'HIGH',
                        'inputModalities': ['TEXT', 'IMAGE'],
                        'outputModalities': ['TEXT', 'IMAGE']
                    },
                    {
                        'type': 'INSULTS',
                        'inputStrength': 'HIGH',
                        'outputStrength': 'HIGH',
                        'inputModalities': ['TEXT', 'IMAGE'],
                        'outputModalities': ['TEXT', 'IMAGE']
                    },
                    {
                        'type': 'MISCONDUCT',
                        'inputStrength': 'HIGH',
                        'outputStrength': 'HIGH',
                        'inputModalities': ['TEXT'],
                        'outputModalities': ['TEXT']
                    },
                    {
                        'type': 'PROMPT_ATTACK',
                        'inputStrength': 'HIGH',
                        'outputStrength': 'NONE',
                        'inputModalities': ['TEXT'],
                        'outputModalities': ['TEXT']
                    }
                ]
            },
            blockedInputMessaging='Sorry, the model cannot answer this question.',
            blockedOutputsMessaging='Sorry, the model cannot answer this question.',
        )
        create_guardrail_response['createdAt'] = create_guardrail_response['createdAt'].strftime('%Y-%m-%d %H:%M:%S')
        print("Successfully created guardrail with details:")
        print(json.dumps(create_guardrail_response, indent=2))
    except botocore.exceptions.ClientError as err:
        print("Failed while calling CreateGuardrail API with RequestId = " + err.response['ResponseMetadata']['RequestId'])
        raise err


if __name__ == "__main__":
    main()
```

## ApplyGuardrail API で使用するガードレールの設定
<a name="guardrails-use-mmfilter-api"></a>

`ApplyGuardrail` API を使用して、イメージコンテンツとテキストコンテンツの両方にコンテンツフィルターを使用できます。このオプションを使用すると、Amazon Bedrock モデルを呼び出さずにコンテンツフィルター設定を使用できます。Amazon Bedrock ガードレールでサポートされている各基盤モデルの推論パラメータドキュメントに従うことで、さまざまなモデルの以下のスクリプトでリクエストペイロードを更新できます。

Amazon Bedrock ガードレールでサポートされている各基盤モデルの推論パラメータドキュメントに従うことで、さまざまなモデルの以下のスクリプトでリクエストペイロードを更新できます。

```
import boto3
import botocore
import json


guardrail_id = 'guardrail-id'
guardrail_version = 'DRAFT'
content_source = 'INPUT'
image_path = '/path/to/image.jpg'

with open(image_path, 'rb') as image:
    image_bytes = image.read()

content = [
    {
        "text": {
            "text": "Hi, can you explain this image art to me."
        }
    },
    {
        "image": {
            "format": "jpeg",
            "source": {
                "bytes": image_bytes
            }
        }
    }
]


def main():
    bedrock_runtime_client = boto3.client("bedrock-runtime", region_name="us-east-1")
    try:
        print("Making a call to ApplyGuardrail API now")
        response = bedrock_runtime_client.apply_guardrail(
            guardrailIdentifier=guardrail_id,
            guardrailVersion=guardrail_version,
            source=content_source,
            content=content
        )
        print("Received response from ApplyGuardrail API:")
        print(json.dumps(response, indent=2))
    except botocore.exceptions.ClientError as err:
        print("Failed while calling ApplyGuardrail API with RequestId = " + err.response['ResponseMetadata']['RequestId'])
        raise err


if __name__ == "__main__":
    main()
```

## イメージ生成モデルで動作するようにイメージフィルターを設定する
<a name="guardrails-use-mmfilter-image-models"></a>

Amazon Bedrock ガードレール画像フィルターは、Titan Image Generator や Stability Image や Diffusion モデルなどのイメージ生成モデルでも使用できます。これらのモデルは、現在、ガードレールで呼び出すことができる `InvokeModel` API を通じてサポートされています。ガードレールでサポートされているさまざまな Amazon Bedrock 基盤モデルの推論パラメータドキュメントに従うことで、さまざまなモデルの以下のスクリプトでリクエストペイロードを更新できます。

```
import base64
import boto3
import botocore
import json
import os
import random
import string


guardrail_id = 'guardrail-id'
guardrail_version = 'DRAFT'

model_id = 'stability.sd3-large-v1:0'
output_images_folder = '/path/to/folder/'

body = json.dumps(
    {
        "prompt": "Create an image of a beautiful flower", # Prompt for image generation ("A gun" should get blocked by violence)
        "output_format": "jpeg"
    }
)


def main():
    bedrock_runtime_client = boto3.client("bedrock-runtime", region_name="us-west-2")
    try:
        print("Making a call to InvokeModel API for model: {}".format(model_id))
        response = bedrock_runtime_client.invoke_model(
            body=body,
            modelId=model_id,
            trace='ENABLED',
            guardrailIdentifier=guardrail_id,
            guardrailVersion=guardrail_version
        )
        response_body = json.loads(response.get('body').read())
        print("Received response from InvokeModel API (Request Id: {})".format(response['ResponseMetadata']['RequestId']))
        if 'images' in response_body and len(response_body['images']) > 0:
            os.makedirs(output_images_folder, exist_ok=True)
            images = response_body["images"]
            for image in images:
                image_id = ''.join(random.choices(string.ascii_lowercase + string.digits, k=6))
                image_file = os.path.join(output_images_folder, "generated-image-{}.jpg".format(image_id))
                print("Saving generated image {} at {}".format(image_id, image_file))
                with open(image_file, 'wb') as image_file_descriptor:
                    image_file_descriptor.write(base64.b64decode(image.encode('utf-8')))
        else:
            print("No images generated from model")
        guardrail_trace = response_body['amazon-bedrock-trace']['guardrail']
        guardrail_trace['modelOutput'] = ['<REDACTED>']
        print("Guardrail Trace: {}".format(json.dumps(guardrail_trace, indent=2)))
    except botocore.exceptions.ClientError as err:
        print("Failed while calling InvokeModel API with RequestId = {}".format(err.response['ResponseMetadata']['RequestId']))
        raise err


if __name__ == "__main__":
    main()
```