View a markdown version of this page

AWS Cibles de la fonction Lambda - Base rocheuse de l'Amazonie AgentCore

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 :

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 :

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 êtreobject.

  • 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
String
  1. La propriété SchemaDefinition for a string possède la structure suivante :

    { "type": "string", "description": "string" }
Number
  1. La propriété SchemaDefinition for a number possède la structure suivante :

    { "type": "number", "description": "string" }
Integer
  1. La propriété SchemaDefinition pour un entier a la structure suivante :

    { "type": "integer", "description": "string" }
Boolean
  1. La propriété booléenne SchemaDefinition for a la structure suivante :

    { "type": "boolean", "description": "string" }
Array
  1. La propriété SchemaDefinition for an array possède la structure suivante :

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

    La valeur du items champ est a SchemaDefinition qui définit la structure de chaque élément du tableau.

Object
  1. La propriété SchemaDefinition pour un objet possède la structure suivante et correspond à la définition du schéma de propriété de niveau supérieur.

    { "type": "object", "description": "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }

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
Weather tool
  1. L'get_weatheroutil suivant nécessite un argument de location chaîne et peut être utilisé pour renvoyer la météo pour cet endroit :

    { "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. L'get_timeoutil suivant nécessite un argument de timezone chaîne et peut être utilisé pour renvoyer l'heure pour ce fuseau horaire :

    { "name": "get_time", "description": "Get time for a timezone", "inputSchema": { "type": "object", "properties": { "timezone": { "type": "string" } }, "required": [ "timezone" ] } }

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