Amazon Web Services ブログ

Amazon Bedrock のエージェント:シンプルな作成と設定エクスペリエンスのご紹介

Amazon Bedrock のエージェントを使用するとアプリケーションは生成 AI を使用して複数のシステムやデータソースにわたってタスクを実行できます。4月23日より、以下の新機能によりエージェントの作成と管理が効率化されます。

迅速なエージェント作成 — エージェントをすばやく作成し、必要に応じて指示やアクショングループを後で追加できるため、開発プロセスに柔軟性と俊敏性がもたらされます。

エージェントビルダー — すべてのエージェント設定は、コンソールの新しいエージェントビルダーセクションで操作できます。

構成の簡略化 — アクショングループでは、API スキーマを提供しなくても、関数とパラメーターのみを一覧表示するだけの簡略化されたスキーマを使用できます。

制御の回復 AWS Lambda 関数の使用をスキップして、エージェントを呼び出すアプリケーションに制御を戻すことができます。この方法では、アプリケーションを AWS 外部のシステムと直接統合したり、任意の Amazon Virtual Private Cloud (Amazon VPC) でホストされている内部エンドポイントを呼び出したりできます。必要なネットワーク設定やセキュリティ設定を Lambda 関数と統合する必要はありません。

コードとしてのインフラストラクチャ AWS CloudFormation を使用すると、新しく簡素化された設定でエージェントをデプロイおよび管理できるため、生成 AI アプリケーションの環境全体で一貫性と再現性を確保できます。

これらの機能強化が実際にどのように機能するかを見てみましょう。

新しい簡易コンソールを使用してエージェントを作成する
新しいエクスペリエンスをテストするために、顧客からのフィードバックを含むメールへの返信を手伝ってくれるエージェントを構築したいと考えています。生成 AI は使えますが、他のシステムとやり取りする必要があるため、基盤モデル (FM) を1回呼び出すだけでは不十分です。そのためにエージェントを使います。

Amazon Bedrock コンソールで、ナビゲーションペインから [Agents] (エージェント) を選択し、[Create agent] (エージェントを作成) を選択します。エージェントの名前(カスタマーフィードバック)と説明を入力します。新しいインターフェースを使用して、この段階では追加情報を入力せずにエージェントを作成します。

コンソールのスクリーンショット。

これで、エージェントの全体的な設定にアクセスして編集できるエージェントビルダーが表示されましたエージェントリソースロールでは、デフォルト設定を [新しいサービスロールを作成して使用する] のままにして、エージェントが引き受ける AWS Identity and Access Management (IAM) ロールが自動的に作成されるようにします。モデルには、アントロピックとクロード3ソネットを選択します

コンソールのスクリーンショット。

エージェントへの指示では、エージェントが実行しなければならないタスクについて、明確かつ具体的な指示を記載しています。ここでは、返信時にエージェントに使わせたいスタイルやトーンも指定できます。私のユースケースでは、次のように入力します。

お客様のアカウント設定に合わせたソリューションで、お客様からのフィードバックメールへの返信を支援します。

その他の設定」で、「ユーザー入力を有効にする 」を選択すると、応答に必要な情報が不足している場合にエージェントが追加の詳細を尋ねることができます。次に、[保存] を選択してエージェントの設定を更新します。

次に、[アクショングループ] セクションで [追加] を選択します。アクショングループは、エージェントが外部システムと対話して詳細情報を収集したり、アクションを実行したりする方法です。アクショングループの名前(顧客設定の取得)と説明を入力します。

顧客 ID を含む顧客設定を取得します。

説明はオプションですが、指定するとモデルに渡され、このアクショングループをいつ使用するかの選択に役立ちます。

コンソールのスクリーンショット。

アクショングループタイプでは、関数とそのパラメーターを指定するだけで済むように、[関数の詳細で定義] を選択します。ここにあるもう 1 つのオプション (API スキーマで定義) は、API スキーマを使用してアクショングループを設定する以前の方法に対応しています。

アクショングループ関数は Lambda 関数呼び出しに関連付けることも、エージェントを呼び出すユーザーまたはアプリケーションに制御を返して関数に応答できるように設定することもできます。制御を戻すオプションは、主に次の 4 つの用途に役立ちます。

  • API に必要な正しい認証とネットワーク設定を使用して新しい Lambda 関数を構築するよりも、既存のアプリケーション (エージェントを呼び出すアプリケーションなど) から API を呼び出す方が簡単な場合
  • タスクの実行時間が Lambda 関数の最大タイムアウトである 15 分を超えた場合、コンテナまたは仮想サーバーで実行されているアプリケーションでタスクを処理したり、 AWS Step Functions などのワークフローオーケストレーションを使用したりできます。
  • アクションに時間がかかる場合。制御が戻ると、エージェントはアクションが完了するのを待たずに次のステップに進むことができ、エージェントのオーケストレーションフローが継続している間、呼び出し元のアプリケーションはバックグラウンドでアクションを非同期的に実行できるためです。
  • 開発中やテスト中、およびエージェントの API とのやりとりをすばやく模擬する方法が必要な場合

アクショングループの呼び出しでは、オーケストレーション中にモデルによってこのアクショングループが識別されたときに呼び出される Lambda 関数を指定できます。コンソールに、新しい Lambda 関数をすばやく作成したり、既存の Lambda 関数を選択したり、エージェントを呼び出すユーザーまたはアプリケーションが詳細を要求して応答を生成するように制御を返したりするように指示できます。「リターン・コントロール」を選択して、それがコンソールでどのように機能するかを示します。

コンソールのスクリーンショット。

