Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
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 AWS Lambda. Pour créer la fonction, vous devez procéder comme suit :
-
Créez un schéma d'outils 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 AWS Lambda Developer Guide for Building dans le langage de votre choix.
Après avoir créé la fonction, vous configurez les autorisations pour que la passerelle puisse y accéder.
Passez en revue les principales considérations et limites pour vous aider à décider si une cible Lambda est applicable à votre cas d'utilisation. Si c'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 AWS Lambda. Pour plus d'informations, voir Comprendre comment les outils AgentCore Gateway sont nommés.
-
Si vous utilisez une fonction AWS Lambda existante et que vous l'importez en tant qu'outil dans la passerelle, vous devrez 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 Lambda afin de fournir des messages d'erreur significatifs au client
Schéma de l'outil de la 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 voir des exemples :
Rubriques
Définition de l'outil
Lorsque vous ajoutez une fonction Lambda en tant que cible de passerelle, vous fournissez un ToolDefinition lors de la fourniture de 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 :
-
nom (obligatoire) : 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 niveau supérieur 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 SchemaDefinition contenant 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 SchemaDefinition objet qui définit la propriété.
-
obligatoire (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 SchemaDefinition correspond à un SchemaDefinition objet 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 de 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 objet à la fonction. Le gestionnaire d'événements Lambda que vous écrivez peut accéder aux valeurs de ces objets.
Objet de l'événement
Une carte des valeurs properties allant de inputSchema à leurs valeurs, telles que renvoyées par l'outil. 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 :
-
socle AgentCoreMessageVersion : version du message.
-
bedrock AgentCoreAwsRequestId : ID de la demande adressé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 qui a été 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'objet d'événement et 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