Amazon Bedrock のアクショングループを満たすために Amazon Bedrock エージェントがユーザーから引き出す情報を送信するように Lambda 関数を設定する - Amazon Bedrock

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

Amazon Bedrock のアクショングループを満たすために Amazon Bedrock エージェントがユーザーから引き出す情報を送信するように Lambda 関数を設定する

Lambda 関数を定義して、アクショングループのビジネスロジックをプログラムできます。Amazon Bedrock エージェントは、アクショングループで呼び出す必要がある API オペレーションを決定した後、関連するメタデータとともに API スキーマから情報を入力イベントとして Lambda 関数に送信します。関数を記述するには、Lambda 関数の以下のコンポーネントを理解する必要があります。

  • 入力イベント – API オペレーションのリクエストボディ、またはエージェントが呼び出す必要があると判断したアクションの関数パラメータからの、関連するメタデータと入力済みフィールドが含まれます。

  • レスポンス — API オペレーションまたは 関数から返されるレスポンス本文に関連するメタデータと入力済みフィールドが含まれます。

Lambda 関数を記述して、アクショングループの処理方法を定義し、API レスポンスを返す方法をカスタマイズします。入力イベントの変数を使用して関数を定義し、エージェントにレスポンスを返します。

注記

アクショングループには最大 11 個の API オペレーションを含めることができますが、記述できる Lambda 関数は 1 つだけです。Lambda 関数は入力イベントのみを受信し、一度に 1 つの API オペレーションのレスポンスを返すことができるため、呼び出される可能性のあるさまざまな API オペレーションを考慮して関数を記述する必要があります。

エージェントが Lambda 関数を使用するには、リソースベースのポリシーを関数にアタッチして、エージェントにアクセス許可を付与する必要があります。詳細については、「」の手順に従ってくださいAmazon Bedrock がアクショングループ Lambda 関数を呼び出すことを許可するリソースベースのポリシー。Lambda のリソースベースのポリシーの詳細については、「 AWS Lambda デベロッパーガイド」の「Lambda のリソースベースのポリシーの使用」を参照してください。

アクショングループの作成中に関数を定義する方法については、「」を参照してくださいAmazon Bedrock でアクショングループをエージェントに追加する

Amazon Bedrock からのLambda 入力イベント

Lambda 関数を使用するアクショングループが呼び出されると、Amazon Bedrock は次の一般的な形式の Lambda 入力イベントを送信します。Lambda 関数を定義して、入力イベントフィールドのいずれかを使用して関数内のビジネスロジックを操作し、アクションを正常に実行できます。Lambda 関数の詳細については、「 AWS Lambda デベロッパーガイド」の「イベント駆動型呼び出し」を参照してください。

入力イベントの形式は、アクショングループを API スキーマで定義したか、関数の詳細で定義したかによって異なります。

  • API スキーマでアクショングループを定義した場合、入力イベント形式は次のとおりです。

    { "messageVersion": "1.0", "agent": { "name": "string", "id": "string", "alias": "string", "version": "string" }, "inputText": "string", "sessionId": "string", "actionGroup": "string", "apiPath": "string", "httpMethod": "string", "parameters": [ { "name": "string", "type": "string", "value": "string" }, ... ], "requestBody": { "content": { "<content_type>": { "properties": [ { "name": "string", "type": "string", "value": "string" }, ... ] } } }, "sessionAttributes": { "string": "string", }, "promptSessionAttributes": { "string": "string" } }
  • 関数の詳細を使用してアクショングループを定義した場合、入力イベント形式は次のとおりです。

    { "messageVersion": "1.0", "agent": { "name": "string", "id": "string", "alias": "string", "version": "string" }, "inputText": "string", "sessionId": "string", "actionGroup": "string", "function": "string", "parameters": [ { "name": "string", "type": "string", "value": "string" }, ... ], "sessionAttributes": { "string": "string", }, "promptSessionAttributes": { "string": "string" } }

次のリストでは、入力イベントフィールドについて説明します。

  • messageVersion – Lambda 関数に渡されるイベントデータの形式と Lambda 関数から返す必要があるレスポンスの形式を識別するメッセージのバージョン。Amazon Bedrock ではバージョン 1.0 のみがサポートされています。

  • agent - アクショングループが属するエージェントの名前、ID、エイリアス、バージョンに関する情報が含まれます。

  • inputText - 会話のターンに対するユーザー入力。

  • sessionId - エージェントセッションの一意な識別子。

  • actionGroup — アクショングループの名前。

  • parameters - オブジェクトのリストが含まれます。各オブジェクトには、OpenAPIスキーマまたは 関数で定義されている API オペレーションのパラメータの名前、タイプ、値が含まれます。

  • API スキーマでアクショングループを定義した場合、入力イベントには次のフィールドが含まれます。

    • apiPath – OpenAPIスキーマで定義されている API オペレーションへのパス。

    • httpMethod – OpenAPIスキーマで定義されている API オペレーションのメソッド。

    • requestBody – アクショングループのOpenAPIスキーマで定義されているリクエスト本文とそのプロパティが含まれます。

  • 関数の詳細を使用してアクショングループを定義した場合、入力イベントには次のフィールドが含まれます。

    • function – アクショングループの関数の詳細で定義されている関数の名前。

  • sessionAttributesセッション属性とその値が含まれます。これらの属性はセッションを介して保存され、エージェントのコンテキストを提供します。

  • promptSessionAttributesプロンプトセッション属性とその値が含まれます。これらの属性はターンで保存され、エージェントのコンテキストを提供します。

