View a markdown version of this page

Best practice relative ai limiti di velocità - Fondamento Amazon AgentCore

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Best practice relative ai limiti di velocità

Questo argomento fornisce indicazioni sulla progettazione, implementazione e funzionamento efficaci dei limiti di velocità sul gateway.

Schemi di progettazione

Accesso a più livelli

Crea più limiti di tariffa con la stessa chiave ($.context.jwt.subo$.context.jwt.tier) di dimensione ma voci diverse per ogni livello. Usa le voci esatte per gli utenti premium noti e una * voce come livello predefinito.

Difesa approfondita

Limiti di velocità degli strati a granularità multiple. Ad esempio, combinate un limite RPS per target (protegge la capacità del backend) con un limite RPM per chiamante (previene gli abusi individuali) e un limite per token per strumento (controlla i costi).

Infrastruttura come codice con BatchPut

BatchPutGatewayRateLimitsUsalo per gestire in modo dichiarativo la configurazione del limite di velocità. Batch put utilizza una semantica upsert, che ne rende sicura l'esecuzione ripetuta da CI/CD pipeline o modelli di infrastruttura.

Implementazione graduale

Inizia con limiti tariffari generosi e riducili nel tempo in base ai modelli di traffico osservati. Monitora l'attributo aws.agentcore.gateway.throttle.customer.decision OTEL span e i tassi di risposta 429 prima di ridurre i limiti.

Blocco di emergenza

Usa rate: 0 le voci per bloccare chiamanti, obiettivi o strumenti specifici durante un incidente. Il blocco ha effetto una volta completata la propagazione (fino a 30 secondi).

Guida alla selezione delle chiavi dimensionali

Scegliete le chiavi di dimensione che producano un numero limitato e prevedibile di fasce tariffarie:

Chiave di dimensione Cardinalità Raccomandazione

targetName

Basso (set noto)

Scelta eccellente. Da utilizzare per la protezione per bersaglio.

toolName

Low-medium

Buona scelta per i gateway MCP con set di strumenti noti.

qualifiedModelId

Basso (set noto)

Eccellente per i gateway di inferenza.

$.context.jwt.sub

Medium-high

Ottimo per i limiti per utente. Cardinalità limitata dalla tua base di utenti.

$.context.jwt.team

Bassa

Eccellente per le quote per squadra.

$.context.iam.principal

Media

Ottimo per i limiti per ruolo nelle configurazioni. IAM-authenticated

$.context.jwt.jti

Senza limiti

Non usare. Crea un bucket unico per token.

$.context.jwt.nonce

Senza limiti

Non usare. Crea un bucket unico per richiesta.

avvertimento

Le chiavi di dimensione illimitata (ad esempio i claim con ambito di richiesta) creano un numero infinito di bucket di tariffe. $.context.jwt.jti Questo spreca memoria, riduce le prestazioni e disabilita efficacemente la limitazione della velocità perché ogni richiesta riceve il proprio bucket e non viene mai limitata.

Considerazioni sul limite di velocità dei token

I limiti di tariffa dei token richiedono una considerazione speciale a causa del loro modello di applicazione basato sul budget:

  • Utilizzo del budget: il gateway stima i token di input prima dell'inoltro e registra l'utilizzo effettivo dopo la risposta. Short-lived le raffiche potrebbero superare temporaneamente la velocità configurata.

  • Opzioni di streaming: per le richieste di completamento delle chat in streaming (/v1/chat/completions), il gateway si aggiunge automaticamente "stream_options": {"include_usage": true} al corpo della richiesta quando è attivo un limite di frequenza dei token e l'opzione non è già presente. Ciò consente una contabilità accurata dei token per l'applicazione del TPM.

  • Percorsi supportati: i limiti di frequenza dei token si applicano solo alle richieste su percorsi di inferenza noti (/v1/chat/completions,/v1/messages,/v1/responses). Le richieste verso altri percorsi non sono soggette a limiti di token.

  • Pass-through target: se il target esegue il proxy a un fornitore di modelli senza utilizzare un percorso di inferenza noto, i limiti di frequenza dei token non si applicano. Valuta la possibilità di utilizzare i limiti di frequenza delle richieste o di ristrutturare il tuo target per utilizzare un percorso supportato.

Domande frequenti sul limite di velocità dei token

Questa sezione risponde alle domande più comuni su come funziona in pratica l'applicazione dei token per minuto (TPM).

Come funziona l'applicazione del TPM?

Il gateway utilizza un modello di applicazione basato sul budget. Quando arriva una richiesta, il gateway stima il numero di token di input e riserva tale importo dal budget TPM configurato. Se la stima supera il budget rimanente, la richiesta viene rifiutata con una risposta HTTP 429 prima di raggiungere il modello. Una volta completata la richiesta, il gateway riconcilia il budget sostituendo la stima iniziale con l'utilizzo effettivo dei token (token di input + output) riportato dal fornitore del modello.

Come funziona il TPM con il prompt caching?

