View a markdown version of this page

Amazon Lambda 函数目标 - Amazon Bedrock AgentCore
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

Amazon Lambda 函数目标

Lambda 目标允许您将网关连接到实现您的工具的 Lam Amazon bda 函数。当您想要执行自定义代码以响应工具调用时,这很有用。

您可以使用 Lambda 服务创建 Lambda Amazon 函数。要创建该函数,应执行以下操作:

  • 创建用于定义 Lambda 函数可以调用的工具的工具架构。

  • 了解 Lambda 输入格式。然后,您可以使用自己选择的语言按照《Amazon Lambda 开发者构建指南》中的步骤进行操作。

创建函数后,您可以为网关配置访问该函数的权限。

查看关键注意事项和限制,以帮助您决定 Lambda 目标是否适用于您的用例。如果是,则可以创建工具架构和 Lambda 函数,然后为网关设置访问目标的权限。选择一个主题以了解更多信息:

主要考虑因素和限制

使用 Lambda 目标时,请注意以下限制和注意事项:

  • 需要手动从 Lambda 函数 Amazon 的工具名称中删除工具名称前缀。有关更多信息,请参阅了解 AgentCore 网关工具的命名方式。

  • 如果您使用的是现有 Amazon Lambda 函数并将其作为工具导入网关,则需要更改函数代码以应对事件和上下文对象的架构更改

  • Lambda 函数必须返回可由网关解析的有效 JSON 响应

  • 应适当配置 Lambda 函数超时,以处理工具的预期处理时间

  • 考虑在 Lambda 函数中实现错误处理,以便向客户端提供有意义的错误消息

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

例
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 事件处理程序可以访问这些对象中的值。

事件对象

工具返回的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