Bagikan melalui


LanguageModelRateLimitingPlugin

Mensimulasikan pembatasan tarif berbasis token untuk API model bahasa dengan melacak konsumsi token prompt dan penyelesaian dalam jendela waktu yang dapat dikonfigurasi.

Cuplikan layar prompt perintah dengan Proksi Dev yang mensimulasikan respons pembatasan laju model bahasa untuk permintaan LLM API.

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:

  1. Mencegat permintaan OPENAI API: Memantau permintaan POST ke URL yang dikonfigurasi yang berisi badan permintaan yang kompatibel dengan OpenAI
  2. Melacak konsumsi token: Mengurai respons untuk mengekstrak prompt_tokens dan completion_tokens dari bagian penggunaan
  3. Pemberlakuan batas: Mempertahankan total token yang dikonsumsi yang berjalan dalam jendela waktu yang dikonfigurasi
  4. 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 prompt properti
  • Permintaan penyelesaian obrolan: Permintaan dengan messages properti

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-after header dengan detik hingga batas token diatur ulang
  • Header CORS saat permintaan asli menyertakan Origin header

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.

Langkah selanjutnya