アクショングループの最初の機能を設定します。関数の名前(retrieve-customer-settings-from-crm)と次の説明を入力します。

メールの送信者/差出人フィールドにある顧客メールを使用して、顧客 ID を含む顧客設定を CRM から取得します。

コンソールのスクリーンショット。

パラメータに、Customer Email と記述したメールを追加します。。これは String 型のパラメーターで、この関数に必要です。「追加」を選択して、アクショングループの作成を完了します。

私のユースケースでは、ログイン時に多くのお客様に問題が発生することが予想されるため、次の説明を含むアクショングループ (check-login-status) をもう1つ追加します。

お客様のログイン状態を確認してください。

今回は、これらのリクエストをコードで処理できるように、新しい Lambda 関数を作成するオプションを選択します。

このアクショングループでは、以下の説明を含む関数 (check-customer-login-status-in-login-system という名前) を設定します。

設定から顧客 ID を使用して、ログインシステムで顧客のログイン状態を確認します。

パラメータには文字列型のもう1つの必須パラメータである customer_id を追加します次に、[追加] を選択して 2 番目のアクショングループの作成を完了します。

このアクショングループの設定を開くと、自分のアカウントで作成された Lambda 関数の名前が表示されます。そこで、[表示] を選択して Lambda 関数をコンソールで開きます。

コンソールのスクリーンショット。

Lambda コンソールで、提供されている開始コードを編集し、ビジネスケースを実装します。

import json

def lambda_handler(event, context):
    print(event)
    
    agent = event['agent']
    actionGroup = event['actionGroup']
    function = event['function']
    parameters = event.get('parameters', [])

    # ここでビジネスロジックを実行します。詳細は、下記を参照してください。
    # 参照先:https://docs.aws.amazon.com/bedrock/latest/userguide/agents-lambda.html
    if actionGroup == 'check-login-status' and function == 'check-customer-login-status-in-login-system':
        response = {
            "status": "unknown"
        }
        for p in parameters:
            if p['name'] == 'customer_id' and p['type'] == 'string' and p['value'] == '12345':
                response = {
                    "status": "not verified",
                    "reason": "the email address has not been verified",
                    "solution": "please verify your email address"
                }
    else:
        response = {
            "error": "Unknown action group {} or function {}".format(actionGroup, function)
        }
    
    responseBody =  {
        "TEXT": {
            "body": json.dumps(response)
        }
    }

    action_response = {
        'actionGroup': actionGroup,
        'function': function,
        'functionResponse': {
            'responseBody': responseBody
        }

    }

    dummy_function_response = {'response': action_response, 'messageVersion': event['messageVersion']}
    print("Response: {}".format(dummy_function_response))

    return dummy_function_response

Lambda コンソールで [Deploy] を選択します。この関数は、Amazon Bedrock が関数を呼び出すことを許可するリソースベースのポリシーで設定されています。このため、エージェントが使用する IAM ロールを更新する必要はありません。

エージェントをテストする準備ができました。エージェントを選択した状態で Amazon Bedrock コンソールに戻り、テストエージェントセクションを探します。そこで、「Prepare」を選択してエージェントを準備し、最新の変更でテストします。

エージェントへの入力として、次のサンプルメールを提供します。

差出人:danilop@example.com

件名:ログイン時の問題

こんにちは、アカウントにログインしようとするとエラーが表示され、先に進むことができません。確認してもらえますか? ありがとう、ダニーロ

最初のステップでは、エージェントオーケストレーションは最初のアクショングループ(retrieve-customer-settings)と機能(retrieve-customer-settings-from-crm)を使用することを決定します。この関数は制御を返すように設定されており、コンソールではアクショングループ関数の出力を提供するように求められます。顧客のメールアドレスが入力パラメータとして提供されます。

コンソールのスクリーンショット。

アプリケーションとのやりとりをシミュレートするために、JSON 構文で返信し、[Submit] を選択します。

{ "customer id": 12345 }

次のステップでは、エージェントは 2 番目のアクショングループ (check-login-status) と関数 (check-customer-login-status-in-login system) を使用して Lambda 関数を呼び出すために必要な情報を入手しています。その見返りとして、Lambda 関数は次の JSON ペイロードを提供します。

{
  "status": "not verified",
  "reason": "the email address has not been verified",
  "solution": "please verify your email address"
}

このコンテンツを使用して、エージェントはタスクを完了し、この顧客に適切なソリューションを提案できます。

コンソールのスクリーンショット。

結果には満足していますが、内部で何が起こったのかをもっと知りたいです。エージェントオーケストレーションの各ステップの詳細を確認できる [Show trace] を選択します。これにより、エージェントの決定を理解し、エージェントグループが期待どおりに使用されなかった場合にエージェントグループの構成を修正できます。

コンソールのスクリーンショット。

知っておくべきこと
新しく簡素化されたエクスペリエンスを使用して、米国東部 (バージニア北部) および米国西部 (オレゴン) の AWS リージョンで Amazon Bedrock のエージェントを作成および管理できます

API スキーマを指定したり、アクショングループに Lambda 関数を提供したりせずにエージェントを作成できるようになりました。アクショングループに必要なパラメータをリストするだけです。エージェントを呼び出すときに、実行する操作の詳細を制御に戻して、既存のアプリケーションで操作を処理できるようにするか、期間が Lambda 関数の最大タイムアウトよりも長い場合を選択できます。

Amazon Bedrock のエージェント向け CloudFormation サポートが最近リリースされ、新しい簡略化された構文をサポートするように更新されています。

詳細はこちら。

Danilo

原文はこちらです。