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 物件。
inputSchema 和 outputSchema 欄位都會對應至物件類型 SchemaDefinition ,如下節所述。
輸入和輸出結構描述的頂層結構描述定義
工具定義最上層的 inputSchema和 outputSchema 欄位都會對應至包含下列欄位的物件類型 SchemaDefinition:
{ "type": "object", "description": "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }
-
類型 (必要) – 必須為
object。 -
description (選用) – 結構描述及其用途和用量的描述。
-
屬性 (選用) – 定義工具屬性或引數的 JSON 物件。每個金鑰都是屬性的名稱,並映射到定義屬性的 SchemaDefinition 物件。
-
required (選用) – 列舉
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" }
前後關聯物件
包含下列中繼資料:
-
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