View a markdown version of this page

Mejores prácticas en materia de límites de tasas - Base amazónica AgentCore

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Mejores prácticas en materia de límites de tasas

Este tema proporciona orientación sobre cómo diseñar, implementar y operar los límites de velocidad de manera eficaz en su puerta de enlace.

Patrones de diseño

Acceso por niveles

Crea varios límites de tarifas con la misma clave de dimensión ($.context.jwt.subo$.context.jwt.tier) pero con entradas diferentes para cada nivel. Usa entradas exactas para los usuarios premium conocidos y una * entrada como nivel predeterminado.

Defensa en profundidad

Límites de velocidad de capa en múltiples granularidades. Por ejemplo, combine un límite de RPS por objetivo (protege la capacidad del backend) con un límite de RPM por persona que llama (evita el abuso individual) y un límite de token por herramienta (controla el costo).

Infraestructura como código con BatchPut

BatchPutGatewayRateLimitsUtilícelo para administrar de forma declarativa su configuración de límite de velocidad. La colocación por lotes utiliza una semántica alterada, por lo que es seguro ejecutarla de forma repetida a partir de CI/CD oleoductos o plantillas de infraestructura.

Despliegue gradual

Comience con límites de tarifas generosos y ajústelos con el tiempo en función de los patrones de tráfico observados. Antes de reducir los límites, monitoriza el atributo aws.agentcore.gateway.throttle.customer.decision OTEL y las 429 tasas de respuesta.

Bloqueo de emergencia

Usa rate: 0 las entradas para bloquear llamadas, objetivos o herramientas específicas durante un incidente. El bloqueo entra en vigor una vez que se completa la propagación (hasta 30 segundos).

Guía para la selección de claves de dimensión

Elija claves de dimensión que generen un número limitado y predecible de grupos de tasas:

Clave de dimensión Cardinalidad Recomendación

targetName

Bajo (conjunto conocido)

Excelente elección. Úselo para la protección por objetivo.

toolName

Low-medium

Buena elección para puertas de enlace MCP con conjuntos de herramientas conocidos.

qualifiedModelId

Bajo (conjunto conocido)

Excelente para pasarelas de inferencia.

$.context.jwt.sub

Medium-high

Ideal para los límites por usuario. La cardinalidad está limitada por tu base de usuarios.

$.context.jwt.team

Bajo

Excelente para las cuotas por equipo.

$.context.iam.principal

Medio

Es bueno para los límites por rol en IAM-authenticated las configuraciones.

$.context.jwt.jti

Ilimitado

No utilizar. Crea un bucket único por token.

$.context.jwt.nonce

Ilimitado

No utilizar. Crea un bucket único por solicitud.

aviso

Las claves de dimensiones ilimitadas (como $.context.jwt.jti las reclamaciones con ámbito de solicitud) crean un número infinito de grupos de tarifas. Esto desperdicia memoria, degrada el rendimiento y desactiva de manera efectiva la limitación de velocidad, ya que cada solicitud tiene su propio depósito y nunca se limita.

Consideraciones sobre el límite de velocidad del token

Los límites de las tasas simbólicas requieren una consideración especial debido a su modelo de aplicación basado en el presupuesto:

  • Utilización del presupuesto: la pasarela calcula los tokens de entrada antes de reenviarlos y registra el uso real después de la respuesta. Short-lived las ráfagas pueden superar temporalmente la velocidad configurada.

  • Opciones de transmisión: en el caso de las solicitudes de finalización de chats en streaming (/v1/chat/completions), la pasarela se añade automáticamente "stream_options": {"include_usage": true} al cuerpo de la solicitud cuando hay un límite de frecuencia de fichas activo y la opción aún no está presente. Esto permite contabilizar los tokens de forma precisa para aplicar el TPM.

  • Rutas compatibles: los límites de velocidad de los tokens solo se aplican a las solicitudes en rutas de inferencia conocidas (/v1/chat/completions,/v1/messages,/v1/responses). Las solicitudes a otras rutas no están sujetas a los límites de símbolos.

  • Pass-through objetivos: si su objetivo envía un proxy a un proveedor de modelos sin utilizar una ruta de inferencia conocida, no se aplican los límites de velocidad de los tokens. Considera usar límites de frecuencia de solicitudes o reestructurar tu objetivo para usar una ruta compatible.

Preguntas frecuentes sobre el límite de tasa de tokens

Esta sección responde a preguntas frecuentes sobre cómo funciona en la práctica la aplicación del token por minuto (TPM).

¿Cómo funciona la aplicación del TPM?

La pasarela utiliza un modelo de cumplimiento basado en el presupuesto. Cuando llega una solicitud, la puerta de enlace calcula el recuento de tokens de entrada y reserva esa cantidad del presupuesto de TPM configurado. Si la estimación supera el presupuesto restante, la solicitud se rechaza con una respuesta HTTP 429 antes de llegar al modelo. Una vez que la solicitud se complete correctamente, la pasarela concilia el presupuesto sustituyendo la estimación inicial por el uso real de los tokens (tokens de entrada y salida) informado por el proveedor del modelo.

¿Cómo funciona TPM con el almacenamiento rápido en caché?

La pasarela contabiliza los tokens en función de output_tokens los valores input_tokens y que el proveedor del modelo devuelve en la respuesta de inferencia. La puerta de enlace no rastrea ni ajusta de forma independiente para almacenar en caché rápidamente. La inclusión de los tokens en caché input_tokens depende de la forma en que el proveedor de modelos informe sobre su uso; este comportamiento varía de un proveedor a otro. Consulte la documentación de su proveedor de modelos para comprender cómo el almacenamiento rápido en caché afecta al recuento de tokens registrado y al consumo efectivo de TPM.

Si mi límite de TPM es de 50 y el tokenizador estima 51 tokens de entrada, ¿se limita la solicitud?

Sí. La pasarela evalúa la estimación del tokenizador comparándola con el presupuesto restante de TPM antes de reenviar la solicitud. Si la estimación supera el presupuesto disponible, la solicitud se rechaza con una respuesta HTTP 429. La respuesta incluye un retryAfter campo que indica cuándo habrá suficiente presupuesto disponible.

Si una solicitud de larga duración consume más tokens de los estimados inicialmente, ¿se limita la respuesta?

No. Una vez que la pasarela acepta y reenvía una solicitud, la respuesta siempre se entrega en su totalidad. La pasarela reserva los tokens estimados en el momento de la solicitud, y las demás solicitudes se siguen evaluando en función del presupuesto restante mientras la solicitud está en trámite. Cuando se completa la respuesta, la pasarela concilia el uso real con el estimado. Si el consumo real fue mayor, se ajusta el presupuesto; esto puede provocar que las solicitudes posteriores se limiten, pero la respuesta original nunca se interrumpe.

¿Cómo funciona la contabilidad simbólica con las respuestas en streaming?

La pasarela utiliza el fragmento de respuesta final como fuente de verdad para una reconciliación simbólica. No todos los proveedores de modelos informan sobre el uso de tokens en todos los fragmentos transmitidos; algunos los incluyen solo en el último fragmento. La pasarela espera la respuesta completa antes de conciliar el presupuesto de TPM. En el caso de la transmisión de OpenAI Chat Finations, la puerta de enlace se añade automáticamente "stream_options": {"include_usage": true} al cuerpo de la solicitud cuando hay un límite de cantidad de tokens activo y esta opción aún no está presente, lo que garantiza que haya un recuento preciso de tokens en la parte final.

Consideraciones operativas

Tiempo de propagación

Los cambios en el límite de velocidad tardan hasta 30 segundos en propagarse. Planifique este retraso durante los incidentes: la entrada de un bloque (rate: 0) no es inmediata.

Comportamiento de tasa cero

Una tasa de 0 bloquea todo el tráfico coincidente. Utilízala deliberadamente para realizar bloqueos de emergencia. Double-check introduzca los valores de dimensión antes de rate: 0 configurarlos para evitar bloquear accidentalmente el tráfico legítimo.

Claves de dimensión inmutables

No puedes cambiar el límite dimensionKeys de tarifa existente. Si necesitas dimensiones diferentes, elimina el límite de tarifa existente y crea uno nuevo. Planifique la estructura clave de sus dimensiones antes de crear límites de velocidad de producción.

importante

Los límites de velocidad utilizan un comportamiento de apertura por error. Si el servicio de límite de velocidad no está disponible temporalmente, se permite el paso del tráfico. No utilices los límites de velocidad como único mecanismo de seguridad. Combínelos con la autenticación, la autorización, las reglas de pasarela y el WAF para una defensa en profundidad.

Supervisión

Utilice las siguientes señales para supervisar la eficacia del límite de velocidad:

Señales de respuesta limitada:

  • Supervise las respuestas HTTP 429 desde su puerta de enlace.

  • Analice el limitKey campo de las respuestas limitadas para identificar qué límite de frecuencia se está activando.

  • Usa el retryAfter valor para entender el período de aplicación.

OpenTelemetry atributos de intervalo:

Atributo Qué se debe monitorizar

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

Recuento de solicitudes limitadas. Alerta en caso de picos inesperados.

aws.agentcore.gateway.throttle.customer.limit_key

Identifica qué límites de velocidad son los más activos. Busque una aplicación desequilibrada.

aws.agentcore.gateway.throttle.customer.metric

Determine si las solicitudes, los tokens o las conexiones son el cuello de botella.

aws.agentcore.gateway.throttle.customer.matched_entry

Identifique qué personas o destinatarios están alcanzando los límites con más frecuencia.

aws.agentcore.gateway.throttle.customer.evaluated

Lista ordenada de todos los grupos marcados. Es útil para entender qué límites se aplican a una solicitud específica.

Ejemplos de consultas de supervisión:

Utilice Amazon CloudWatch Logs Insights en el grupo de aws/spans registros para consultar los intervalos OTEL de su puerta de enlace. Los siguientes ejemplos ayudan a identificar los patrones de aceleración.

Cuenta las solicitudes limitadas por límite de velocidad:

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 cuáles son las personas que llaman con mayor frecuencia:

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

Compara las solicitudes permitidas con las restringidas a lo largo del tiempo:

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)

Si la mayoría de los eventos de limitación se deben a un único límite de velocidad, ten en cuenta si la velocidad configurada es demasiado restrictiva o si el patrón de tráfico indica un abuso.

Creación de alarmas a partir de intervalos de límite de velocidad

Puedes convertir los atributos del intervalo OTEL con límite de velocidad en CloudWatch métricas y alarmas para supervisar de forma proactiva el comportamiento de limitación. Esto requiere habilitar la observabilidad de las puertas de enlace (consulte Habilitar la observabilidad de los recursos de las puertas de enlace). AgentCore

Paso 1: Habilitar los intervalos de las puertas de enlace

Asegúrese de que su puerta de enlace tenga habilitada la observabilidad. Los intervalos de las pasarelas se exportan CloudWatch y se pueden ver en la búsqueda de CloudWatch transacciones y en la página de observabilidad de la IA generativa.

Paso 2: Crea un filtro métrico CloudWatch

Crea un filtro de métricas en el grupo de aws/spans registros para extraer los eventos de aceleración como una métrica personalizada. En el siguiente ejemplo, se crea una métrica que cuenta las solicitudes limitadas por límite de frecuencia:

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

Paso 3: Crea una alarma CloudWatch

Una vez colocado el filtro métrico, cree una alarma que se active cuando la velocidad del acelerador supere un umbral.

ejemplo
AWS CLI
  1. Use el siguiente comando:

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

Paso 4: Crea un panel

Cree un CloudWatch panel para visualizar las tasas de aceleración a lo largo del tiempo. La siguiente configuración del widget muestra los recuentos de aceleración agrupados por límite de velocidad:

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

También puedes usar la Throttles métrica integrada (disponible de forma predeterminada en las métricas de invocación de la pasarela) para obtener un recuento total de limitaciones sin granularidad por límite. Usa filtros de métricas personalizados en los atributos de rango cuando necesites una visibilidad por límite o por persona que llama.