AWS Lambda 函数目标
Lambda 目标允许您将网关连接到实现您的工具的 Lam AWS bda 函数。当您想要执行自定义代码以响应工具调用时,这很有用。
您可以使用 Lambda 服务创建 Lambda AWS 函数。要创建该函数,应执行以下操作:
-
创建用于定义 Lambda 函数可以调用的工具的工具架构。
-
了解 Lambda 输入格式。然后,您可以使用自己选择的语言按照《AWS Lambda 开发者构建指南》中的步骤进行操作。
创建函数后,您可以为网关配置访问该函数的权限。
查看关键注意事项和限制,以帮助您决定 Lambda 目标是否适用于您的用例。如果是,则可以创建工具架构和 Lambda 函数,然后为网关设置访问目标的权限。选择一个主题以了解更多信息:
主要考虑因素和限制
使用 Lambda 目标时,请注意以下限制和注意事项:
-
需要手动从 Lambda 函数 AWS 的工具名称中删除工具名称前缀。有关更多信息,请参阅了解 AgentCore 网关工具的命名方式。
-
如果您使用的是现有 AWS Lambda 函数并将其作为工具导入网关,则需要更改函数代码以应对事件和上下文对象的架构更改
-
Lambda 函数必须返回可由网关解析的有效 JSON 响应
-
应适当配置 Lambda 函数超时,以处理工具的预期处理时间
-
考虑在 lLambda 函数中实现错误处理,以便向客户端提供有意义的错误消息
Lambda 函数工具架构
本节介绍工具架构的结构,该架构定义了您的 Lambda 函数可以返回的工具。定义工具架构后,您可以执行以下操作之一:
-
将其上传到 Amazon S3 存储桶,并在将目标添加到网关时参考 S3 位置。
-
将目标添加到网关时,内联粘贴定义。
选择一个主题以了解有关工具架构详细信息的更多信息或查看示例:
工具定义
当您将 Lambda 函数添加为网关目标时,您在提供目标ToolDefinition配置时提供。工具定义的结构如下:
{ "name": "string", "description": "string", "inputSchema": { "type": "object", "description" "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }, "outputSchema": { "type": "object", "description" "string", "properties": { "string": SchemaDefinition }, "required": ["string"] } }
工具定义包含以下字段:
-
名称(必填)-工具的名称。
-
描述(必填)-对工具及其用途和用法的描述。
-
InputSchema(必填)— 一个 JSON 对象,用于定义该工具接受的输入的结构。
-
O@@ utputSchema(可选)— 一个 JSON 对象,用于定义该工具生成的输出结构。
inputSchema和outputSchema字段都映射到对象类型 SchemaDefinition,如下节所述。
输入和输出架构的顶级架构定义
工具定义顶层的inputSchema和outputSchema字段都映射到包含以下字段的对象类型 SchemaDefinition:
{ "type": "object", "description": "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }
-
类型(必填)-必须是
object。 -
描述(可选)-对架构及其目的和用法的描述。
-
属性(可选)-定义工具属性或参数的 JSON 对象。每个键都是一个属性的名称,并映射到定义该属性的SchemaDefinition对象。
-
re quired(可选)— 枚举对象中所需属性的数组。
properties
如果您包含用于定义工具参数的properties字段,则可以为每个参数提供架构定义。下一节将概述不同类型的架构定义。
属性架构定义
顶级架构中的每个属性都SchemaDefinition映射到一个要求与顶级架构定义略有不同的SchemaDefinition对象。可用字段取决于属type性的属性。要查看某一类型的形状,请从以下选项卡中进行选择:SchemaDefinition
例
如果包含另一个对象类型属性,则将以递归方式添加另一个对象类型属性。SchemaDefinition
Lambda 工具定义示例
选择一个选项卡,查看可以包含在 Lambda 函数中的示例工具定义。
例
Lambda 函数输入格式
当 Amazon Bedrock AgentCore 网关调用 Lambda 函数时,它会向该函数传递一个event对象和一个context对象。您编写的 Lambda 事件处理程序可以访问这些对象中的值。
事件对象
工具返回的properties从inputSchema到其值的地图。例如,如果您的输入架构包含属性和keywords和category,则事件对象可能如下所示:
{ "keywords": "wireless headphones", "category": "electronics" }
上下文对象
包含以下元数据:
-
基岩 AgentCoreMessageVersion — 消息的版本。
-
基岩 AgentCoreAwsRequestId — 向 Amazon Bedrock AgentCore 服务提出的请求的 ID。
-
基石 AgentCoreMcpMessageId — 发送到 MCP 服务器的消息的 ID。
-
bedrock AgentCoreGatewayId — 被调用的网关的 ID。
-
bedrock AgentCoreTargetId — 被调用的网关目标的 ID。
-
基岩 AgentCoreToolName — 被调用的工具的名称。工具名称的格式为
${target_name}_${tool_name}。
上下文对象的格式如下:
{ "bedrockAgentCoreMessageVersion": "1.0", "bedrockAgentCoreAwsRequestId": "string", "bedrockAgentCoreMcpMessageId": "string", "bedrockAgentCoreGatewayId": "string", "bedrockAgentCoreTargetId": "string", "bedrockAgentCoreToolName": "string" }
您编写的 Lambda 函数可以访问事件和上下文对象的属性。你可以使用以下样板代码开始使用:
# Access context properties in your Lambda function def lambda_handler(event, context): # Since the visible tool name includes the target name as a prefix, we can use this delimiter to strip the prefix delimiter = "___" # Get the tool name from the context originalToolName = context.client_context.custom['bedrockAgentCoreToolName'] toolName = originalToolName[originalToolName.index(delimiter) + len(delimiter):] # Get other context properties message_version = context.client_context.custom['bedrockAgentCoreMessageVersion'] aws_request_id = context.client_context.custom['bedrockAgentCoreAwsRequestId'] mcp_message_id = context.client_context.custom['bedrockAgentCoreMcpMessageId'] gateway_id = context.client_context.custom['bedrockAgentCoreGatewayId'] target_id = context.client_context.custom['bedrockAgentCoreTargetId'] # Process the request based on the tool name if tool_name == 'searchProducts': # Handle searchProducts tool pass elif tool_name == 'getProductDetails': # Handle getProductDetails tool pass else: # Handle unknown tool pass