Amazon Web Services ブログ

Guardrails for Amazon Bedrock は、ハルシネーションを検出し、カスタムまたはサードパーティーの FM を使用して構築されたアプリケーションを保護できるようになりました

Guardrails for Amazon Bedrock を使用すると、お客様はアプリケーション要件と会社の責任ある人工知能 (AI) ポリシーに基づいて、保護措置を実装できます。望ましくないコンテンツの防止、プロンプト攻撃 (プロンプトインジェクションやジェイルブレイク) の防止、プライバシー保護のための機密情報の削除に役立ちます。複数のポリシータイプを組み合わせて、さまざまなシナリオに合わせてこれらのセーフガードを設定し、Amazon Bedrock の基盤モデル (FM) だけでなく、Amazon Bedrock 以外のカスタムおよびサードパーティーの FM にも適用できます。Guardrails は、Amazon Bedrock のエージェントAmazon Bedrock のナレッジベースと統合することもできます。

Guardrails for Amazon Bedrock は、FM が提供するネイティブ保護に加えて、カスタマイズ可能な追加の保護手段を提供し、業界でもトップクラスの安全機能を提供します。

  • 有害なコンテンツを 85% もブロック
  • お客様が 1 つのソリューション内で安全性、プライバシー、信頼性の保護手段をカスタマイズして適用可能に
  • RAG および要約ワークロードの 75% を超える幻覚応答をフィルタリング

Guardrails for Amazon Bedrock は re:Invent 2023 で最初にプレビュー版としてリリースされ、コンテンツフィルターや拒否トピックなどのポリシーをサポートします。2024 年 4 月に一般公開された時点で、Guardrails は拒否トピック、コンテンツフィルター、機密情報フィルター、単語フィルターの 4 つの保護手段をサポートしていました。

MAPFRE はスペイン最大の保険会社で、世界 40 か国で事業を展開しています。「MAPFRE は、Mark.IA (RAG ベースのチャットボット) が当社の企業セキュリティポリシーと責任ある AI 慣行に確実に沿っているようにするために、Guardrails for Amazon Bedrock を実装しました」と MAPFRE のアーキテクチャ担当副ディレクターである Andres Hevia Vega 氏は述べています。 「MAPFRE は Guardrails for Amazon Bedrock を使用して、有害なコンテンツにコンテンツフィルタリングを適用し、許可されていないトピックを拒否し、企業のセキュリティポリシーを標準化し、個人データを匿名化して最高レベルのプライバシー保護を維持しています。Guardrails は、アーキテクチャエラーを最小限に抑え、API 選択プロセスを簡素化して、セキュリティプロトコルを標準化するのに役立ちました。AI 戦略を進化させ続ける中で、Amazon Bedrock とその Guardrails 機能は、より効率的で革新的、安全かつ責任ある開発プラクティスに向けた道のりにおいて非常に貴重なツールであることが証明されています」。

7月10日、さらに次の 2 つの機能を発表しました。

  1. コンテキストグラウンディングチェックは、参照ソースとユーザークエリに基づいて、モデル応答中のハルシネーションを検出します。
  2. ApplyGuardrail API は、すべての FM (Amazon Bedrock 上の FM、カスタムおよびサードパーティーの FM を含む) の入力プロンプトとモデル応答を評価します。これにより、すべての生成 AI アプリケーションにわたって一元的なガバナンスを実現できます 。

コンテキストグラウンディングチェック – ハルシネーションを検出する新しいポリシータイプ
お客様は通常、会社のソースデータに基づいて根拠のある (信頼できる) 応答を生成するために、FM の固有の機能を利用しています。ただし、FM は複数の情報を混同して、誤った情報や新しい情報を生成し、アプリケーションの信頼性に影響を与える可能性があります。コンテキストグラウンディングチェックは、企業データに基づいていなかったり、ユーザーのクエリとは無関係だったりするモデル応答でハルシネーションを検出できるようにする、5 番目の新たな保護手段です。これは、RAG、要約、情報抽出などのユースケースでの応答品質を向上させるために使用できます。例えば、Amazon Bedrock のナレッジベースでコンテキストグラウンディングチェックを使用して、企業データに基づいていない不正確な応答をフィルタリングすることで、信頼できる RAG アプリケーションをデプロイできます。エンタープライズデータソースから取得した結果は、モデル応答を検証するためのコンテキストグラウンディングチェックポリシーによって参照ソースとして使用されます。

コンテキストグラウンディングチェックには、次の 2 つのフィルタリングパラメータがあります。

  1. グラウンディング – これは、グラウンディング対象となるモデル応答の最小信頼スコアを表すグラウンディングしきい値を指定することで可能になります。つまり、参照元で提供されている情報に基づくと事実的に正しいものであり、参照元以外の新しい情報は含まれていません。定義されたしきい値よりも低いスコアのモデル応答がブロックされ、設定されたブロックメッセージが返されます。
  2. 関連性 – このパラメータは、ユーザーのクエリに関連するモデル応答の最小信頼スコアを表す関連性しきい値に基づいて機能します。定義されたしきい値を下回るスコアが低いモデル応答はブロックされ、設定されたブロックメッセージが返されます。

グラウンディングしきい値と関連性しきい値のスコアが高いほど、ブロックされる回答が多くなります。特定のユースケースの精度の許容範囲に基づいてスコアを調整してください。例えば、金融分野の顧客向けアプリケーションでは、不正確なコンテンツに対する許容度が低いため、高いしきい値が必要になる場合があります。

コンテキストグラウンディングチェックのインの動作
コンテキストグラウンディングチェックの例をいくつかご紹介します。

Amazon Bedrock の AWS マネジメントコンソールに移動します。ナビゲーションペインから [Guardrails] (ガードレール) を選択し、次に [Create guardrail] (ガードレールを作成) を選択します。コンテキストグラウンディングチェックポリシーを有効にしてガードレールを設定し、グラウンディングしきい値と関連性しきい値を指定します。

ポリシーをテストするには、Guardrail の概要ページに移動し、テストセクションを使用してモデルを選択します 。これにより、ソース情報とプロンプトのさまざまな組み合わせを簡単に試して、モデル応答のコンテキスト上の根拠と関連性を検証できます。

この例のテストでは、次のコンテンツ (銀行手数料について) をソースとして使用します。

• 当座預金口座の開設に伴う手数料はありません。
• 当座預金口座の維持費は月額 10 USD です。
• 国際送金には 1% の取引手数料がかかります。
• 国内送金には手数料はかかりません。
• クレジットカード請求書の支払い遅延に関連する料金は 23.99% です。

次に、[Prompt] (プロンプト) フィールドに次のように順に質問を入力します。

当座預金口座に関連する手数料はいくらですか?

実行するには [Run] (実行) を選択し、詳細にアクセスするには [View Trace] (トレースを表示) を選択します。

モデルの回答は事実上正しく、関連性がありました。グラウンディングスコアと関連性スコアの両方が設定されたしきい値を上回っていたため、モデル応答をユーザーに送り返すことができました。

次に、別のプロンプトを試します。

クレジットカードに関連する取引手数料はいくらですか?

ソースデータには、クレジットカードの延滞請求についてのみ記載されており、クレジットカードに関連する取引手数料については記載されていません。したがって、モデル応答は (取引手数料に関連して) 関連性がありましたが、事実上正しくありませんでした。その結果、グラウンディングスコアが低くなり、スコアが設定されたしきい値である 0.85 を下回ったため、応答がブロックされました。

最後に、次のプロンプトを試しました。

当座預金口座を使用する場合の取引手数料はいくらですか?

この場合、ソースデータには当座預金銀行口座の月額料金が記載されているため、モデルの回答は根拠がありました。ただし、クエリは取引手数料に関するもので、応答は月額料金に関するものだったため、関連性がありませんでした。その結果、関連性スコアが低くなり、設定されたしきい値である 0.5 を下回ったため、応答がブロックされました。

AWS SDK for Python (Boto3) を使用して、CreateGuardrail API によりコンテキストグラウンディングを設定する方法の例を次に示します。

   bedrockClient.create_guardrail(
        name='demo_guardrail',
        description='Demo guardrail',
        contextualGroundingPolicyConfig={
            "filtersConfig": [
                {
                    "type": "GROUNDING",
                    "threshold": 0.85,
                },
                {
                    "type": "RELEVANCE",
                    "threshold": 0.5,
                }
            ]
        },
    )

コンテキストグラウンディングチェックを使用してガードレールを作成したら、Amazon Bedrock のナレッジベースや Amazon Bedrock のエージェントに関連付けることも、モデル推論中に参照することもできます。

しかし、それだけではありません。

ApplyGuardrail – Amazon Bedrock 以外で利用可能な FM を使用してアプリケーションを保護
これまで、Guardrails for Amazon Bedrock は主に、モデル推論中のみ、Amazon Bedrock で利用できる FM 用の入力プロンプトとモデル応答の評価に使用されていました。

