View a markdown version of this page

AWS Cibles de la fonction Lambda - Amazon Bedrock AgentCore

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 :

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 :

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

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

    { "type": "number", "description": "string" }
Integer
  1. La propriété SchemaDefinition for a integer 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 a array a 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 for an object 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 emplacement :

    { "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 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