Condividi tramite


LanguageModelRateLimitingPlugin

Simula la limitazione della frequenza basata su token per le API del modello linguistico monitorando il consumo di token di richiesta e completamento all'interno di finestre temporali configurabili.

Screenshot di un prompt dei comandi con il proxy di sviluppo che simula una risposta di limitazione della frequenza del modello linguistico per una richiesta API LLM.

Esempio di configurazione

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "LanguageModelRateLimitingPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "languageModelRateLimitingPlugin"
    }
  ],
  "urlsToWatch": [
    "https://api.openai.com/*",
    "http://localhost:11434/*"
  ],
  "languageModelRateLimitingPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/languagemodelratelimitingplugin.schema.json",
    "promptTokenLimit": 5000,
    "completionTokenLimit": 5000,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Throttle",
    "headerRetryAfter": "retry-after"
  }
}

Proprietà di configurazione

Property Description Default
promptTokenLimit Numero massimo di token di richiesta consentiti entro l'intervallo di tempo. 5000
completionTokenLimit Numero massimo di token di completamento consentiti entro l'intervallo di tempo. 5000
resetTimeWindowSeconds Intervallo di tempo in secondi dopo il quale vengono reimpostati i limiti del token. 60
whenLimitExceeded Comportamento della risposta quando vengono superati i limiti dei token. Può essere Throttle o Custom. Throttle
headerRetryAfter Nome dell'intestazione HTTP da includere le informazioni di ripetizione dei tentativi. retry-after
customResponseFile Percorso del file contenente una risposta personalizzata quando whenLimitExceeded è impostato su Custom. token-limit-response.json

Configurazione della risposta personalizzata

Quando whenLimitExceeded è impostato su Custom, è possibile definire una risposta personalizzata in un file JSON separato:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/languagemodelratelimitingplugin.customresponsefile.schema.json",
  "statusCode": 429,
  "headers": [
    {
      "name": "retry-after",
      "value": "@dynamic"
    },
    {
      "name": "content-type",
      "value": "application/json"
    }
  ],
  "body": {
    "error": {
      "message": "You have exceeded your token quota. Please wait before making additional requests.",
      "type": "insufficient_quota",
      "code": "token_quota_exceeded"
    }
  }
}

Proprietà della risposta personalizzate

Property Description
statusCode Codice di stato HTTP da restituire quando viene superato il limite di token.
headers Matrice di intestazioni HTTP da includere nella risposta. Usare @dynamic per riprovare dopo per calcolare automaticamente i secondi fino alla reimpostazione.
body Oggetto corpo della risposta serializzato in JSON.

Come funziona

LanguageModelRateLimitingPlugin funziona con:

  1. Intercettazione delle richieste API OpenAI: monitora le richieste POST agli URL configurati che contengono corpi di richiesta compatibili con OpenAI
  2. Rilevamento dell'utilizzo dei token: analizza le risposte da estrarre prompt_tokens e completion_tokens dalla sezione relativa all'utilizzo
  3. Applicazione dei limiti: mantiene i totali in esecuzione dei token utilizzati entro l'intervallo di tempo configurato
  4. Fornire risposte di limitazione: quando vengono superati i limiti, restituisce risposte standard di limitazione o risposte personalizzate

Tipi di richiesta supportati

Il plug-in supporta sia il completamento OpenAI che le richieste di completamento della chat:

  • Richieste di completamento: richieste con una prompt proprietà
  • Richieste di completamento chat: richieste con una messages proprietà

Rilevamento dei token

Il consumo di token viene monitorato separatamente per:

  • Token di richiesta: token di input utilizzati dalla richiesta
  • Token di completamento: token di output generati dalla risposta

Quando uno dei due limiti viene superato, le richieste successive vengono limitate fino alla reimpostazione dell'intervallo di tempo.

Comportamento dell'intervallo di tempo

  • Reimpostazione dei limiti dei token dopo la configurazione resetTimeWindowSeconds
  • Il timer di reimpostazione viene avviato quando viene elaborata la prima richiesta
  • Quando scade un intervallo di tempo, i contatori dei token di richiesta e di completamento vengono reimpostati ai limiti configurati

Risposta di limitazione predefinita

Quando whenLimitExceeded è impostato su Throttle, il plug-in restituisce una risposta di errore compatibile con OpenAI standard:

{
  "error": {
    "message": "You exceeded your current quota, please check your plan and billing details.",
    "type": "insufficient_quota",
    "param": null,
    "code": "insufficient_quota"
  }
}

La risposta include:

  • Codice di stato HTTP: 429 Too Many Requests
  • retry-after intestazione con secondi fino alla reimpostazione dei limiti dei token
  • Intestazioni CORS quando la richiesta originale include un'intestazione Origin

Casi d'uso

LanguageModelRateLimitingPlugin è utile per:

  • Test della limitazione della frequenza basata su token: simulare il comportamento dell'applicazione quando i provider di modelli linguistici applicano le quote di token
  • Simulazione dei costi di sviluppo: comprendere i modelli di utilizzo dei token durante lo sviluppo prima di raggiungere i limiti reali delle API
  • Test di resilienza: verificare che l'applicazione gestisca correttamente gli errori di limite di token e implementi la logica di ripetizione dei tentativi appropriata
  • Test LLM locale: scenari di limitazione dei token di test con modelli linguistici locali (ad esempio Ollama) che non applicano limiti specifici

Scenari di esempio

Scenario 1: Limitazione dei token di base

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 1000,
    "completionTokenLimit": 500,
    "resetTimeWindowSeconds": 300
  }
}

Questa configurazione consente fino a 1.000 token di richiesta e 500 token di completamento in un intervallo di 5 minuti.

Scenario 2: Risposte di errore personalizzate

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 2000,
    "completionTokenLimit": 1000,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Custom",
    "customResponseFile": "custom-token-error.json"
  }
}

Questa configurazione usa un file di risposta personalizzato per fornire messaggi di errore specializzati quando vengono superati i limiti dei token.

Passo successivo