Aracılığıyla paylaş


LanguageModelRateLimitingPlugin

Yapılandırılabilir zaman pencerelerinde istem ve tamamlama belirteci tüketimini izleyerek dil modeli API'leri için belirteç tabanlı hız sınırlamasının benzetimini yapın.

BIR LLM API isteği için yanıtı sınırlayan bir dil modeli hızının benzetimini gösteren Geliştirici Proxy'si ile komut isteminin ekran görüntüsü.

Yapılandırma örneği

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

Yapılandırma özellikleri

Property Description Default
promptTokenLimit Zaman penceresinde izin verilen en fazla istem belirteci sayısı. 5000
completionTokenLimit Zaman penceresi içinde izin verilen en fazla tamamlanma belirteci sayısı. 5000
resetTimeWindowSeconds Belirteç sınırlarının sıfırlanması için saniyeler içinde zaman penceresi. 60
whenLimitExceeded Belirteç sınırları aşıldığında yanıt davranışı. Throttle veya Custom olabilir. Throttle
headerRetryAfter Yeniden deneme sonrası bilgilerini içerecek HTTP üst bilgisinin adı. retry-after
customResponseFile olarak ayarlandığında whenLimitExceededözel yanıt Custom içeren dosyanın yolu. token-limit-response.json

Özel yanıt yapılandırması

whenLimitExceeded olarak ayarlandığındaCustom, ayrı bir JSON dosyasında özel yanıt tanımlayabilirsiniz:

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

Özel yanıt özellikleri

Property Description
statusCode Belirteç sınırı aşıldığında döndürülecek HTTP durum kodu.
headers Yanıta eklenecek HTTP üst bilgileri dizisi. Sıfırlamaya kadar saniyeleri otomatik olarak hesaplamak için yeniden deneme sonrası için kullanın @dynamic .
body JSON'a seri hale getirilmiş yanıt gövdesi nesnesi.

Nasıl çalışır?

LanguageModelRateLimitingPlugin şu şekilde çalışır:

  1. OpenAI API isteklerini kesme: OpenAI uyumlu istek gövdeleri içeren yapılandırılmış URL'ler için POST isteklerini izler
  2. İzleme belirteci tüketimi: Yanıtları ayıklamak ve prompt_tokens kullanım bölümünden ayrıştırmak completion_tokens için ayrıştırma
  3. Sınırları zorunlu tutma: Yapılandırılmış zaman penceresinde tüketilen belirteçlerin çalışan toplamlarını korur
  4. Azaltma yanıtları sağlama: Sınırlar aşıldığında standart azaltma yanıtları veya özel yanıtlar döndürür

Desteklenen istek türleri

Eklenti hem OpenAI tamamlama hem de sohbet tamamlama isteklerini destekler:

  • Tamamlama istekleri: Özelliği olan prompt istekler
  • Sohbet tamamlama istekleri: Özelliği olan messages istekler

Belirteç izleme

Belirteç tüketimi şu nedenler için ayrı olarak izlenir:

  • İstem belirteçleri: İstek tarafından kullanılan giriş belirteçleri
  • Tamamlama belirteçleri: Yanıt tarafından oluşturulan çıkış belirteçleri

İki sınırdan biri aşıldığında, zaman penceresi sıfırlanana kadar sonraki istekler kısıtlanır.

Zaman penceresi davranışı

  • Belirteç sınırları yapılandırıldıktan sonra sıfırlandı resetTimeWindowSeconds
  • Sıfırlama zamanlayıcısı ilk istek işlendiğinde başlar
  • Zaman penceresinin süresi dolduğunda, hem istem hem de tamamlama belirteci sayaçları yapılandırılan sınırlarına sıfırlanır

Varsayılan azaltma yanıtı

whenLimitExceeded olarak ayarlandığındaThrottle, eklenti standart bir OpenAI uyumlu hata yanıtı döndürür:

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

Yanıt şunları içerir:

  • HTTP durum kodu: 429 Too Many Requests
  • retry-after belirteç sınırları sıfırlanıncaya kadar saniye içeren üst bilgi
  • Özgün istek bir Origin üst bilgi içerdiğinde CORS üst bilgileri

Kullanım örnekleri

LanguageModelRateLimitingPlugin aşağıdakiler için kullanışlıdır:

  • Belirteç tabanlı hız sınırlamasını test etme: Dil modeli sağlayıcıları belirteç kotalarını zorunlu kıldığında uygulamanızın nasıl davrandığının benzetimini yapın
  • Geliştirme maliyeti simülasyonu: Gerçek API sınırlarına erişmeden önce geliştirme sırasında belirteç tüketimi desenlerini anlama
  • Dayanıklılık testi: Uygulamanızın belirteç sınırı hatalarını düzgün işlediğini ve uygun yeniden deneme mantığını uyguladığını doğrulayın
  • Yerel LLM testi: Kendi sınırlarını uygulamayan yerel dil modelleriyle (Ollama gibi) belirteç sınırlama senaryolarını test etme

Örnek senaryolar

Senaryo 1: Temel belirteç sınırlama

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

Bu yapılandırma, 5 dakikalık bir süre içinde en fazla 1.000 istem belirteci ve 500 tamamlama belirteci sağlar.

Senaryo 2: Özel hata yanıtları

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

Bu yapılandırma, belirteç sınırları aşıldığında özel hata iletileri sağlamak için özel bir yanıt dosyası kullanır.

Sonraki adım