View a markdown version of this page

AWS Lambda-Funktionsziele - Amazon Grundgestein AgentCore

AWS Lambda-Funktionsziele

Mit Lambda-Zielen können Sie Ihr Gateway mit AWS Lambda-Funktionen verbinden, die Ihre Tools implementieren. Dies ist nützlich, wenn Sie benutzerdefinierten Code als Reaktion auf Tool-Aufrufe ausführen möchten.

Sie erstellen eine Lambda-Funktion mithilfe des AWS Lambda-Dienstes. Um die Funktion zu erstellen, sollten Sie wie folgt vorgehen:

  • Erstellen Sie ein Toolschema, das die Tools definiert, die Ihre Lambda-Funktion aufrufen kann.

  • Verstehen Sie das Lambda-Eingabeformat. Anschließend können Sie den Schritten im AWS Lambda Developer Guide for Building in der Sprache Ihrer Wahl folgen.

Nachdem Sie die Funktion erstellt haben, konfigurieren Sie die Berechtigungen, damit das Gateway darauf zugreifen kann.

Lesen Sie die wichtigsten Überlegungen und Einschränkungen, um zu entscheiden, ob ein Lambda-Target für Ihren Anwendungsfall geeignet ist. Ist dies der Fall, können Sie das Toolschema und die Lambda-Funktion erstellen und dann Berechtigungen für das Gateway einrichten, um auf das Ziel zugreifen zu können. Wählen Sie ein Thema aus, um mehr zu erfahren:

Wichtigste Überlegungen und Einschränkungen

Beachten Sie bei der Arbeit mit Lambda-Zielen die folgenden Einschränkungen und Überlegungen:

  • Die Präfixe für Toolnamen müssen manuell aus dem Toolnamen in Ihrer AWS Lambda-Funktion entfernt werden. Weitere Informationen finden Sie unter Verstehen, wie AgentCore Gateway-Tools benannt werden.

  • Wenn Sie eine bestehende AWS Lambda-Funktion verwenden und sie als Tool in das Gateway importieren, müssen Sie den Funktionscode ändern, um eine Schemaänderung für Ereignis- und Kontextobjekte zu berücksichtigen.

  • Die Lambda-Funktion muss eine gültige JSON-Antwort zurückgeben, die vom Gateway analysiert werden kann.

  • Lambda-Funktions-Timeouts sollten entsprechend konfiguriert werden, um die erwartete Verarbeitungszeit Ihrer Tools zu bewältigen.

  • Erwägen Sie, die Fehlerbehandlung in Ihrer Lambda-Funktion zu implementieren, um dem Client aussagekräftige Fehlermeldungen bereitzustellen

Schema des Lambda-Funktionstools

In diesem Abschnitt wird die Struktur des Tool-Schemas erläutert, das ein Tool definiert, das Ihre Lambda-Funktion zurückgeben kann. Nachdem Sie Ihr Toolschema definiert haben, können Sie einen der folgenden Schritte ausführen:

  • Laden Sie es in einen Amazon S3 S3-Bucket hoch und verweisen Sie auf den S3-Standort, wenn Sie das Ziel zu Ihrem Gateway hinzufügen.

  • Fügen Sie die Definition direkt ein, wenn Sie das Ziel zu Ihrem Gateway hinzufügen.

Wählen Sie ein Thema aus, um mehr über die Details des Tool-Schemas zu erfahren oder um sich Beispiele anzusehen:

Werkzeugdefinition

Wenn Sie eine Lambda-Funktion als Gateway-Ziel hinzufügen, geben Sie ToolDefinitionbei der Bereitstellung der Zielkonfiguration eine an. Die Struktur der Tooldefinition ist wie folgt:

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

Die Werkzeugdefinition enthält die folgenden Felder:

  • name (erforderlich) — Der Name des Tools.

  • Beschreibung (erforderlich) — Eine Beschreibung des Tools sowie seines Zwecks und seiner Verwendung.

  • InputSchema (erforderlich) — Ein JSON-Objekt, das die Struktur der Eingabe definiert, die das Tool akzeptiert.

  • outputSchema (optional) — Ein JSON-Objekt, das die Struktur der Ausgabe definiert, die das Tool erzeugt.

Die outputSchema Felder inputSchema und sind beide einem Objekttyp zugeordnet SchemaDefinition, der im folgenden Abschnitt beschrieben wird.

Schemadefinition der obersten Ebene für Eingabe- und Ausgabeschemas

Die outputSchema Felder inputSchema und auf der obersten Ebene der Werkzeugdefinition sind beide einem Objekttyp zugeordnet, der SchemaDefinitiondie folgenden Felder enthält:

