配置 Lambda 函数以发送 Amazon Bedrock 代理从用户那里获得的信息 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置 Lambda 函数以发送 Amazon Bedrock 代理从用户那里获得的信息

您可以定义 Lambda 函数来编程操作组的业务逻辑。在 Amazon Bedrock 代理确定需要在API操作组中调用的操作后,它会将API架构中的信息与相关元数据一起作为输入事件发送到 Lambda 函数。要编写您的函数,您必须了解 Lambda 函数的以下组成部分:

  • 输入事件-包含API操作请求正文中的相关元数据和填充字段,或者代理确定必须调用的操作的函数参数。

  • 响应-包含API操作或函数返回的响应正文的相关元数据和填充字段。

您可以编写 Lambda 函数来定义如何处理操作组,并自定义您希望如何API返回响应。您可以使用输入事件中的变量来定义函数,并向代理返回响应。

注意

一个操作组最多可以包含 11 个API操作,但您只能编写一个 Lambda 函数。由于 Lambda 函数一次只能接收输入事件并返回一个API操作的响应,因此在编写函数时应考虑可能调用的不同API操作。

要让您的代理使用 Lambda 函数,您必须将基于资源的策略附加到该函数,以便为代理提供权限。要了解更多信息,请按照中的步骤操作基于资源的策略,允许 Amazon Bedrock 调用操作组 Lambda 函数。有关 Lambda 中基于资源的策略的更多信息,请参阅中的 Lambda 使用基于资源的策略 AWS 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 – 包含对象列表。每个对象都包含API操作中参数的名称、类型和值,如中所定义 OpenAPI 架构,或者在函数中。

  • 如果您使用API架构定义了操作组,则输入事件将包含以下字段:

    • apiPath— API 操作路径,如中所定义 OpenAPI 架构。

    • httpMethod— API 操作方法,定义在 OpenAPI 架构。

    • 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", ... }, "knowledgeBasesConfiguration": [ { "knowledgeBaseId": "string", "retrievalConfiguration": { "vectorSearchConfiguration": { "numberOfResults": int, "overrideSearchType": "HYBRID | SEMANTIC", "filter": RetrievalFilter 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 object } } } }, ... ] }

以下列表描述了响应字段:

  • messageVersion – 消息的版本,用于标识进入 Lambda 函数的事件数据格式以及 Lambda 函数的预期响应格式。Amazon Bedrock 仅支持版本 1.0。

  • response— 包含有关API响应的以下信息。

    • actionGroup – 操作组的名称。

    • 如果您使用API架构定义了操作组,则响应中可以包含以下字段:

      • apiPath— API 操作路径,如中所定义 OpenAPI 架构。

      • httpMethod— API 操作方法,定义在 OpenAPI 架构。

      • httpStatusCode— API 操作返回的HTTP状态码。

      • responseBody— 包含响应正文,定义见中 OpenAPI 架构。

    • 如果您使用函数详细信息定义了操作组,则响应中可以包含以下字段:

      • responseState(可选)-设置为以下状态之一以定义代理在处理操作后的行为:

        • FAILURE— 代理DependencyFailedException为当前会话抛出。当由于依赖关系失败而导致函数执行失败时适用。

        • REPROMPT— 代理向模型传递响应字符串以重新提示它。当由于输入无效而导致函数执行失败时适用。

      • responseBody— 包含一个对象,用于定义函数执行后的响应。键是内容类型(目前仅TEXT支持),值是包含响应body的对象。

  • (可选)sessionAttributes – 包含会话属性及其值。有关更多信息,请参阅 会话和提示会话属性

  • (可选)promptSessionAttributes – 包含提示属性及其值。有关更多信息,请参阅 会话和提示会话属性

  • (可选)knowledgeBasesConfiguration-包含代理所附知识库的查询配置列表。有关更多信息,请参阅 知识库检索配置

操作组 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