Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh
Contoh berikut menunjukkan fungsi Python AWS Lambda untuk kasus penggunaan pencegat umum.
Pass-through pencegat
Contoh ini menunjukkan pencegat sederhana yang mencatat metode MCP untuk pencegat REQUEST dan meneruskan semua permintaan dan tanggapan melalui tidak berubah:
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
Fungsi Lambda ini dapat dikonfigurasi sebagai pencegat REQUEST dan RESPONSE. Ketika dikonfigurasi sebagai pencegat REQUEST, itu akan mencatat metode MCP dari permintaan masuk. Ketika dikonfigurasi sebagai pencegat RESPONSE, itu hanya akan melewati respons tanpa perubahan. Kedua jenis pencegat mengembalikan data asli tanpa modifikasi, menjadikannya pencegat “pass-through”.
Sesuaikan perutean model dengan pencegat permintaan
Untuk target inferensi, gateway memilih target dari model lapangan menggunakan perutean berbasis model. Pencegat REQUEST dapat menulis ulang model sebelum gateway mengevaluasi routing, yang memungkinkan Anda mendukung ID model virtual: alias stabil yang tidak dipetakan ke model tunggal yang dikonfigurasi. Pencegat menyelesaikan alias ke ID spesifik yang memenuhi syarat target dalam formulir{targetName}/{modelId}, sehingga pemanggil menggunakan satu nama saat Anda mengontrol pemilihan model secara terpusat.
Muatan pencegat HTTP
Target inferensi menggunakan payload http pencegat, di mana badan permintaan adalah string yang dikodekan base64. Untuk informasi selengkapnya, lihat Pencegat untuk target HTTP.
Pencegat REQUEST berikut menyelesaikan ID model virtual auto-claude ke model Anthropic tertentu berdasarkan ukuran input permintaan: anthropic/claude-haiku-4-5 untuk permintaan kecil, untuk permintaan menengah, dan anthropic/claude-sonnet-4-6 anthropic/claude-opus-4-7 untuk permintaan besar. Penelepon mengirimauto-claude, dan gateway merutekan setiap permintaan ke model yang diselesaikan pada anthropic target. Permintaan yang menggunakan ID model lainnya melewati tanpa perubahan dan mengikuti perutean berbasis model normal.
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 } }, }
Lampirkan fungsi ke gateway Anda sebagai pencegat REQUEST. Untuk petunjuk, lihat Mengon figurasi pencegat. Peran layanan gateway juga harus memiliki izin untuk memanggil fungsi. Untuk informasi selengkapnya, lihat Izin untuk pencegat.
Untuk melihat resolusi, kirim permintaan yang menggunakan auto-claude alias. Pencegat menulis ulang model ke model Antropik konkret berdasarkan ukuran input, dan gateway merutekan permintaan ke model itu pada target. 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}'