

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

# Amazon Bedrock エージェントがユーザーから引き出す情報を送信するように Lambda 関数を設定する
<a name="agents-lambda"></a>

Lambda 関数を定義して、アクショングループのビジネスロジックをプログラムできます。Amazon Bedrock エージェントは、アクショングループで呼び出す必要がある API オペレーションを決定した後、API スキーマからの情報を、関連するメタデータとともに入力イベントとして Lambda 関数に送信します。関数を記述するには、Lambda 関数の次のコンポーネントを理解する必要があります。
+ **入力イベント** – エージェントが呼び出す必要があると判断したアクションの、API オペレーションまたは関数パラメータのリクエスト本文に関連するメタデータと入力済みフィールドが含まれます。
+ **レスポンス** – API オペレーションまたは関数から返されたレスポンス本文に関連するメタデータと入力済みフィールドが含まれます。

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

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

エージェントで Lambda 関数を使用できるようにするには、関数にリソースベースのポリシーをアタッチし、エージェントにアクセス許可を付与する必要があります。詳細については、「[Amazon Bedrock がアクショングループの Lambda 関数を呼び出すことを許可するリソースベースのポリシー](agents-permissions.md#agents-permissions-lambda)」の手順に従ってください。Lambda のリソースベースのポリシーの詳細については、「 AWS Lambda デベロッパーガイド」の[「Lambda のリソースベースのポリシー](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)の使用」を参照してください。

アクショングループの作成時に関数を定義する方法については、「[Amazon Bedrock のエージェントにアクショングループを追加する](agents-action-add.md)」を参照してください。

**Topics**
+ [Amazon Bedrock からのLambda 入力イベント](#agents-lambda-input)
+ [Amazon Bedrock へのLambda レスポンスイベント](#agents-lambda-response)
+ [アクショングループ Lambda 関数の例](#agents-lambda-example)

## Amazon Bedrock からのLambda 入力イベント
<a name="agents-lambda-input"></a>

Lambda 関数を使用するアクショングループが呼び出されると、Amazon Bedrock は次の一般的な形式の Lambda 入力イベントを送信します。任意の入力イベントフィールドを使用して関数内のビジネスロジックを操作し、アクションを正常に実行するように Lambda 関数を定義できます。Lambda 関数の詳細については、 AWS Lambda デベロッパーガイドの[「イベント駆動型呼び出し](https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html#event-driven-invocation)」を参照してください。

入力イベントの形式は、アクショングループを 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` - [セッション属性](agents-session-state.md)とその値が含まれます。これらの属性は[セッション](advanced-prompts.md#advanced-prompts-terminology)の間保存され、エージェントにコンテキストを提供します。
+ `promptSessionAttributes` - [プロンプトセッション属性](agents-session-state.md)とその値が含まれます。これらの属性は[ターン](advanced-prompts.md#advanced-prompts-terminology)の間保存され、エージェントにコンテキストを提供します。

## Amazon Bedrock へのLambda レスポンスイベント
<a name="agents-lambda-response"></a>

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

**注記**  
ペイロードレスポンスの最大サイズは、Lambda 関数からの同期レスポンスの最大サイズと一致します。詳細については、「 AWS Lambda デベロッパーガイド」の*「呼び出しペイロード*リソース[クォータ](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution)」を参照してください。

入力イベントの形式は、アクショングループを 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",
          ...
      },
      "knowledgeBasesConfiguration": [
          {
              "knowledgeBaseId": "string",
              "retrievalConfiguration": {
                  "vectorSearchConfiguration": {
                      "numberOfResults": int,
                      "overrideSearchType": "HYBRID | SEMANTIC",
                      "filter": [RetrievalFilter](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrievalFilter.html) object
                  }
              }
          },
          ...
      ]
  }
  ```
+ 関数の詳細でアクショングループを定義した場合、レスポンスの形式は次のとおりです。

  ```
  {
      "messageVersion": "1.0",
      "response": {
          "actionGroup": "string",
          "function": "string",
          "functionResponse": {
              "responseState": "FAILURE | REPROMPT",
              "responseBody": {
                  "<functionContentType>": { 
                      "body": "JSON-formatted string"
                  }
              }
          }
      },
      "sessionAttributes": {
          "string": "string",
      },
      "promptSessionAttributes": {
          "string": "string"
      },
      "knowledgeBasesConfiguration": [
          {
              "knowledgeBaseId": "string",
              "retrievalConfiguration": {
                  "vectorSearchConfiguration": {
                      "numberOfResults": int,
                      "filter": {
                          [RetrievalFilter](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrievalFilter.html) object
                      }
                  }
              }
          },
          ...
      ]
  }
  ```

次のリストは、レスポンスのフィールドについて説明しています。
+ `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` – セッション属性とその値が含まれます。詳細については、「[セッション属性とプロンプトセッション属性](agents-session-state.md#session-state-attributes)」を参照してください。
+ (オプション) `promptSessionAttributes` – プロンプト属性とその値が含まれます。詳細については、「[セッション属性とプロンプトセッション属性](agents-session-state.md#session-state-attributes)」を参照してください。
+ (オプション) `knowledgeBasesConfiguration` – エージェントにアタッチされたナレッジベースのクエリ設定のリストが含まれます。詳細については、「[ナレッジベースの取得設定](agents-session-state.md#session-state-kb)」を参照してください。

## アクショングループ Lambda 関数の例
<a name="agents-lambda-example"></a>

以下は、 で 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
```

------