LanguageModelRateLimitingPlugin

A nyelvi modell API-k jogkivonatalapú sebességkorlátozását szimulálja a parancssori és befejezési jogkivonat-használat nyomon követésével a konfigurálható időkereteken belül.

Képernyőkép egy parancssorról, amelyen a fejlesztői proxy szimulál egy nyelvi modell sebességkorlátozó válaszát egy LLM API-kéréshez.

Példa konfigurációra

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.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/v3.0.0/languagemodelratelimitingplugin.schema.json",
    "promptTokenLimit": 5000,
    "completionTokenLimit": 5000,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Throttle",
    "headerRetryAfter": "retry-after"
  }
}

Konfigurációs tulajdonságok

Property Description Default
promptTokenLimit Az időkereten belül engedélyezett parancssori jogkivonatok maximális száma. 5000
completionTokenLimit Az időkereten belül engedélyezett befejezési jogkivonatok maximális száma. 5000
resetTimeWindowSeconds Időablak másodpercben, amely után a jogkivonatok korlátai alaphelyzetbe állíthatók. 60
whenLimitExceeded Válasz viselkedése a tokenkorlátok túllépésekor. A következők egyike lehet: Throttle vagy Custom. Throttle
headerRetryAfter Az újrapróbálkozás utáni információkat tartalmazó HTTP-fejléc neve. retry-after
customResponseFile Egyéni választ tartalmazó fájl elérési útja, ha whenLimitExceeded be van állítva Custom. token-limit-response.json

Egyéni válaszkonfiguráció

Ha whenLimitExceeded be van állítva Custom, egyéni választ adhat meg egy külön JSON-fájlban:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.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"
    }
  }
}

Egyéni választulajdonságok

Property Description
statusCode HTTP-állapotkód, amely a jogkivonat-korlát túllépésekor ad vissza.
headers A válaszba belefoglalandó HTTP-fejlécek tömbje. Az újrapróbálkozáshoz használva @dynamic automatikusan kiszámíthatja a másodperceket az alaphelyzetbe állításig.
body A JSON-ra szerializált választörzs-objektum.

Hogyan működik?

A LanguageModelRateLimitingPlugin a következő módon működik:

  1. OpenAI API-kérések elfogása: Figyeli a POST-kéréseket az OpenAI-kompatibilis kérelemtörzseket tartalmazó konfigurált URL-címekre
  2. Jogkivonat-használat nyomon követése: Elemzi a kinyerni prompt_tokens kívánt és completion_tokens a használati szakaszból származó válaszokat
  3. Korlátozások kikényszerítése: A felhasznált jogkivonatok összegének fenntartása a konfigurált időkereten belül
  4. Szabályozási válaszok megadása: Ha túllépi a korlátokat, a standard szabályozási válaszokat vagy az egyéni válaszokat adja vissza

Támogatott kéréstípusok

A beépülő modul támogatja az OpenAI-befejezési és a csevegés-befejezési kéréseket is:

  • Befejezési kérelmek: Tulajdonsággal rendelkező prompt kérelmek
  • Csevegés befejezésére vonatkozó kérések: Tulajdonsággal rendelkező messages kérések

Jogkivonatok nyomon követése

A jogkivonat-felhasználást külön követi nyomon a következőhöz:

  • Parancssori jogkivonatok: A kérés által felhasznált bemeneti jogkivonatok
  • Befejezési jogkivonatok: A válasz által létrehozott kimeneti jogkivonatok

Ha bármelyik korlátot túllépi, a későbbi kérések szabályozása addig történik, amíg az időkeret alaphelyzetbe nem áll.

Az időablak viselkedése

  • A tokenkorlátok alaphelyzetbe állítása a konfigurált után resetTimeWindowSeconds
  • Az alaphelyzetbe állítás időzítője az első kérés feldolgozásakor indul el
  • Ha egy időablak lejár, a parancssori és a befejezési jogkivonat számlálói is visszaállítják a konfigurált korlátokat

Alapértelmezett szabályozási válasz

Ha whenLimitExceeded be van állítva Throttle, a beépülő modul egy standard OpenAI-kompatibilis hibaválaszt ad vissza:

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

A válasz a következőket tartalmazza:

  • HTTP-állapotkód: 429 Too Many Requests
  • retry-after fejléc másodperccel, amíg a jogkivonatkorlátok alaphelyzetbe nem állíthatók
  • CORS-fejlécek, ha az eredeti kérés tartalmaz egy fejlécet Origin

Használati esetek

A LanguageModelRateLimitingPlugin a következő esetekben hasznos:

  • Jogkivonatalapú sebességkorlátozás tesztelése: Szimulálja az alkalmazás viselkedését, amikor a nyelvi modellszolgáltatók jogkivonatkvótákat kényszerítenek ki
  • Fejlesztési költségszimuláció: A tokenhasználati minták megismerése a fejlesztés során, mielőtt valós API-korlátokat érnénk el
  • Rugalmasságtesztelés: Ellenőrizze, hogy az alkalmazás megfelelően kezeli-e a jogkivonatkorlát hibáit, és implementálja-e a megfelelő újrapróbálkozási logikát
  • Helyi LLM-tesztelés: Olyan helyi nyelvi modellek (például Ollama) jogkivonat-korlátozási forgatókönyveinek tesztelése, amelyek nem kényszerítik saját korlátaikat

Példaforgatókönyvek

1. forgatókönyv: Alapszintű jogkivonat-korlátozás

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

Ez a konfiguráció legfeljebb 1000 parancssori jogkivonatot és 500 befejezési jogkivonatot tesz lehetővé egy 5 perces ablakban.

2. forgatókönyv: Egyéni hibaválaszok

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

Ez a konfiguráció egyéni válaszfájlt használ a speciális hibaüzenetek biztosítására a jogkivonat-korlátok túllépése esetén.

Következő lépés