本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
配置 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 中基于资源的策略的更多信息,请参阅《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
– 包含对象列表。每个对象都包含 API 操作中参数的名称、类型和值,如 OpenAPI 架构或函数中所定义。 -
如果您使用 API 架构定义操作组,则输入事件包含以下字段:
-
apiPath
– API 操作的路径,如 OpenAPI 架构中所定义。 -
httpMethod
– API 操作的方法,如 OpenAPI 架构中所定义。 -
requestBody
– 包含请求正文及其属性,如操作组的 OpenAPI 架构中所定义。
-
-
如果您使用函数详细信息定义操作组,则输入事件包含以下字段:
-
function
– 操作组的函数详细信息中定义的函数名称。
-
对 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 函数示例
以下是如何在 Python 中定义 Lambda 函数的最简单示例。根据您是使用 OpenAPI 架构还是函数详细信息定义操作组来选择相应的选项卡: