Limitare l'utilizzo dei token API del modello linguistico di grandi dimensioni

SI APPLICA A: Sviluppatore | Basic | Basic v2 | Standard | Standard v2 | Premium | Premium v2

I llm-token-limit criteri impediscono picchi di utilizzo delle API LLM (Large Language Model) per ogni chiave limitando il consumo di token del modello linguistico a una frequenza specificata (numero al minuto), una quota in un periodo specificato o entrambi. Quando viene superato un limite di frequenza di token specificato, il chiamante riceve un 429 Too Many Requests codice di stato della risposta. Quando viene superata una quota specificata, il chiamante riceve un 403 Forbidden codice di stato della risposta.

Nota

Impostare gli elementi e gli elementi figlio del criterio nell'ordine specificato nell'istruzione del criterio. Altre informazioni su come impostare o modificare i criteri di API Management.

API del modello supportate

Questo criterio funziona con le API LLM aggiunte a Gestione API conformi a uno degli schemi API seguenti:

  • OpenAI Chat Completions or Responses API
  • API messaggi Anthropic (attualmente supportata nei livelli di Gestione API v2)

Istruzione del criterio

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

Attributi

Attributo Descrizione Richiesto Valore predefinito
counter-key Chiave da usare per i criteri di limite dei token. Per ogni valore di chiave, viene usato un singolo contatore per tutti gli ambiti in cui è configurato il criterio. Le espressioni di criteri sono consentite. N/D
token al minuto Numero massimo di token utilizzati dalla richiesta e dal completamento al minuto. È necessario specificare un limite di velocità (tokens-per-minute), una quota (token-quota superiore a token-quota-period) o entrambi. N/D
quota token Numero massimo di token consentiti durante l'intervallo di tempo specificato in token-quota-period. Le espressioni di criteri sono consentite. È necessario specificare un limite di velocità (tokens-per-minute), una quota (token-quota superiore a token-quota-period) o entrambi. N/D
token-quota-period Lunghezza della finestra fissa dopo la quale viene reimpostato.token-quota Il valore deve essere uno dei seguenti: Hourly,DailyWeekly , , Monthly. Yearly L'ora di inizio di un periodo di quota viene calcolata come timestamp UTC troncato all'unità (ora, giorno e così via) usata per il periodo. Le espressioni di criteri sono consentite. È necessario specificare un limite di velocità (tokens-per-minute), una quota (token-quota superiore a token-quota-period) o entrambi. N/D
estimate-prompt-tokens Valore booleano che determina se stimare il numero di token necessari per una richiesta:
- true: stimare i token di richiesta in anticipo in base allo schema del prompt nell'API.
- false: non stimare i token di richiesta; usare l'utilizzo effettivo dei token dalla risposta del modello.

Per il conteggio e il comportamento di stima dei token, vedere Considerazioni sul conteggio e la stima dei token.
N/D
retry-after-header-name Nome di un'intestazione di risposta personalizzata il cui valore è l'intervallo di ripetizione consigliato in secondi dopo il superamento o tokens-per-minute il superamento dell'oggetto specificatotoken-quota. Le espressioni di criteri non sono consentite. NO Retry-After
retry-after-variable-name Nome di una variabile che archivia l'intervallo di ripetizione dei tentativi consigliato in secondi dopo il superamento dell'oggetto specificato tokens-per-minute o token-quota superato. Le espressioni di criteri non sono consentite. NO N/D
remaining-quota-tokens-header-name Il nome di un'intestazione di risposta il cui valore dopo ogni esecuzione dei criteri è il numero stimato di token rimanenti corrispondenti a consentiti token-quota per .token-quota-period Le espressioni di criteri non sono consentite. NO N/D
remaining-quota-tokens-variable-name Nome di una variabile che dopo ogni esecuzione dei criteri archivia il numero stimato di token rimanenti corrispondenti a consentito token-quota per .token-quota-period Le espressioni di criteri non sono consentite. NO N/D
remaining-tokens-header-name Il nome di un'intestazione di risposta il cui valore dopo ogni esecuzione dei criteri è il numero di token rimanenti corrispondenti a tokens-per-minute consentiti per l'intervallo di tempo. Le espressioni di criteri non sono consentite. NO N/D
remaining-tokens-variable-name Nome di una variabile che dopo ogni esecuzione dei criteri archivia il numero di token rimanenti corrispondenti a consentiti tokens-per-minute per l'intervallo di tempo. Le espressioni di criteri non sono consentite. NO N/D
tokens-consumed-header-name Nome di un'intestazione di risposta il cui valore è il numero di token utilizzati sia dalla richiesta che dal completamento. L'intestazione viene aggiunta alla risposta solo dopo la ricezione della risposta dal back-end. Le espressioni di criteri non sono consentite. NO N/D
tokens-consumed-variable-name Nome di una variabile inizializzata per il conteggio stimato dei token di richiesta nella backend sezione (o zero se estimate-prompt-tokens è false), aggiornato con il conteggio segnalato effettivo nella outbound sezione. NO N/D

