View a markdown version of this page

Exemplos - Base da Amazônia AgentCore

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Exemplos

Os exemplos a seguir mostram as funções do Python AWS Lambda para casos de uso comuns de interceptores.

Pass-through interceptador

Este exemplo demonstra um interceptor simples que registra o método MCP para interceptores REQUEST e transmite todas as solicitações e respostas inalteradas:

import json import logging # Configure logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): """ Lambda function that handles both REQUEST and RESPONSE interceptor types. For REQUEST interceptors: logs the MCP method and passes request through unchanged For RESPONSE interceptors: passes response through unchanged """ # Extract the MCP data from the event mcp_data = event.get('mcp', {}) # Check if this is a REQUEST or RESPONSE interceptor based on presence of gatewayResponse if 'gatewayResponse' in mcp_data and mcp_data['gatewayResponse'] != None: # This is a RESPONSE interceptor logger.info("Processing RESPONSE interceptor - passing through unchanged") # Pass through the original request and response unchanged response = { "interceptorOutputVersion": "1.0", "mcp": { "transformedGatewayResponse": { "body": mcp_data.get('gatewayResponse', {}).get('body', {}), "statusCode": mcp_data.get('gatewayResponse', {}).get('statusCode', 200) } } } else: # This is a REQUEST interceptor gateway_request = mcp_data.get('gatewayRequest', {}) request_body = gateway_request.get('body', {}) mcp_method = request_body.get('method', 'unknown') # Log the MCP method logger.info(f"Processing REQUEST interceptor - MCP method: {mcp_method}") # Pass through the original request unchanged response = { "interceptorOutputVersion": "1.0", "mcp": { "transformedGatewayRequest": { "body": request_body, } } } return response

Essa função do Lambda pode ser configurada como um interceptor de SOLICITAÇÃO e RESPOSTA. Quando configurado como um interceptor REQUEST, ele registrará o método MCP a partir da solicitação recebida. Quando configurado como um interceptor de RESPOSTA, ele simplesmente passará a resposta inalterada. Ambos os tipos de interceptor retornam os dados originais sem modificação, tornando-o um interceptor de “passagem”.

Personalize o roteamento do modelo com um interceptor de solicitações

Para alvos de inferência, o gateway seleciona um alvo do model campo usando roteamento baseado em modelo. Um interceptor REQUEST pode ser reescrito model antes que o gateway avalie o roteamento, o que permite que você ofereça suporte a um ID de modelo virtual: um alias estável que não é mapeado para nenhum modelo configurado. O interceptor resolve o alias em um ID concreto qualificado para o alvo no formulário{targetName}/{modelId}, então os chamadores usam um nome enquanto você controla centralmente a seleção do modelo.

Carga útil do interceptor HTTP

Os alvos de inferência usam a carga útil do http interceptor, na qual o corpo da solicitação é uma string codificada em base64. Para obter mais informações, consulte Interceptores para destinos HTTP.

O interceptor REQUEST a seguir resolve o ID do modelo virtual auto-claude para um modelo antrópico específico com base no tamanho da entrada da solicitação: anthropic/claude-haiku-4-5 anthropic/claude-sonnet-4-6 para solicitações pequenas, médias e anthropic/claude-opus-4-7 grandes. Os chamadores enviam auto-claude e o gateway encaminha cada solicitação para o modelo resolvido no anthropic destino. As solicitações que usam qualquer outra ID de modelo passam inalteradas e seguem o roteamento normal baseado em modelo.

import base64 import json import logging logger = logging.getLogger() logger.setLevel(logging.INFO) # The virtual model ID that this interceptor resolves to a concrete # target-qualified ID in the form "{targetName}/{modelId}". VIRTUAL_MODEL = "auto-claude" # Approximate input-size thresholds (in characters) used to choose a model. SONNET_THRESHOLD = 2000 OPUS_THRESHOLD = 8000 def resolve_auto_claude(payload): """Choose an Anthropic model based on the size of the request input.""" input_size = len(json.dumps(payload.get("input", ""))) if input_size >= OPUS_THRESHOLD: return "anthropic/claude-opus-4-7" if input_size >= SONNET_THRESHOLD: return "anthropic/claude-sonnet-4-6" return "anthropic/claude-haiku-4-5" def lambda_handler(event, context): http = event.get("http", {}) request = http.get("gatewayRequest", {}) encoded_body = request.get("body") # Nothing to transform (for example, an empty body) - pass through. if not encoded_body: return {"interceptorOutputVersion": "1.0", "http": {}} try: payload = json.loads(base64.b64decode(encoded_body)) except (ValueError, TypeError) as exc: logger.warning("Passing request through unchanged; could not parse body: %s", exc) return {"interceptorOutputVersion": "1.0", "http": {}} # Only resolve the virtual model ID; let everything else route normally. if not isinstance(payload, dict) or payload.get("model") != VIRTUAL_MODEL: return {"interceptorOutputVersion": "1.0", "http": {}} resolved = resolve_auto_claude(payload) logger.info("Resolved virtual model %s -> %s", VIRTUAL_MODEL, resolved) payload["model"] = resolved encoded = base64.b64encode(json.dumps(payload).encode("utf-8")).decode("utf-8") return { "interceptorOutputVersion": "1.0", "http": { "transformedGatewayRequest": { "body": encoded } }, }

Anexe a função ao seu gateway como um interceptor de SOLICITAÇÃO. Para obter instruções, consulte Configurando interceptores. A função do serviço de gateway também deve ter permissão para invocar a função. Para obter mais informações, consulte Permissões para interceptores.

Para ver a resolução, envie uma solicitação que use o auto-claude alias. O interceptor é reescrito model em um modelo antrópico concreto com base no tamanho da entrada, e o gateway encaminha a solicitação para esse modelo no destino. anthropic

awscurl --service bedrock-agentcore --region us-west-2 -X POST \ "https://GATEWAY_ID.gateway.bedrock-agentcore.us-west-2.amazonaws.com/inference/v1/responses" \ -H "Content-Type: application/json" \ -d '{"model": "auto-claude", "input": "Hello!", "max_output_tokens": 50}'