Bagikan melalui


Menguji batas token model bahasa

Sekilas
Tujuan: Menguji batas laju token LLM
Waktu: 10 menit
Plugins:LanguageModelRateLimitingPlugin
Prasyarat:Menyiapkan Proksi Dev

Saat membuat aplikasi yang menggunakan model bahasa, Anda harus menguji bagaimana aplikasi Anda menangani pembatasan tarif berbasis token. Dev Proxy memungkinkan Anda mensimulasikan batas token pada API model bahasa menggunakan LanguageModelRateLimitingPlugin.

Menyimulasikan batas token pada API model bahasa

Untuk memulai, aktifkan LanguageModelRateLimitingPlugin dalam file konfigurasi Anda.

File: devproxyrc.json

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

Tip

Plugin ini berfungsi dengan API yang kompatibel dengan OpenAI, termasuk model bahasa lokal seperti Ollama. Sertakan semua titik akhir API model bahasa yang ingin Anda uji di urlsToWatch properti .

Selanjutnya, konfigurasikan plugin dengan batas token dan jendela waktu yang Anda inginkan.

File: devproxyrc.json (lengkap dengan batas token)

{
  "$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": 1000,
    "completionTokenLimit": 500,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Throttle"
  }
}

Konfigurasi ini memungkinkan hingga 1.000 token prompt dan 500 token penyelesaian dalam jendela 60 detik. Ketika salah satu batas terlampaui, permintaan berikutnya dibatasi dengan respons standar 429.

Mulai Dev Proxy dengan file konfigurasi Anda dan gunakan aplikasi Anda untuk membuat permintaan model bahasa. Plugin melacak konsumsi token dari respons API aktual dan membatasi permintaan ketika batas terlampaui.

Uji dengan respons kesalahan kustom

Anda juga dapat mengonfigurasi respons kustom saat batas token terlampaui dengan mengatur whenLimitExceeded ke Custom dan membuat file respons kustom.

File: devproxyrc.json (hanya bagian languageModelRateLimitingPlugin)

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 500,
    "completionTokenLimit": 300,
    "resetTimeWindowSeconds": 120,
    "whenLimitExceeded": "Custom",
    "customResponseFile": "token-limit-response.json"
  }
}

Buat file respons kustom dengan format kesalahan yang Anda inginkan:

File: token-limit-response.json

{
  "$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": "Token quota exceeded. Your application has consumed all available tokens for this time period.",
      "type": "quota_exceeded",
      "code": "TOKENS_EXHAUSTED",
      "details": {
        "quota_type": "tokens",
        "retry_after_seconds": "@dynamic"
      }
    }
  }
}

Nilai @dynamic untuk header retry-after secara otomatis menghitung sisa detik hingga batas token direset.

Menguji skenario yang berbeda

Skenario 1: Batas token rendah untuk pengujian yang sering

File: devproxyrc.json (hanya bagian languageModelRateLimitingPlugin)

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 100,
    "completionTokenLimit": 50,
    "resetTimeWindowSeconds": 30
  }
}

Gunakan batas rendah dengan jendela waktu singkat untuk memicu pembatasan dengan cepat selama pengembangan dan pengujian.

Skenario 2: Batas seperti produksi

File: devproxyrc.json (hanya bagian languageModelRateLimitingPlugin)

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 10000,
    "completionTokenLimit": 5000,
    "resetTimeWindowSeconds": 3600
  }
}

Untuk menguji pola konsumsi token realistis, konfigurasikan batas yang mirip dengan lingkungan produksi Anda.

Skenario 3: Batas asimetris

File: devproxyrc.json (hanya bagian languageModelRateLimitingPlugin)

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 2000,
    "completionTokenLimit": 100,
    "resetTimeWindowSeconds": 300
  }
}

Skenario pengujian di mana batas token penyelesaian lebih rendah daripada batas awalan, mensimulasikan rencana API yang hemat biaya.

Langkah selanjutnya

Pelajari selengkapnya tentang LanguageModelRateLimitingPlugin.