Utilizzo

Note sull'utilizzo

  • Questi criteri possono essere usato più volte per ogni definizione di criteri.
  • Questa policy può essere configurata opzionalmente quando si aggiunge un'API LLM tramite il portale.
  • Il valore di remaining-quota-tokens-variable-name o remaining-quota-tokens-header-name è una stima e può essere maggiore del previsto in base all'effettivo consumo di token. Per altre informazioni, vedere Considerazioni sui conteggi e la stima dei token.
  • Gestione API usa un singolo contatore per ogni valore counter-key specificato nei criteri. Il contatore viene aggiornato in tutti gli ambiti in cui il criterio è configurato con tale valore della chiave. Se si vogliono configurare contatori separati in ambiti diversi, ad esempio, un'API o un prodotto specifico, specificare valori di chiave diversi nei diversi ambiti. Ad esempio, aggiungere una stringa che identifica l'ambito alla fine del valore di un'espressione.
  • I livelli v2 usano un algoritmo di bucket di token per la limitazione della frequenza, che differisce dall'algoritmo finestra scorrevole nei livelli classici. A causa di questa differenza di implementazione, quando si configurano i limiti dei token nei livelli v2 a più ambiti usando lo stesso counter-key, assicurarsi che il tokens-per-minute valore sia coerente su tutte le istanze della policy. Valori incoerenti possono causare comportamenti imprevedibili. Per altre informazioni, vedere Advanced request throttling with Gestione API di Azure
  • Questo criterio tiene traccia dell'utilizzo dei token in modo indipendente in ogni gateway in cui viene applicato, inclusi i gateway dell'area di lavoro e i gateway a livello di area in una distribuzione in più aree. Non aggrega i conteggi dei token nell'intera istanza.

Considerazioni sul numero di token e sulla stima

I criteri monitorano e applicano i limiti dei token usando i dati di utilizzo effettivi dei token restituiti dall'endpoint LLM. Facoltativamente, è possibile abilitare la stima del token di richiesta per ridurre le richieste back-end non necessarie. Si applicano le considerazioni seguenti.

  • Tipi di token: il criterio attualmente conta solo i token di richiesta e di completamento.
  • Senza richiedere la stima del token (estimate-prompt-tokens="false"): il criterio usa i valori effettivi di utilizzo dei token nella usage sezione della risposta dell'API LLM. Le richieste possono essere inviate al back-end anche quando viene superato il limite; questo viene rilevato dalla risposta, dopo il quale le richieste successive vengono bloccate fino a quando il limite non viene reimpostato.
  • Con la stima del token di richiesta (estimate-prompt-tokens="true"): le stime dei criteri richiedono token dallo schema del prompt nella definizione dell'API prima di inviare la richiesta. Ciò può ridurre le richieste back-end non necessarie quando il limite è già superato, ma può ridurre le prestazioni.
  • Streaming: quando lo streaming è abilitato nella richiesta API (stream: true), i token di richiesta vengono sempre stimati indipendentemente dall'impostazione estimate-prompt-tokens . I token di completamento vengono stimati anche quando vengono trasmessi le risposte.
  • Input immagine: per i modelli che accettano l'input dell'immagine, i token di immagine vengono in genere conteggiati dall'LLM back-end e inclusi nei calcoli di limiti e quote. Tuttavia, quando lo streaming è abilitato o estimate-prompt-tokens è impostato su true, i criteri conteggia ogni immagine come massimo di 1200 token.
  • Concorrenza: poiché il numero esatto di token utilizzati non può essere determinato fino a quando le risposte non vengono ricevute dal back-end, le richieste simultanee o quasi simultanee possono superare temporaneamente il limite di token configurato. Una volta elaborate le risposte e il limite viene superato, le richieste successive vengono bloccate fino a quando il limite non viene reimpostato.
  • Accuratezza della quota rimanente: la quota di token rimanente stimata restituita in remaining-quota-tokens-variable-name o remaining-quota-tokens-header-name può essere maggiore del previsto in base all'effettivo consumo di token e diventa più accurata man mano che si avvicina la quota.

Esempi

Limite di frequenza dei token

Nell'esempio seguente il limite di frequenza dei token di 5000 al minuto viene inserito nella chiave dall'indirizzo IP del chiamante. Il criterio non stima il numero di token necessari per una richiesta. Dopo ogni esecuzione dei criteri, i token rimanenti consentiti per tale indirizzo IP chiamante nel periodo di tempo vengono archiviati nella variabile 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 token

Nell'esempio seguente la quota di token di 10000 viene chiaveta dall'ID sottoscrizione e reimposta ogni mese. Dopo ogni esecuzione dei criteri, il numero di token rimanenti consentiti per tale ID sottoscrizione nel periodo di tempo viene archiviato nella variabile 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>

Per ulteriori informazioni sull'utilizzo dei criteri, vedere: