View a markdown version of this page

AWS Lambda 函數目標 - Amazon Bedrock AgentCore

AWS Lambda 函數目標

Lambda 目標可讓您將閘道連線至實作工具的 AWS Lambda 函數。當您想要執行自訂程式碼以回應工具叫用時,這會很有用。

您可以使用 Lambda 服務建立 AWS Lambda 函數。若要建立 函數,您應該執行下列動作:

  • 建立工具結構描述,定義 Lambda 函數可以呼叫的工具。

  • 了解 Lambda 輸入格式。然後,您可以依照 AWS Lambda 建置開發人員指南中的步驟,使用您選擇的語言。

建立 函數之後,您可以設定閘道的許可,以便能夠存取它。

檢閱關鍵考量事項和限制,以協助您決定 Lambda 目標是否適用於您的使用案例。如果是,您可以建立工具結構描述和 Lambda 函數,然後設定閘道的許可以存取目標。選取主題以進一步了解:

重要考量和限制

使用 Lambda 目標時,請注意下列限制和考量:

  • 工具名稱字首將需要從 AWS Lambda 函數中的工具名稱手動分割。如需詳細資訊,請參閱了解 AgentCore Gateway 工具的命名方式

  • 如果您使用現有的 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"] } }

工具定義包含下列欄位:

  • name (必要) – 工具的名稱。

  • description (必要) – 工具及其用途和用量的描述。

  • inputSchema (必要) – 定義工具接受之輸入結構的 JSON 物件。

  • outputSchema (選用) – 定義工具產生之輸出結構的 JSON 物件。

inputSchemaoutputSchema 欄位都會對應至物件類型 SchemaDefinition ,如下節所述。

輸入和輸出結構描述的頂層結構描述定義

工具定義最上層的 inputSchemaoutputSchema 欄位都會對應至包含下列欄位的物件類型 SchemaDefinition

{ "type": "object", "description": "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }
  • 類型 (必要) – 必須為 object

  • description (選用) – 結構描述及其用途和用量的描述。

  • 屬性 (選用) – 定義工具屬性或引數的 JSON 物件。每個金鑰都是屬性的名稱,並映射到定義屬性的 SchemaDefinition 物件。

  • required (選用) – 列舉 properties 物件中所需屬性的陣列。

如果您包含 properties 欄位來定義工具的引數,您可以為每個引數提供結構描述定義。下一節概述不同類型的結構描述定義。

屬性結構描述定義

最上層的每個屬性都會SchemaDefinition對應至與最上層結構描述定義略有不同需求的 SchemaDefinition 物件。可用的欄位取決於 屬性type的 。若要查看 SchemaDefinition 類型的形狀,請從下列索引標籤中選取 :

範例
String
  1. 字串屬性SchemaDefinition的 具有下列結構:

    { "type": "string", "description": "string" }
Number
  1. 數字屬性SchemaDefinition的 具有下列結構:

    { "type": "number", "description": "string" }
Integer
  1. 整數屬性SchemaDefinition的 具有下列結構:

    { "type": "integer", "description": "string" }
Boolean
  1. 布林值屬性SchemaDefinition的 具有下列結構:

    { "type": "boolean", "description": "string" }
Array
  1. 陣列屬性SchemaDefinition的 具有下列結構:

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

    items 欄位的值是 SchemaDefinition,定義陣列中每個項目的結構。

Object
  1. 物件屬性SchemaDefinition的 具有下列結構,且符合最上層屬性結構描述定義。

    { "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到其值的映射,如 工具所傳回。例如,如果您的輸入結構描述包含 屬性 keywordscategory ,則事件物件可以是下列項目:

{ "keywords": "wireless headphones", "category": "electronics" }

前後關聯物件

包含下列中繼資料:

  • bedrockAgentCoreMessageVersion – 訊息的版本。

  • bedrockAgentCoreAwsRequestId – 對 Amazon Bedrock AgentCore 服務提出的請求 ID。

  • bedrockAgentCoreMcpMessageId – 傳送至 MCP 伺服器的訊息 ID。

  • bedrockAgentCoreGatewayId – 調用之閘道的 ID。

  • bedrockAgentCoreTargetId – 叫用的閘道目標 ID。

  • bedrockAgentCoreToolName – 呼叫的工具名稱。工具名稱的格式為 ${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