Configurar as funções do Lambda para enviar as informações que um agente do Amazon Bedrock obtém do usuário - Amazon Bedrock

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

É possível definir uma função do Lambda para programar a lógica de negócios de um grupo de ação. Depois que o 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 com 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. Para obter mais informações sobre as políticas baseadas em recurso no Lambda, consulte Usar políticas baseadas em recurso no Guia do desenvolvedor do 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.

Evento de entrada do Lambda originado no Amazon Bedrock

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 no Guia do desenvolvedor do 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 e seus valores. Esses atributos são armazenados em uma sessão e fornecem contexto ao agente.

  • promptSessionAttributes: contém os atributos da sessão de prompt e seus valores. Esses atributos são armazenados em um turno e fornecem contexto para o agente.

Evento de resposta do Lambda ao Amazon Bedrock

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 carga útil da resposta do Lambda é de 25 GB.

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 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 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ção.

    • 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.

  • (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.

  • (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.

Exemplo de função do Lambda do grupo de ação

Veja a seguir um exemplo mínimo de como a função do Lambda pode ser definida no 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