

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Configurar as funções do Lambda para enviar as informações que um agente do Amazon Bedrock obtém do usuário
<a name="agents-lambda"></a>

É possível definir uma função do Lambda para programar a lógica de negócios de um grupo de ação. Depois que um agente do Amazon Bedrock determina a operação de API que precisa ser invocada em um grupo de ação, ele envia informações do esquema da API e metadados relevantes como um evento de entrada para a função do Lambda. Para escrever a função, você precisa compreender os seguintes componentes da função do Lambda:
+ **Evento de entrada**: contém os metadados relevantes e os campos preenchidos do corpo da solicitação da operação de API ou dos parâmetros da função da ação que o agente determina que deve ser chamada.
+ **Resposta**: contém os metadados relevantes e os campos preenchidos do corpo da resposta retornada da operação de API ou da função.

Você escreve a função do Lambda para definir como tratar um grupo de ação e personalizar como deseja que a resposta da API seja retornada. Use as variáveis do evento de entrada para definir as funções e retornar uma resposta ao agente.

**nota**  
Um grupo de ação pode conter até 11 operações de API, mas você só pode escrever uma função do Lambda. Como a função do Lambda só pode receber um evento de entrada e retornar uma resposta para uma operação de API por vez, escreva a função considerando as diferentes operações de API que podem ser invocadas.

