AWS Cibles de la fonction Lambda
Les cibles Lambda vous permettent de connecter votre passerelle aux fonctions AWS Lambda qui implémentent vos outils. Cela est utile lorsque vous souhaitez exécuter du code personnalisé en réponse à des appels d'outils.
Vous créez une fonction Lambda à l'aide du service Lambda AWS . Pour créer la fonction, vous devez effectuer les opérations suivantes :
-
Créez un schéma d'outil qui définit les outils que votre fonction Lambda peut appeler.
-
Comprenez le format d'entrée Lambda. Vous pouvez ensuite suivre les étapes du guide du développeur AWS Lambda pour le développement dans le langage de votre choix.
Après avoir créé la fonction, vous configurez les autorisations permettant à la passerelle d'y accéder.
Passez en revue les principales considérations et limitations pour vous aider à déterminer si une cible Lambda est applicable à votre cas d'utilisation. Si tel est le cas, vous pouvez créer le schéma de l'outil et la fonction Lambda, puis configurer les autorisations permettant à la passerelle d'accéder à la cible. Choisissez une rubrique pour en savoir plus :
Rubriques
Principales considérations et limites
Lorsque vous travaillez avec des cibles Lambda, tenez compte des limites et considérations suivantes :
-
Les préfixes de nom d'outil devront être supprimés manuellement du nom de l'outil dans votre fonction Lambda AWS . Pour plus d'informations, voir Comprendre le nom des outils de AgentCore passerelle.
-
Si vous utilisez une fonction AWS Lambda existante et que vous l'importez en tant qu'outil dans la passerelle, vous devez modifier le code de la fonction pour tenir compte d'un changement de schéma pour les objets d'événement et de contexte
-
La fonction Lambda doit renvoyer une réponse JSON valide qui peut être analysée par la passerelle
-
Les délais d'expiration de la fonction Lambda doivent être configurés de manière appropriée pour gérer le temps de traitement attendu de vos outils
-
Envisagez d'implémenter la gestion des erreurs dans votre fonction LLambda afin de fournir des messages d'erreur significatifs au client
Schéma de l'outil de fonction Lambda
Cette section explique la structure du schéma d'outil qui définit un outil que votre fonction Lambda peut renvoyer. Après avoir défini le schéma de votre outil, vous pouvez effectuer l'une des opérations suivantes :
-
Téléchargez-le dans un compartiment Amazon S3 et faites référence à l'emplacement S3 lorsque vous ajoutez la cible à votre passerelle.
-
Collez la définition en ligne lorsque vous ajoutez la cible à votre passerelle.
Sélectionnez une rubrique pour en savoir plus sur les détails du schéma de l'outil ou pour consulter des exemples :
Rubriques
Définition de l'outil
Lorsque vous ajoutez une fonction Lambda en tant que cible de passerelle, vous fournissez un ToolDefinitionlorsque vous fournissez la configuration cible. La structure de la définition de l'outil est la suivante :
{ "name": "string", "description": "string", "inputSchema": { "type": "object", "description" "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }, "outputSchema": { "type": "object", "description" "string", "properties": { "string": SchemaDefinition }, "required": ["string"] } }
La définition de l'outil contient les champs suivants :
-
name (obligatoire) — Le nom de l'outil.
-
description (obligatoire) — Description de l'outil, de son objectif et de son utilisation.
-
InputSchema (obligatoire) — Objet JSON qui définit la structure de l'entrée acceptée par l'outil.
-
OutputSchema (facultatif) — Objet JSON qui définit la structure de la sortie produite par l'outil.
Les outputSchema champs inputSchema et correspondent tous deux à un type d'objet SchemaDefinition, comme décrit dans la section suivante.
Définition de schéma de haut niveau pour les schémas d'entrée et de sortie
Les outputSchema champs inputSchema et situés au niveau supérieur de la définition de l'outil correspondent tous deux à un type d'objet SchemaDefinitioncontenant les champs suivants :
{ "type": "object", "description": "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }
-
type (obligatoire) — Doit être
object. -
description (facultatif) — Description du schéma, de son objectif et de son utilisation.
-
properties (facultatif) — Objet JSON qui définit les propriétés ou les arguments de l'outil. Chaque clé est le nom d'une propriété et correspond à un SchemaDefinitionobjet qui définit la propriété.
-
required (facultatif) — Tableau qui énumère les propriétés requises dans l'
propertiesobjet.
Si vous incluez un properties champ pour définir les arguments de l'outil, vous fournissez une définition de schéma pour chaque argument. Les différents types de définitions de schéma sont décrits dans la section suivante.
Définition du schéma de propriété
Chaque propriété du niveau supérieur correspond à SchemaDefinition un SchemaDefinitionobjet dont les exigences sont légèrement différentes de celles de la définition du schéma de niveau supérieur. Les champs disponibles dépendent type de la propriété. Pour voir la forme SchemaDefinition d'un type, sélectionnez l'un des onglets suivants :
Exemple
Si vous incluez une autre propriété de type d'objet, vous en ajouterez une autre de manière récursive. SchemaDefinition
Exemples de définitions d'outils Lambda
Sélectionnez un onglet pour voir des exemples de définitions d'outils que vous pouvez inclure dans votre fonction Lambda.
Exemple
Format d'entrée de la fonction Lambda
Lorsqu'une AgentCore passerelle Amazon Bedrock invoque une fonction Lambda, elle transmet un event objet et un context autre à la fonction. Le gestionnaire d'événements Lambda que vous écrivez peut accéder aux valeurs de ces objets.
Objet d'événement
Une carte properties de leurs valeurs, telles que renvoyées par l'outil. inputSchema Par exemple, si votre schéma d'entrée contient les propriétés keywords etcategory, l'objet de l'événement peut être le suivant :
{ "keywords": "wireless headphones", "category": "electronics" }
Objet de contexte
Contient les métadonnées suivantes :
-
bedrock AgentCoreMessageVersion — Version du message.
-
bedrock AgentCoreAwsRequestId — L'identifiant de la demande envoyée au service Amazon Bedrock AgentCore .
-
bedrock AgentCoreMcpMessageId — L'ID du message envoyé au serveur MCP.
-
bedrock AgentCoreGatewayId — L'ID de la passerelle qui a été invoquée.
-
bedrock AgentCoreTargetId — L'ID de la cible de passerelle qui a été invoquée.
-
bedrock AgentCoreToolName — Le nom de l'outil appelé. Le nom de l'outil est au format
${target_name}_${tool_name}.
Le format de l'objet de contexte est le suivant :
{ "bedrockAgentCoreMessageVersion": "1.0", "bedrockAgentCoreAwsRequestId": "string", "bedrockAgentCoreMcpMessageId": "string", "bedrockAgentCoreGatewayId": "string", "bedrockAgentCoreTargetId": "string", "bedrockAgentCoreToolName": "string" }
La fonction Lambda que vous écrivez peut accéder aux propriétés de l'événement et de l'objet de contexte. Vous pouvez utiliser le code standard suivant pour commencer :
# 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