View a markdown version of this page

AWS Lambda 函数目标 - Amazon Bedrock AgentCore

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 对象,用于定义该工具生成的输出结构。

inputSchemaoutputSchema字段都映射到对象类型 SchemaDefinition,如下节所述。

输入和输出架构的顶级架构定义

工具定义顶层的inputSchemaoutputSchema字段都映射到包含以下字段的对象类型 SchemaDefinition

{ "type": "object", "description": "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }
  • 类型(必填)-必须是object

  • 描述(可选)-对架构及其目的和用法的描述。

  • 属性(可选)-定义工具属性或参数的 JSON 对象。每个键都是一个属性的名称,并映射到定义该属性的SchemaDefinition对象。

  • re quired(可选)— 枚举对象中所需属性的数组。properties

如果您包含用于定义工具参数的properties字段,则可以为每个参数提供架构定义。下一节将概述不同类型的架构定义。

属性架构定义

顶级架构中的每个属性都SchemaDefinition映射到一个要求与顶级架构定义略有不同的SchemaDefinition对象。可用字段取决于属type性的属性。要查看某一类型的形状,请从以下选项卡中进行选择:SchemaDefinition

String
  1. f SchemaDefinition or a string 属性的结构如下:

    { "type": "string", "description": "string" }
Number
  1. f SchemaDefinition or a number 属性的结构如下:

    { "type": "number", "description": "string" }
Integer
  1. 整数属性的结构如下:SchemaDefinition

    { "type": "integer", "description": "string" }
Boolean
  1. f SchemaDefinition or 布尔属性的结构如下:

    { "type": "boolean", "description": "string" }
Array
  1. f SchemaDefinition or a array 属性的结构如下:

    { "type": "array", "description": "string", "items": SchemaDefinition }

    items字段的值SchemaDefinition是 a,它定义了数组中每项的结构。

Object
  1. fo SchemaDefinition r a object 属性的结构如下,并且与顶级属性架构定义相匹配。

    { "type": "object", "description": "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }

如果包含另一个对象类型属性,则将以递归方式添加另一个对象类型属性。SchemaDefinition

Lambda 工具定义示例

选择一个选项卡,查看可以包含在 Lambda 函数中的示例工具定义。

Weather tool
  1. 以下get_weather工具需要location字符串参数,可用于返回该位置的天气:

    { "name": "get_weather", "description": "Get weather for a location", "inputSchema": { "type": "object", "properties": { "location": { "type": "string", "description": "the location e.g. seattle, wa" } }, "required": [ "location" ] } }
Time tool
  1. 以下get_time工具需要timezone字符串参数,可用于返回该时区的时间:

    { "name": "get_time", "description": "Get time for a timezone", "inputSchema": { "type": "object", "properties": { "timezone": { "type": "string" } }, "required": [ "timezone" ] } }

Lambda 函数输入格式

当 Amazon Bedrock AgentCore 网关调用 Lambda 函数时,它会向该函数传递一个event对象和一个context对象。您编写的 Lambda 事件处理程序可以访问这些对象中的值。

事件对象

工具返回的propertiesinputSchema到其值的地图。例如,如果您的输入架构包含属性和keywordscategory,则事件对象可能如下所示:

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