Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mensimulasikan pembatasan tarif berbasis token untuk API model bahasa dengan melacak konsumsi token prompt dan penyelesaian dalam jendela waktu yang dapat dikonfigurasi.
Contoh konfigurasi
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.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.1.0/languagemodelratelimitingplugin.schema.json",
"promptTokenLimit": 5000,
"completionTokenLimit": 5000,
"resetTimeWindowSeconds": 60,
"whenLimitExceeded": "Throttle",
"headerRetryAfter": "retry-after"
}
}
Properti konfigurasi
| Property | Description | Default |
|---|---|---|
promptTokenLimit |
Jumlah maksimum token prompt yang diizinkan dalam jendela waktu. | 5000 |
completionTokenLimit |
Jumlah maksimum token penyelesaian yang diizinkan dalam jendela waktu. | 5000 |
resetTimeWindowSeconds |
Jendela waktu dalam detik setelah token membatasi reset. | 60 |
whenLimitExceeded |
Perilaku respons ketika batas token terlampaui. Bisa Throttle atau Custom. |
Throttle |
headerRetryAfter |
Nama header HTTP untuk menyertakan informasi coba lagi setelah. | retry-after |
customResponseFile |
Jalur ke file yang berisi respons kustom saat whenLimitExceeded diatur ke Custom. |
token-limit-response.json |
Konfigurasi respons kustom
Ketika whenLimitExceeded diatur ke Custom, Anda dapat menentukan respons kustom dalam file JSON terpisah:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.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"
}
}
}
Properti respons kustom
| Property | Description |
|---|---|
statusCode |
Kode status HTTP untuk dikembalikan ketika batas token terlampaui. |
headers |
Array header HTTP untuk disertakan dalam respons. Gunakan @dynamic untuk coba lagi-setelah untuk menghitung detik secara otomatis hingga reset. |
body |
Objek isi respons yang diserialisasikan ke JSON. |
Cara kerjanya
LanguageModelRateLimitingPlugin berfungsi dengan:
- Mencegat permintaan OPENAI API: Memantau permintaan POST ke URL yang dikonfigurasi yang berisi badan permintaan yang kompatibel dengan OpenAI
-
Melacak konsumsi token: Mengurai respons untuk mengekstrak
prompt_tokensdancompletion_tokensdari bagian penggunaan - Pemberlakuan batas: Mempertahankan total token yang dikonsumsi yang berjalan dalam jendela waktu yang dikonfigurasi
- Memberikan respons pembatasan: Ketika batas terlampaui, mengembalikan respons pembatasan standar atau respons kustom
Jenis permintaan yang didukung
Plugin mendukung permintaan penyelesaian OpenAI dan penyelesaian obrolan:
-
Permintaan penyelesaian: Permintaan dengan
promptproperti -
Permintaan penyelesaian obrolan: Permintaan dengan
messagesproperti
Pelacakan token
Konsumsi token dilacak secara terpisah untuk:
- Token perintah: Token input yang digunakan oleh permintaan
- Token penyelesaian: Token output yang dihasilkan oleh respons
Ketika salah satu batas terlampaui, permintaan berikutnya dibatasi hingga jendela waktu direset.
Perilaku jendela waktu
- Batas token diatur ulang setelah dikonfigurasi
resetTimeWindowSeconds - Timer reset dimulai ketika permintaan pertama diproses
- Saat jendela waktu kedaluwarsa, penghitung token perintah dan penyelesaian mengatur ulang ke batas yang dikonfigurasi
Respons pembatasan default
Ketika whenLimitExceeded diatur ke Throttle, plugin mengembalikan respons kesalahan standar yang kompatibel dengan OpenAI:
{
"error": {
"message": "You exceeded your current quota, please check your plan and billing details.",
"type": "insufficient_quota",
"param": null,
"code": "insufficient_quota"
}
}
Responsnya meliputi:
- Kode status HTTP:
429 Too Many Requests -
retry-afterheader dengan detik hingga batas token diatur ulang - Header CORS saat permintaan asli menyertakan
Originheader
Kasus penggunaan
LanguageModelRateLimitingPlugin berguna untuk:
- Menguji pembatasan tarif berbasis token: Mensimulasikan perilaku aplikasi Anda saat penyedia model bahasa memberlakukan kuota token
- Simulasi biaya pengembangan: Memahami pola konsumsi token selama pengembangan sebelum mencapai batas API nyata
- Pengujian ketahanan: Verifikasi bahwa aplikasi Anda menangani kesalahan batas token dengan benar dan menerapkan logika coba lagi yang sesuai
- Pengujian LLM lokal: Menguji skenario pembatasan token dengan model bahasa lokal (seperti Ollama) yang tidak memberlakukan batasannya sendiri
Contoh skenario
Skenario 1: Pembatasan token dasar
{
"languageModelRateLimitingPlugin": {
"promptTokenLimit": 1000,
"completionTokenLimit": 500,
"resetTimeWindowSeconds": 300
}
}
Konfigurasi ini memungkinkan hingga 1.000 token prompt dan 500 token penyelesaian dalam jangka waktu 5 menit.
Skenario 2: Respons kesalahan kustom
{
"languageModelRateLimitingPlugin": {
"promptTokenLimit": 2000,
"completionTokenLimit": 1000,
"resetTimeWindowSeconds": 60,
"whenLimitExceeded": "Custom",
"customResponseFile": "custom-token-error.json"
}
}
Konfigurasi ini menggunakan file respons kustom untuk memberikan pesan kesalahan khusus ketika batas token terlampaui.