Para que o agente use uma função do Lambda, você deve anexar uma política baseada em recurso à função a fim de fornecer permissões ao agente. Para obter mais informações, consulte [Política baseada em recurso para permitir que o Amazon Bedrock invoque uma função do Lambda do grupo de ação](agents-permissions.md#agents-permissions-lambda). Para obter mais informações sobre políticas baseadas em recursos no Lambda, consulte [Usando políticas baseadas em recursos para o Lambda no Guia do](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) Desenvolvedor. AWS Lambda 

Para saber como definir uma função ao criar o grupo de ação, consulte [Adicionar um grupo de ação ao agente no Amazon Bedrock](agents-action-add.md).

**Topics**
+ [Evento de entrada do Lambda originado no Amazon Bedrock](#agents-lambda-input)
+ [Evento de resposta do Lambda ao Amazon Bedrock](#agents-lambda-response)
+ [Exemplo de função do Lambda do grupo de ação](#agents-lambda-example)

## Evento de entrada do Lambda originado no Amazon Bedrock
<a name="agents-lambda-input"></a>

Quando um grupo de ação que utiliza uma função do Lambda é invocado, o Amazon Bedrock envia um evento de entrada do Lambda com o formato geral a seguir. É possível definir a função do Lambda para usar qualquer um dos campos de eventos de entrada para manipular a lógica de negócios dentro da função para executar a ação com sucesso. Para obter mais informações sobre as funções do Lambda, consulte [Invocação orientada por eventos](https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html#event-driven-invocation) no Guia do desenvolvedor. AWS Lambda 

O formato do evento de entrada depende de se você definiu o grupo de ação com um esquema de API ou com detalhes da função:
+ Se você tiver definido o grupo de ação com um esquema de API, o formato do evento de entrada será o seguinte:

  ```
  {
      "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"
      }
  }
  ```
+ Se você tiver definido o grupo de ação com detalhes da função, o formato do evento de entrada será o seguinte:

  ```
  {
      "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"
      }
  }
  ```

A lista a seguir descreve os campos no esquema.
+ `messageVersion`: a versão da mensagem que identifica o formato dos dados do evento que estão indo para a função do Lambda e o formato esperado da resposta de uma função do Lambda. O Amazon Bedrock só oferece suporte à versão 1.0.
+ `agent`: contém informações sobre o nome, o ID, o alias e a versão do agente ao qual o grupo de ação pertence.
+ `inputText`: a entrada do usuário para o turno de conversa.
+ `sessionId`: o identificador exclusivo da sessão do agente.
+ `actionGroup`: o nome do grupo de ação.
+ `parameters`: contém uma lista de objetos. Cada objeto contém o nome, o tipo e o valor de um parâmetro na operação de API, conforme definido no esquema OpenAPI ou na função.
+ Se você tiver definido o grupo de ação com um esquema de API, o evento de entrada conterá os seguintes campos:
  + `apiPath`: o caminho para a operação de API, conforme definido no esquema OpenAPI.
  + `httpMethod`: o método da operação de API, conforme definido no esquema OpenAPI.
  + `requestBody`: contém o corpo da solicitação e suas propriedades, conforme definido no esquema OpenAPI.
+ Se você tiver definido o grupo de ação com detalhes da função, o evento de entrada conterá o seguinte campo:
  + `function`: o nome da função conforme definido nos detalhes da função do grupo de ação.
+ `sessionAttributes`: contém os [atributos da sessão](agents-session-state.md) e seus valores. Esses atributos são armazenados em uma [sessão](advanced-prompts.md#advanced-prompts-terminology) e fornecem contexto ao agente.
+ `promptSessionAttributes`: contém os [atributos da sessão de prompt](agents-session-state.md) e seus valores. Esses atributos são armazenados em um [turno](advanced-prompts.md#advanced-prompts-terminology) e fornecem contexto para o agente.

## Evento de resposta do Lambda ao Amazon Bedrock
<a name="agents-lambda-response"></a>

O Amazon Bedrock espera uma resposta da função do Lambda no formato a seguir. A resposta consiste em parâmetros retornados da operação de API. O agente pode usar a resposta da função do Lambda para orquestração adicional ou para ajudar a retornar uma resposta ao cliente.

**nota**  
O tamanho máximo da resposta da carga útil corresponde ao tamanho máximo de uma resposta síncrona da função do Lambda. Para obter mais informações, consulte a [cota](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution) de recursos de *carga útil de invocação* no Guia do desenvolvedor. AWS Lambda 

O formato do evento de entrada depende de se você definiu o grupo de ação com um esquema de API ou com detalhes da função:
+ Se você tiver definido o grupo de ação com um esquema de API, o formato da resposta será o seguinte:

  ```
  {
      "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
                  }
              }
          },
          ...
      ]
  }
  ```
+ Se você tiver definido o grupo de ação com detalhes da função, o formato do evento de entrada será o seguinte:

  ```
  {
      "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
                      }
                  }
              }
          },
          ...
      ]
  }
  ```

A seguinte lista descreve os campos da resposta:
+ `messageVersion`: a versão da mensagem que identifica o formato dos dados do evento que estão indo para a função do Lambda e o formato esperado da resposta de uma função do Lambda. O Amazon Bedrock só oferece suporte à versão 1.0.
+ `response`: contém as seguintes informações sobre a resposta da API.
  + `actionGroup`: o nome do grupo de ações.
  + Se você tiver definido o grupo de ação com um esquema de API, a resposta poderá conter os seguintes campos:
    + `apiPath`: o caminho para a operação de API, conforme definido no esquema OpenAPI.
    + `httpMethod`: o método da operação de API, conforme definido no esquema OpenAPI.
    + `httpStatusCode`: o código de status HTTP retornado da operação de API.
    + `responseBody`: contém o corpo da resposta, conforme definido no esquema OpenAPI.
  + Se você tiver definido o grupo de ação com os detalhes da função, a resposta poderá conter os seguintes campos:
    + `responseState` (opcional): defina um dos seguintes estados para especificar o comportamento do agente após o processamento da ação:
      + FAILURE: o agente lança um `DependencyFailedException` para a sessão atual. Aplica-se quando a execução da função falha devido a uma falha de dependência.
      + REPROMPT: o agente passa uma string de resposta ao modelo para solicitá-la novamente. Aplica-se quando a execução da função falha devido a uma entrada inválida.
    + `responseBody`: contém um objeto que define a resposta da execução da função. A chave é o tipo de conteúdo (no momento somente `TEXT` é compatível) e o valor é um objeto que contém o `body` da resposta.
+ (Opcional) `sessionAttributes`: contém os atributos da sessão e seus valores. Para obter mais informações, consulte [Atributos da sessão e da sessão de prompt](agents-session-state.md#session-state-attributes).
+ (Opcional) `promptSessionAttributes`: contém os atributos do prompt e seus valores. Para obter mais informações, consulte [Atributos da sessão e da sessão de prompt](agents-session-state.md#session-state-attributes).
+ (Opcional) `knowledgeBasesConfiguration`: contém uma lista de configurações de consulta de bases de conhecimento anexadas ao agente. Para obter mais informações, consulte [Configurações de recuperação da base de conhecimento](agents-session-state.md#session-state-kb).

## Exemplo de função do Lambda do grupo de ação
<a name="agents-lambda-example"></a>

A seguir está um exemplo mínimo de como a função Lambda pode ser definida em. Python Selecione a guia correspondente quer você tenha definido o grupo de ação com um esquema de OpenAPI ou com detalhes da função:

------
#### [ 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
```

------