Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
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:
- OpenAI API isteklerini kesme: OpenAI uyumlu istek gövdeleri içeren yapılandırılmış URL'ler için POST isteklerini izler
-
İzleme belirteci tüketimi: Yanıtları ayıklamak ve
prompt_tokenskullanım bölümünden ayrıştırmakcompletion_tokensiçin ayrıştırma - Sınırları zorunlu tutma: Yapılandırılmış zaman penceresinde tüketilen belirteçlerin çalışan toplamlarını korur
- 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
promptistekler -
Sohbet tamamlama istekleri: Özelliği olan
messagesistekler
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-afterbelirteç 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.