Il gateway rappresenta i token in base ai output_tokens valori input_tokens e che il fornitore del modello restituisce nella risposta di inferenza. Il gateway non traccia o regola in modo indipendente la memorizzazione tempestiva nella cache. L'inclusione o meno dei token memorizzati nella cache input_tokens dipende dal modo in cui il fornitore del modello ne segnala l'utilizzo: questo comportamento varia da un provider all'altro. Consulta la documentazione del tuo fornitore di modelli per capire in che modo la memorizzazione tempestiva nella cache influisce sul conteggio dei token segnalati e sul consumo effettivo di TPM.

Se il mio limite di TPM è 50 e il tokenizer stima 51 token di input, la richiesta viene limitata?

Sì. Il gateway valuta la stima del tokenizer rispetto al budget TPM rimanente prima di inoltrare la richiesta. Se la stima supera il budget disponibile, la richiesta viene respinta con una risposta HTTP 429. La risposta include un retryAfter campo che indica quando sarà disponibile un budget sufficiente.

Se una richiesta di lunga durata consuma più token di quanto inizialmente stimato, la risposta viene limitata?

No. Una volta che il gateway accetta e inoltra una richiesta, la risposta viene sempre fornita per intero. Il gateway riserva i token stimati al momento della richiesta e le altre richieste continuano a essere valutate rispetto al budget rimanente mentre la richiesta è in corso. Una volta completata la risposta, il gateway riconcilia l'utilizzo effettivo con la stima. Se il consumo effettivo è superiore, il budget viene adeguato: ciò può causare la limitazione delle richieste successive, ma la risposta originale non viene mai interrotta.

Come funziona la contabilità dei token con le risposte in streaming?

Il gateway utilizza il blocco di risposta finale come fonte di verità per la riconciliazione dei token. Non tutti i fornitori di modelli segnalano l'utilizzo dei token in ogni blocco trasmesso in streaming: alcuni lo includono solo nella parte finale. Il gateway attende la risposta completa prima di riconciliare il budget del TPM. Per lo streaming di OpenAI Chat Completions, il gateway si aggiunge automaticamente "stream_options": {"include_usage": true} al corpo della richiesta quando è attivo un limite di velocità dei token e questa opzione non è già presente, assicurando che sia disponibile un conteggio accurato dei token nel blocco finale.

Considerazioni operative

Tempi di propagazione

La propagazione delle modifiche ai limiti di velocità richiede fino a 30 secondi. Pianifica questo ritardo durante gli incidenti: l'immissione di un blocco (rate: 0) non è immediata.

Valuta zero il comportamento

Un tasso pari a 0 blocca tutto il traffico corrispondente. Usalo deliberatamente per il blocco di emergenza. Double-check inserisci i valori delle dimensioni prima dell'impostazione rate: 0 per evitare il blocco accidentale del traffico legittimo.

Chiavi di dimensione immutabili

Non è possibile modificare un dimensionKeys limite di tariffa esistente. Se hai bisogno di dimensioni diverse, elimina il limite di tariffa esistente e creane uno nuovo. Pianificate la struttura chiave della dimensione prima di creare limiti di velocità di produzione.

Importante

I limiti di velocità utilizzano un comportamento di apertura errata. Se il servizio di limitazione della velocità è temporaneamente non disponibile, il traffico è consentito. Non utilizzare i limiti di velocità come unico meccanismo di sicurezza. Combinali con autenticazione, autorizzazione, regole di gateway e WAF per una difesa approfondita.

Monitoraggio

Utilizza i seguenti segnali per monitorare l'efficacia dei limiti di velocità:

Segnali di risposta limitati:

  • Monitora le risposte HTTP 429 dal tuo gateway.

  • Analizza il limitKey campo relativo alle risposte limitate per identificare il limite di frequenza che si sta attivando.

  • Usa il retryAfter valore per comprendere la finestra di applicazione.

OpenTelemetry attributi span:

Attributo Cosa monitorare

aws.agentcore.gateway.throttle.customer.decision = throttled

Numero di richieste limitate. Avviso in caso di picchi imprevisti.

aws.agentcore.gateway.throttle.customer.limit_key

Identifica quali sono i limiti di tariffa più attivi. Cerca un'applicazione squilibrata.

aws.agentcore.gateway.throttle.customer.metric

Determina se le richieste, i token o le connessioni sono il collo di bottiglia.

aws.agentcore.gateway.throttle.customer.matched_entry

Identifica quali chiamanti o destinatari raggiungono i limiti con maggiore frequenza.

aws.agentcore.gateway.throttle.customer.evaluated

Elenco ordinato di tutti i bucket controllati. Utile per capire quali limiti si applicavano a una richiesta specifica.

Esempi di domande di monitoraggio:

Usa Amazon CloudWatch Logs Insights sul gruppo di aws/spans log per interrogare gli intervalli OTEL del tuo gateway. I seguenti esempi aiutano a identificare i modelli di limitazione.

Conta le richieste limitate in base al limite di velocità:

filter attributes.`aws.agentcore.gateway.throttle.customer.decision` = "throttled" | stats count(*) as throttle_count by attributes.`aws.agentcore.gateway.throttle.customer.limit_key` | sort throttle_count desc

Identifica quali sono i chiamanti che subiscono maggiori limitazioni:

filter attributes.`aws.agentcore.gateway.throttle.customer.decision` = "throttled" | stats count(*) as throttle_count by attributes.`aws.agentcore.gateway.throttle.customer.matched_entry` | sort throttle_count desc | limit 20

Confronta le richieste consentite e quelle limitate nel tempo:

filter ispresent(attributes.`aws.agentcore.gateway.throttle.customer.decision`) | stats count(*) as total, sum(attributes.`aws.agentcore.gateway.throttle.customer.decision` = "throttled") as throttled by bin(5m)

Se un unico limite di velocità è responsabile della maggior parte degli eventi di limitazione, valuta se la velocità configurata è troppo restrittiva o se lo schema del traffico indica un abuso.

Creazione di allarmi in base ai limiti di velocità

Puoi convertire gli attributi dell'intervallo OTEL del limite di velocità in CloudWatch metriche e allarmi per monitorare in modo proattivo il comportamento di limitazione. Ciò richiede l'abilitazione dell'osservabilità del gateway (vedi Abilitazione dell'osservabilità per le risorse del gateway). AgentCore

Passaggio 1: abilitare gli intervalli dei gateway

Assicurati che il gateway abbia l'osservabilità abilitata. Gli intervalli del gateway vengono esportati CloudWatch e sono visualizzabili in CloudWatch Transaction Search e nella pagina generativa di osservabilità dell'IA.

Passaggio 2: creare un filtro metrico CloudWatch

Crea un filtro metrico nel gruppo di aws/spans log per estrarre gli eventi di limitazione come metrica personalizzata. L'esempio seguente crea una metrica che conta le richieste limitate per limite di velocità:

{ "filterPattern": "{ $.attributes.aws\\.agentcore\\.gateway\\.throttle\\.customer\\.decision = \"throttled\" }", "metricTransformations": [ { "metricName": "GatewayRateLimitThrottleCount", "metricNamespace": "AgentCore/Gateway/RateLimits", "metricValue": "1", "defaultValue": 0, "dimensions": { "LimitKey": "$.attributes.aws\\.agentcore\\.gateway\\.throttle\\.customer\\.limit_key" } } ] }

Passaggio 3: creare un allarme CloudWatch

Dopo aver inserito il filtro metrico, crea un allarme che si attiva quando la frequenza dell'acceleratore supera una soglia.

Esempio
AWS CLI
  1. Esegui il comando seguente:

    aws cloudwatch put-metric-alarm \ --alarm-name "GatewayRateLimitThrottleSpike" \ --namespace "AgentCore/Gateway/RateLimits" \ --metric-name "GatewayRateLimitThrottleCount" \ --statistic Sum \ --period 300 \ --evaluation-periods 1 \ --threshold 100 \ --comparison-operator GreaterThanThreshold \ --alarm-description "Alert when rate limit throttles exceed 100 in 5 minutes" \ --alarm-actions "arn:aws:sns:us-west-2:123456789012:my-alarm-topic"
AWS Python SDK (Boto3)
  1. import boto3 cloudwatch = boto3.client("cloudwatch", region_name="us-west-2") cloudwatch.put_metric_alarm( AlarmName="GatewayRateLimitThrottleSpike", Namespace="AgentCore/Gateway/RateLimits", MetricName="GatewayRateLimitThrottleCount", Statistic="Sum", Period=300, EvaluationPeriods=1, Threshold=100, ComparisonOperator="GreaterThanThreshold", AlarmDescription="Alert when rate limit throttles exceed 100 in 5 minutes", AlarmActions=["arn:aws:sns:us-west-2:123456789012:my-alarm-topic"], ) print("Alarm created successfully")

Passaggio 4: crea una dashboard

Crea una CloudWatch dashboard per visualizzare i tassi di accelerazione nel tempo. La seguente configurazione del widget mostra i conteggi delle accelerazioni raggruppati per limite di velocità:

{ "metrics": [ [ "AgentCore/Gateway/RateLimits", "GatewayRateLimitThrottleCount", "LimitKey", "per-target-rps" ], [ "AgentCore/Gateway/RateLimits", "GatewayRateLimitThrottleCount", "LimitKey", "per-caller-rpm" ] ], "period": 60, "stat": "Sum", "title": "Rate Limit Throttles by Limit" }
Suggerimento

Puoi anche utilizzare la metrica integrata (disponibile per impostazione predefinita nelle Throttles metriche di richiamo del gateway) per un conteggio totale delle accelerazioni senza granularità per limite. Utilizza filtri metrici personalizzati sugli attributi span quando hai bisogno di visibilità per limite o per chiamante.