Limiter l’utilisation des jetons d’API de modèle de langage volumineux

S’applique à : Développeur | Essentiel | Essentiel v2 | Standard | Standard v2 | Premium | Premium v2

La llm-token-limit stratégie empêche les pics d’utilisation des API LLM (Large Language Model) par clé en limitant la consommation de jetons de modèle de langage à un taux spécifié (nombre par minute), un quota sur une période spécifiée ou les deux. Lorsqu’une limite de débit de jeton spécifiée est dépassée, l’appelant reçoit un code d’état 429 Too Many Requests de réponse. Lorsqu’un quota spécifié est dépassé, l’appelant reçoit un code d’état 403 Forbidden de réponse.

Remarque

Définissez les éléments enfants et de stratégie dans l’ordre fourni dans l’instruction de stratégie. En savoir plus sur comment définir ou modifier des stratégies du service Gestion des API.

API de modèle prises en charge

Cette stratégie fonctionne avec les API LLM ajoutées à Gestion des API qui sont conformes à l’un des schémas d’API suivants :

  • API De saisie semi-automatique ou de réponse OpenAI Chat
  • API messages Anthropic (actuellement prise en charge dans les niveaux Gestion des API v2)

Instruction de la stratégie

<llm-token-limit counter-key="key value"
        tokens-per-minute="number"
        token-quota="number"
        token-quota-period="Hourly | Daily | Weekly | Monthly | Yearly"
        estimate-prompt-tokens="true | false"    
        retry-after-header-name="custom header name, replaces default 'Retry-After'" 
        retry-after-variable-name="policy expression variable name"
        remaining-quota-tokens-header-name="header name"  
        remaining-quota-tokens-variable-name="policy expression variable name"
        remaining-tokens-header-name="header name"  
        remaining-tokens-variable-name="policy expression variable name"
        tokens-consumed-header-name="header name"
        tokens-consumed-variable-name="policy expression variable name" />

Attributs

Attribut Descriptif Obligatoire Par défaut
contre-clé Clé à utiliser pour la stratégie de limite de jetons. Pour chaque valeur de clé, un compteur unique est utilisé pour toutes les étendues auxquelles la stratégie est configurée. Les expressions de stratégie sont autorisées. Oui S/O
jetons par minute Nombre maximal de jetons consommés par invite et achèvement par minute. Une limite de débit (tokens-per-minute), un quota (token-quota sur un token-quota-period), ou les deux doivent être spécifiés. S/O
token-quota Nombre maximal de jetons autorisés pendant l’intervalle de temps spécifié dans le token-quota-period. Les expressions de stratégie sont autorisées. Une limite de débit (tokens-per-minute), un quota (token-quota sur un token-quota-period), ou les deux doivent être spécifiés. S/O
token-quota-period Longueur de la fenêtre fixe après laquelle la token-quota réinitialisation est terminée. La valeur doit être l’une des suivantes : Hourly,Daily, Weekly, Monthly, Yearly. L’heure de début d’une période de quota est calculée en tant qu’horodatage UTC tronqué à l’unité (heure, jour, etc.) utilisée pour la période. Les expressions de stratégie sont autorisées. Une limite de débit (tokens-per-minute), un quota (token-quota sur un token-quota-period), ou les deux doivent être spécifiés. S/O
estimate-prompt-tokens Valeur booléenne qui détermine s’il faut estimer le nombre de jetons requis pour une invite :
- true: estimer les jetons d’invite à l’avance en fonction du schéma d’invite dans l’API.
- false: n’estimez pas les jetons d’invite ; utilisez l’utilisation réelle des jetons à partir de la réponse du modèle.

Pour connaître le comportement de comptage et d’estimation des jetons, consultez Considérations relatives au nombre de jetons et à l’estimation.
Oui S/O
retry-after-header-name Nom d’un en-tête de réponse personnalisé dont la valeur est l’intervalle de nouvelle tentative recommandé en secondes après le dépassement spécifié tokens-per-minute ou token-quota dépassé. Les expressions de stratégie ne sont pas autorisées. Non Retry-After
retry-after-variable-name Nom d’une variable qui stocke l’intervalle de nouvelle tentative recommandé en secondes après le dépassement spécifié tokens-per-minute ou token-quota dépassé. Les expressions de stratégie ne sont pas autorisées. Non S/O
restant-quota-tokens-header-name Le nom d’un en-tête de réponse dont la valeur après chaque exécution de stratégie est le nombre estimé de jetons restants correspondant à token-quota autorisés pour le token-quota-period. Les expressions de stratégie ne sont pas autorisées. Non S/O
restant-quota-tokens-variable-name Nom d’une variable qui après chaque exécution de stratégie stocke le nombre estimé de jetons restants correspondant à token-quota autorisés pour le token-quota-period. Les expressions de stratégie ne sont pas autorisées. Non S/O
remaining-tokens-header-name Nom d’un en-tête de réponse dont la valeur après chaque exécution de stratégie est le nombre de jetons restants correspondant à tokens-per-minute l’intervalle de temps autorisé. Les expressions de stratégie ne sont pas autorisées. Non S/O
restant-tokens-variable-name Nom d’une variable qui après chaque exécution de stratégie stocke le nombre de jetons restants correspondant à tokens-per-minute l’intervalle de temps autorisé. Les expressions de stratégie ne sont pas autorisées. Non S/O
tokens-consume-header-name Nom d’un en-tête de réponse dont la valeur est le nombre de jetons consommés par l’invite et la saisie semi-automatique. L’en-tête est ajouté à la réponse uniquement une fois la réponse reçue du serveur principal. Les expressions de stratégie ne sont pas autorisées. Non S/O
tokens-consume-variable-name Nom d’une variable initialisée au nombre estimé de jetons d’invite dans la backend section (ou zéro si estimate-prompt-tokens c’est falsele cas), mis à jour avec le nombre réel signalé dans la outbound section. Non S/O