{ "type": "object", "description": "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }
  • Typ (erforderlich) — Muss sein. object

  • description (optional) — Eine Beschreibung des Schemas sowie seines Zwecks und seiner Verwendung.

  • properties (optional) — Ein JSON-Objekt, das die Eigenschaften oder Argumente des Tools definiert. Jeder Schlüssel ist ein Name einer Eigenschaft und ist einem SchemaDefinitionObjekt zugeordnet, das die Eigenschaft definiert.

  • erforderlich (optional) — Ein Array, das die Eigenschaften auflistet, die für das Objekt erforderlich sind. properties

Wenn Sie ein properties Feld zur Definition von Argumenten für das Tool hinzufügen, geben Sie für jedes Argument eine Schemadefinition an. Die verschiedenen Arten von Schemadefinitionen werden im nächsten Abschnitt beschrieben.

Definition des Eigenschaftsschemas

Jede Eigenschaft auf der obersten Ebene ist einem SchemaDefinition SchemaDefinitionObjekt zugeordnet, für das geringfügig andere Anforderungen gelten als für die Schemadefinition der obersten Ebene. Die verfügbaren Felder hängen von der type für die Eigenschaft verwendeten ab. Um die Form eines Typs zu sehen, wählen Sie eine der folgenden Registerkarten aus: SchemaDefinition

Beispiel
String
  1. Die Eigenschaft SchemaDefinition for a string hat die folgende Struktur:

    { "type": "string", "description": "string" }
Number
  1. Die Eigenschaft SchemaDefinition for a number hat die folgende Struktur:

    { "type": "number", "description": "string" }
Integer
  1. Die Eigenschaft SchemaDefinition for a integer hat die folgende Struktur:

    { "type": "integer", "description": "string" }
Boolean
  1. Die boolesche Eigenschaft SchemaDefinition for hat die folgende Struktur:

    { "type": "boolean", "description": "string" }
Array
  1. Die Eigenschaft SchemaDefinition for an array hat die folgende Struktur:

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

    Der Wert des items Felds ist aSchemaDefinition, der die Struktur jedes Elements im Array definiert.

Object
  1. Die Eigenschaft SchemaDefinition für ein Objekt hat die folgende Struktur und entspricht der Definition des Eigenschaftsschemas der obersten Ebene.

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

Wenn Sie eine weitere Objekttypeigenschaft einbeziehen, fügen Sie rekursiv eine weitere hinzu. SchemaDefinition

Beispiele für Lambda-Tooldefinitionen

Wählen Sie eine Registerkarte aus, um Beispiel-Tooldefinitionen zu sehen, die Sie in Ihre Lambda-Funktion aufnehmen können.

Beispiel
Weather tool
  1. Das folgende get_weather Tool benötigt ein location Zeichenkettenargument und kann verwendet werden, um das Wetter für diesen Ort zurückzugeben:

    { "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. Das folgende get_time Tool benötigt ein timezone Zeichenkettenargument und kann verwendet werden, um die Uhrzeit für diese Zeitzone zurückzugeben:

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

Eingabeformat der Lambda-Funktion

Wenn ein Amazon AgentCore Bedrock-Gateway eine Lambda-Funktion aufruft, übergibt es ein event Objekt und ein context Objekt an die Funktion. Der Lambda-Event-Handler, den Sie schreiben, kann auf Werte in diesen Objekten zugreifen.

Event-Objekt

Eine Zuordnung der Werte properties von und inputSchema zu ihren Werten, wie sie vom Tool zurückgegeben wurden. Wenn Ihr Eingabeschema beispielsweise die Eigenschaften keywords und enthältcategory, könnte das Ereignisobjekt wie folgt aussehen:

{ "keywords": "wireless headphones", "category": "electronics" }

Kontext-Objekt

Enthält die folgenden Metadaten:

  • bedrock AgentCoreMessageVersion — Die Version der Nachricht.

  • bedrock AgentCoreAwsRequestId — Die ID der Anfrage an den Amazon Bedrock-Service AgentCore .

  • bedrock AgentCoreMcpMessageId — Die ID der Nachricht, die an den MCP-Server gesendet wurde.

  • bedrock AgentCoreGatewayId — Die ID des Gateways, das aufgerufen wurde.

  • bedrock AgentCoreTargetId — Die ID des Gateway-Ziels, das aufgerufen wurde.

  • bedrock AgentCoreToolName — Der Name des Tools, das aufgerufen wurde. Der Name des Tools hat das Format ${target_name} _${tool_name}.

Das Format des Kontextobjekts lautet wie folgt:

{ "bedrockAgentCoreMessageVersion": "1.0", "bedrockAgentCoreAwsRequestId": "string", "bedrockAgentCoreMcpMessageId": "string", "bedrockAgentCoreGatewayId": "string", "bedrockAgentCoreTargetId": "string", "bedrockAgentCoreToolName": "string" }

Die Lambda-Funktion, die Sie schreiben, kann auf die Eigenschaften des Ereignis- und Kontextobjekts zugreifen. Sie können den folgenden Standardcode verwenden, um loszulegen:

# 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