Guardrails for Amazon Bedrock は、設定されたセーフガードに合わせてすべてのユーザー入力とモデル応答を評価する新しい ApplyGuardrail API をサポートするようになりました。この機能により、基盤となるインフラストラクチャに関係なく、セルフマネージド (カスタム) またはサードパーティーの FM を使用して構築されたすべての生成 AI アプリケーションに、標準化された一貫した保護手段を適用できます。要するに、Guardrails for Amazon Bedrock を使用することで、Amazon Bedrock で利用可能な FM、他のサービス (Amazon SageMaker など) で利用可能な FM、Amazon Elastic Compute Cloud (Amazon EC2) などのインフラストラクチャ、オンプレミスデプロイ、および Amazon Bedrock 以外のその他のサードパーティーの FM の入力プロンプトとモデル応答に同じ保護手段のセットを適用できるようになりました。

さらに、ApplyGuardrail API を使用して、生成 AI アプリケーションのさまざまな段階でユーザー入力とモデル応答を個別に評価できるため、アプリケーション開発の柔軟性が高まります。例えば、RAG アプリケーションでは、ナレッジベースで検索を実行する前に、ガードレールを使用して有害なユーザー入力を評価およびフィルタリングできます。その後、FM からの取得 (検索) と生成ステップを完了した後に、出力を個別に評価できます。

アプリケーションで ApplyGuardrail API を使用する方法を説明します。次の例では、AWS SDK for Python (Boto3) を使用しました。

まず、拒否されたトピックのセットを含む新しいガードレールを作成し (create_guardrail 関数を使用) 、新しいバージョンを作成しました (create_guardrail_version 関数を使用)。

import boto3

bedrockRuntimeClient = boto3.client('bedrock-runtime', region_name="us-east-1")
bedrockClient = boto3.client('bedrock', region_name="us-east-1")
guardrail_name = 'fiduciary-advice'

def create_guardrail():
    
    create_response = bedrockClient.create_guardrail(
        name=guardrail_name,
        description='Prevents the model from providing fiduciary advice.',
        topicPolicyConfig={
            'topicsConfig': [
                {
                    'name': 'Fiduciary Advice',
                    'definition': 'Providing personalized advice or recommendations on managing financial assets in a fiduciary capacity.',
                    'examples': [
                        'What stocks should I invest in for my retirement?',
                        'Is it a good idea to put my money in a mutual fund?',
                        'How should I allocate my 401(k) investments?',
                        'What type of trust fund should I set up for my children?',
                        'Should I hire a financial advisor to manage my investments?'
                    ],
                    'type': 'DENY'
                }
            ]
        },
        blockedInputMessaging='I apologize, but I am not able to provide personalized advice or recommendations on managing financial assets in a fiduciary capacity.',
        blockedOutputsMessaging='I apologize, but I am not able to provide personalized advice or recommendations on managing financial assets in a fiduciary capacity.',
    )

    version_response = bedrockClient.create_guardrail_version(
        guardrailIdentifier=create_response['guardrailId'],
        description='Version of Guardrail to block fiduciary advice'
    )

    return create_response['guardrailId'], version_response['version']

ガードレールが作成されたら、評価対象のテキストと、作成したばかりのガードレールの ID とバージョンを含む apply_guardrail 関数を呼び出しました。

def apply(guardrail_id, guardrail_version):

    response = bedrockRuntimeClient.apply_guardrail(guardrailIdentifier=guardrail_id,guardrailVersion=guardrail_version, source='INPUT', content=[{"text": {"inputText": "How should I invest for my retirement? I want to be able to generate $5,000 a month"}}])
                                                                                                                                                    
    print(response["output"][0]["text"])

使用したのは次のプロンプトです。

退職後のためにどのように投資すべきですか? 月に 5,000 USD 稼げるようになりたいです

ガードレールのおかげで、メッセージはブロックされ、事前に設定された応答が返されました。

申し訳ありませんが、受託者として金融資産の管理について、個別のアドバイスやレコメンデーションを提供することはできません。

この例では、ソースを INPUT に設定しています。つまり、評価されるコンテンツはユーザー (通常は LLM プロンプト) からのものです。モデル出力を評価するには、ソースOUTPUT に設定する必要があります。

今すぐご利用いただけます
コンテキストに基づくグラウンディングチェックと ApplyGuardrail API は現在、Guardrails for Amazon Bedrock が利用可能なすべての AWS リージョンでご利用いただけます。Amazon Bedrock コンソールでお試しいただき、AWS re:Post for Amazon Bedrock に、または通常の AWS 担当者を通じて、フィードバックをぜひお寄せください。

Guardrails の詳細については、Guardrails for Amazon Bedrock の製品ページと Amazon Bedrock の料金ページにアクセスして、ガードレールポリシーに関連する費用をご確認ください。

また、community.aws サイトに忘れずにアクセスすると、ソリューションの技術的な内容を詳しく見たり、ビルダーコミュニティが自らのソリューションで Amazon Bedrock をどのように利用しているかを学んだりすることもできます。

Abhishek

原文はこちらです。