Amazon Bedrock へのLambda レスポンスイベント

Amazon Bedrock は、以下の形式と一致する、Lambda 関数からのレスポンスを想定しています。レスポンスは、 API オペレーションから返されるパラメータで構成されます。エージェントは Lambda 関数からのレスポンスを使用して、さらなるオーケストレーションを行ったり、カスタマーにレスポンスを返すのをサポートします。

注記

Lambda ペイロードレスポンスの最大サイズは 25 KB です。

入力イベントの形式は、アクショングループを API スキーマで定義したか、関数の詳細で定義したかによって異なります。

  • API スキーマでアクショングループを定義した場合、レスポンスの形式は次のとおりです。

    { "messageVersion": "1.0", "response": { "actionGroup": "string", "apiPath": "string", "httpMethod": "string", "httpStatusCode": number, "responseBody": { "<contentType>": { "body": "JSON-formatted string" } } }, "sessionAttributes": { "string": "string", }, "promptSessionAttributes": { "string": "string" } }
  • 関数の詳細を使用してアクショングループを定義した場合、レスポンスの形式は次のとおりです。

    { "messageVersion": "1.0", "response": { "actionGroup": "string", "function": "string", "functionResponse": { "responseState": "FAILURE | REPROMPT", "responseBody": { "<functionContentType>": { "body": "JSON-formatted string" } } } }, "sessionAttributes": { "string": "string", }, "promptSessionAttributes": { "string": "string" } }

次のリストでは、レスポンスフィールドについて説明します。

  • messageVersion – Lambda 関数に渡されるイベントデータの形式と Lambda 関数から返す必要があるレスポンスの形式を識別するメッセージのバージョン。Amazon Bedrock ではバージョン 1.0 のみがサポートされています。

  • response — API レスポンスに関する次の情報が含まれています。

    • actionGroup — アクショングループの名前。

    • API スキーマを使用してアクショングループを定義した場合、レスポンスに次のフィールドを含めることができます。

      • apiPath – OpenAPIスキーマで定義されている API オペレーションへのパス。

      • httpMethod – OpenAPIスキーマで定義されている API オペレーションのメソッド。

      • httpStatusCode – API オペレーションから返される HTTP ステータスコード。

      • responseBody – OpenAPIスキーマで定義されているレスポンス本文が含まれます。

    • 関数の詳細を使用してアクショングループを定義した場合、次のフィールドをレスポンスに含めることができます。

      • responseState (オプション) – アクションを処理した後のエージェントの動作を定義するには、次のいずれかの状態に設定します。

        • FAILURE – エージェントは現在のセッションDependencyFailedExceptionの をスローします。依存関係の障害により関数の実行が失敗した場合に適用されます。

        • REPROMPT – エージェントは応答文字列をモデルに渡して、モデルをリプロンプトします。無効な入力が原因で関数の実行が失敗した場合に適用されます。

      • responseBody – 関数の実行からのレスポンスを定義する オブジェクトが含まれます。キーはコンテンツタイプ (現在TEXTは のみがサポートされています) で、値はレスポンスbodyの を含むオブジェクトです。

  • (オプション) sessionAttributes – セッション属性とその値が含まれます。

  • (オプション) promptSessionAttributes – プロンプト属性とその値が含まれます。

アクショングループ Lambda 関数の例

以下は、 で Lambda 関数を定義する方法の最小限の例ですPython。アクショングループをOpenAPIスキーマで定義したか、関数の詳細で定義したかに対応するタブを選択します。

OpenAPI schema
def lambda_handler(event, context): agent = event['agent'] actionGroup = event['actionGroup'] api_path = event['apiPath'] # get parameters get_parameters = event.get('parameters', []) # post parameters post_parameters = event['requestBody']['content']['application/json']['properties'] response_body = { 'application/json': { 'body': "sample response" } } action_response = { 'actionGroup': event['actionGroup'], 'apiPath': event['apiPath'], 'httpMethod': event['httpMethod'], 'httpStatusCode': 200, 'responseBody': response_body } session_attributes = event['sessionAttributes'] prompt_session_attributes = event['promptSessionAttributes'] api_response = { 'messageVersion': '1.0', 'response': action_response, 'sessionAttributes': session_attributes, 'promptSessionAttributes': prompt_session_attributes } return api_response
Function details
def lambda_handler(event, context): agent = event['agent'] actionGroup = event['actionGroup'] function = event['function'] parameters = event.get('parameters', []) response_body = { 'TEXT': { 'body': "sample response" } } function_response = { 'actionGroup': event['actionGroup'], 'function': event['function'], 'functionResponse': { 'responseBody': response_body } } session_attributes = event['sessionAttributes'] prompt_session_attributes = event['promptSessionAttributes'] action_response = { 'messageVersion': '1.0', 'response': function_response, 'sessionAttributes': session_attributes, 'promptSessionAttributes': prompt_session_attributes } return action_response