Sdílet prostřednictvím


LanguageModelRateLimitingPlugin

Simuluje omezování rychlosti založené na tokenech pro rozhraní API jazykového modelu sledováním spotřeby tokenů výzvy a dokončení v rámci konfigurovatelných časových intervalů.

Snímek obrazovky s příkazovým řádkem se simulující odezvou omezování rychlosti jazykového modelu pro požadavek rozhraní LLM API

Příklad konfigurace

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

Vlastnosti konfigurace

Property Description Default
promptTokenLimit Maximální počet tokenů výzvy povolených v časovém intervalu 5000
completionTokenLimit Maximální počet tokenů dokončení povolených v časovém intervalu 5000
resetTimeWindowSeconds Časové období v sekundách, po kterém se resetuje omezení tokenu. 60
whenLimitExceeded Chování odpovědi při překročení limitů tokenů Může být Throttle nebo Custom. Throttle
headerRetryAfter Název hlavičky HTTP, která bude obsahovat informace o opakování. retry-after
customResponseFile Cesta k souboru obsahujícímu vlastní odpověď, pokud whenLimitExceeded je nastavena na Customhodnotu . token-limit-response.json

Vlastní konfigurace odpovědi

Pokud whenLimitExceeded je tato možnost nastavená Custom, můžete definovat vlastní odpověď v samostatném souboru JSON:

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

Vlastní vlastnosti odpovědi

Property Description
statusCode Stavový kód HTTP, který se vrátí při překročení limitu tokenu.
headers Pole hlaviček HTTP, které se mají zahrnout do odpovědi. Slouží @dynamic k automatickému výpočtu sekund do resetování po opakování.
body Základní objekt odpovědi serializovaný do formátu JSON.

Jak to funguje

LanguageModelRateLimitingPlugin funguje následovně:

  1. Zachycení požadavků rozhraní OpenAI API: Monitoruje požadavky POST na nakonfigurované adresy URL, které obsahují subjekty žádostí kompatibilní s OpenAI.
  2. Sledování spotřeby tokenů: Analyzuje odpovědi pro extrakci prompt_tokens a completion_tokens z oddílu využití.
  3. Vynucení limitů: Udržuje průběžné součty spotřebovaných tokenů v rámci nakonfigurovaného časového intervalu.
  4. Poskytnutí odpovědí na omezování: Když dojde k překročení limitů, vrátí standardní odpovědi na omezování nebo vlastní odpovědi.

Podporované typy žádostí

Modul plug-in podporuje dokončování OpenAI i žádosti o dokončení chatu:

  • Žádosti o dokončení: Požadavky s prompt vlastností
  • Žádosti o dokončení chatumessages: Žádosti o vlastnost

Sledování tokenů

Spotřeba tokenů se sleduje samostatně pro:

  • Vyzvání tokenů: Vstupní tokeny spotřebované požadavkem
  • Tokeny dokončení: Výstupní tokeny vygenerované odpovědí

Když dojde k překročení některého limitu, další požadavky se omezí, dokud se časový interval resetuje.

Chování časového intervalu

  • Omezení tokenů se resetuje po nakonfigurování resetTimeWindowSeconds
  • Časovač resetování se spustí při zpracování prvního požadavku.
  • Po vypršení časového intervalu se čítače tokenů výzvy i dokončení resetují na nakonfigurované limity.

Výchozí odpověď na omezování

Pokud whenLimitExceeded je nastavená hodnota Throttle, modul plug-in vrátí standardní chybovou odpověď kompatibilní s OpenAI:

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

Odpověď zahrnuje:

  • Stavový kód HTTP: 429 Too Many Requests
  • retry-after header with seconds until token limits reset
  • Hlavičky CORS, pokud původní požadavek obsahuje hlavičku Origin

Případy použití

LanguageModelRateLimitingPlugin je užitečný pro:

  • Testování omezování rychlosti na základě tokenů: Simulace chování aplikace, když poskytovatelé jazykového modelu vynucují kvóty tokenů
  • Simulace nákladů na vývoj: Pochopení vzorů spotřeby tokenů během vývoje před dosažením skutečných limitů rozhraní API
  • Testování odolnosti: Ověřte, že vaše aplikace správně zpracovává chyby omezení tokenů a implementuje odpovídající logiku opakování.
  • Místní testování LLM: Scénáře omezování tokenů pomocí místních jazykových modelů (jako je Ollama), které nevynucují vlastní limity

Ukázkové scénáře

Scénář 1: Omezení základního tokenu

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

Tato konfigurace umožňuje do 5 minut až 1 000 výzev a 500 tokenů dokončení.

Scénář 2: Vlastní odpovědi na chyby

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

Tato konfigurace používá vlastní soubor odpovědí k poskytování specializovaných chybových zpráv při překročení limitů tokenů.

Další krok