Utilisation

Notes d’utilisation

  • Cette stratégie peut être utilisée plusieurs fois par définition de stratégie.
  • Cette politique peut être configurée en option lors de l’ajout d’une API LLM via le portail.
  • La valeur ou remaining-quota-tokens-header-name est une estimation et peut être plus grande que prévu en fonction de remaining-quota-tokens-variable-name la consommation réelle des jetons. Pour plus d’informations, consultez Considérations relatives au nombre de jetons et à l’estimation.
  • Gestion des API utilise un seul compteur pour chaque valeur de counter-key que vous spécifiez dans la stratégie. Le compteur est mis à jour pour toutes les étendues pour lesquelles la stratégie est configurée avec cette valeur de clé. Si vous souhaitez configurer des compteurs distincts pour différentes étendues (par exemple une API ou un produit spécifique), spécifiez des valeurs de clé différentes dans les différentes étendues. Par exemple, ajoutez une chaîne qui identifie l’étendue avec la valeur d’une expression.
  • Les niveaux v2 utilisent un algorithme de compartiment de jetons pour la limitation de débit, qui diffère de l’algorithme de fenêtre glissante dans les niveaux classiques. En raison de cette différence d’implémentation, lorsque vous configurez les limites des jetons dans les niveaux v2 à plusieurs portées en utilisant le même counter-key, assurez-vous que la tokens-per-minute valeur est cohérente à travers toutes les instances de politique. Des valeurs incohérentes peuvent entraîner des comportements imprévisibles. Pour plus d’informations, consultez Advanced request throttling with Gestion des API Azure
  • Cette stratégie effectue le suivi de l’utilisation des jetons indépendamment à chaque passerelle où elle est appliquée, y compris les passerelles d’espace de travail et les passerelles régionales dans un déploiement multirégion. Il n’agrège pas le nombre de jetons dans l’ensemble de l’instance.

Considérations relatives au nombre de jetons et à l’estimation

La stratégie surveille et applique des limites de jetons à l’aide des données réelles d’utilisation des jetons retournées à partir du point de terminaison LLM. Vous pouvez éventuellement activer l’estimation des jetons d’invite pour réduire les demandes back-end inutiles. Les considérations suivantes s’appliquent.

  • Types de jetons : la stratégie compte actuellement les jetons d’invite et d’achèvement uniquement.
  • Sans estimation de jeton d’invite (estimate-prompt-tokens="false") : la stratégie utilise des valeurs d’utilisation de jeton réelles à partir de la usage section de la réponse de l’API LLM. Les invites peuvent être envoyées au back-end même lorsque la limite est dépassée ; ceci est détecté à partir de la réponse, après quoi les requêtes suivantes sont bloquées jusqu’à ce que la limite soit réinitialisée.
  • Avec l’estimation du jeton d’invite (estimate-prompt-tokens="true") : la stratégie estime les jetons d’invite du schéma d’invite dans la définition de l’API avant d’envoyer la requête. Cela peut réduire les requêtes back-end inutiles lorsque la limite est déjà dépassée, mais peut réduire les performances.
  • Streaming : lorsque la diffusion en continu est activée dans la demande d’API (stream: true), les jetons d’invite sont toujours estimés, quel que soit le estimate-prompt-tokens paramètre. Les jetons d’achèvement sont également estimés lorsque les réponses sont diffusées en continu.
  • Entrée d’image : pour les modèles qui acceptent l’entrée d’image, les jetons d’image sont généralement comptabilisés par le LLM principal et inclus dans les calculs de limite et de quota. Toutefois, lorsque la diffusion en continu est activée ou estimate-prompt-tokens définie truesur , la stratégie survient sur chaque image sous la forme d’un maximum de 1200 jetons.
  • Concurrence : étant donné que le nombre exact de jetons consommés ne peut pas être déterminé tant que les réponses ne sont pas reçues du serveur principal, les requêtes simultanées ou quasi simultanées peuvent dépasser temporairement la limite de jetons configurée. Une fois les réponses traitées et la limite dépassée, les requêtes suivantes sont bloquées jusqu’à ce que la limite soit réinitialisée.
  • Précision restante du quota : le quota de jetons restant estimé retourné ou remaining-quota-tokens-variable-nameremaining-quota-tokens-header-name peut être supérieur à ce qui est prévu en fonction de la consommation réelle de jetons et devient plus précis à mesure que le quota est abordé.

Exemples

Limite de débit de jetons

Dans l’exemple suivant, la limite de débit de jeton de 5 000 par minute est clé par l’adresse IP de l’appelant. La stratégie n’estime pas le nombre de jetons requis pour une invite. Après l’exécution de chaque stratégie, les jetons restants autorisés pour l’adresse IP de cet appelant dans la période de temps sont stockés dans la variable remainingTokens.

<policies>
    <inbound>
        <base />
        <llm-token-limit
            counter-key="@(context.Request.IpAddress)"
            tokens-per-minute="5000" estimate-prompt-tokens="false" remaining-tokens-variable-name="remainingTokens" />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Quota de jetons

Dans l’exemple suivant, le quota de jetons de 10000 est clé par l’ID d’abonnement et réinitialise mensuellement. Après chaque exécution de stratégie, le nombre de jetons restants autorisés pour cet ID d’abonnement dans la période est stocké dans la variable remainingQuotaTokens.

<policies>
    <inbound>
        <base />
        <llm-token-limit
            counter-key="@(context.Subscription.Id)"
            token-quota="100000" token-quota-period="Monthly" remaining-quota-tokens-variable-name="remainingQuotaTokens" />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Pour plus d’informations sur l’utilisation des stratégies, consultez :