Batas penggunaan LLM: token per menit, permintaan per menit, dan apa yang terjadi ketika Anda mencapainya

API model bahasa membatasi lalu lintas Anda dalam 2 cara sekaligus: berapa banyak permintaan yang Anda kirim per menit (RPM) dan berapa banyak token yang Anda gunakan per menit (TPM). Anda dapat tetap jauh di bawah batas permintaan Anda dan masih dibatasi karena beberapa prompt yang panjang menggunakan anggaran token Anda. Saat Anda mencapai salah satu batas, API menjawab dengan 429 Too Many Requests dan aplikasi Anda harus menunggu.

Bagaimana OpenAI, Azure OpenAI, dan Anthropic menghitung

Provider Apa saja yang dibatasi Yang perlu diketahui
OpenAI RPM, permintaan per hari, TPM, token per hari, dan banyak lagi, per organisasi dan proyek, per model Anda mencapai batas yang tercapai lebih dulu. Untuk batas token, permintaan dihitung sebagai yang lebih tinggi dari max_tokens dan perkiraan berdasarkan karakternya. Permintaan yang gagal juga diperhitungkan.
Azure OpenAI TPM yang Anda tetapkan untuk setiap penyebaran, ditambah batas RPM yang ditetapkan sebanding dengannya RPM diperiksa melalui jendela 1 atau 10 detik, sehingga lonjakan mendapatkan 429 bahkan ketika total per menit baik-baik saja. Perkiraan token mencakup max_tokens.
Anthropic RPM, token input per menit (ITPM), dan token output per menit (OTPM), per model Kapasitas diisi ulang secara terus-menerus, dan 60 RPM mungkin diberlakukan sebagai 1 permintaan per detik. Untuk sebagian besar model, token input yang di-cache tidak dihitung terhadap ITPM, dan token output max_tokens tidak dihitung terhadap OTPM.

Jika Anda mengatur max_tokens ke 4.000 dan mendapatkan 200 token kembali, OpenAI dan Azure OpenAI tetap menghitung 4.000 tersebut ke dalam batas Anda. Itulah cara Anda bisa mendapatkan 429s sementara metrik penggunaan Anda terlihat jauh di bawah kuota Anda.

Apa arti 429 untuk setiap penyedia

Tidak setiap 429 hilang jika Anda menunggu.

Provider Tunggu dan coba lagi Berhenti dan beri tahu seseorang
OpenAI 429 untuk permintaan atau token, 429 slow_down (lalu lintas Anda tumbuh terlalu cepat, bahkan dalam batas Anda), dan 503 server_is_overloaded. Tunggu Retry-After saat tersedia. 429 dengan credit_balance_exhausted, organization_spend_limit_exceeded, project_spend_limit_exceeded, atau organization_usage_limit_exceeded di error.code. Mencoba kembali tidak akan memulihkan akses.
Azure OpenAI 429 untuk TPM atau RPM deployment, untuk kapasitas sistem, atau untuk pengurangan sementara batas laju Anda. Tunggu retry-after-ms. Error 429 yang terus terjadi di lingkungan produksi saat Anda berada di bawah kuota yang disetujui. Periksa alokasi TPM deployment, lalu buka permintaan dukungan.
Anthropic 429 rate_limit_error dengan retry-after header, termasuk batas akselerasi setelah peningkatan penggunaan yang tajam, dan 529 overloaded_error. 429 untuk batas pengeluaran bulanan. Ini tidak memiliki header retry-after, error.details.error_code adalah enforced_spend_limit_reached, dan terus gagal sampai akses kembali pulih.

Cara menangani batas laju LLM

  1. Periksa 429 mana yang Anda dapatkan. Kesalahan penagihan, pengeluaran, dan kuota membutuhkan seseorang, bukan percobaan ulang.
  2. Tunggu selama yang diminta API. OpenAI dan Anthropic mengirim retry-after dalam hitung detik. Azure OpenAI mengirimkan retry-after-ms dalam milidetik. Tanpa petunjuk, mundur secara eksponensial dengan jitter acak, dan batasi jumlah upaya dan total waktu.
  3. Ketahui apa yang sudah dapat dilakukan SDK Anda. OpenAI dan Anthropic Python SDK mencoba kembali saat terjadi kesalahan koneksi dan 408, 409, 429, dan respons 5xx 2 kali secara default. Jika Anda menambahkan perulangan coba lagi Anda sendiri, nonaktifkan percobaan ulang SDK, misalnya dengan max_retries=0 di Python, seperti yang disarankan Azure OpenAI, atau jumlah percobaan akan berlipat ganda.
  4. Kurangi yang penting. Pada OpenAI dan Azure OpenAI, atur max_tokens mendekati ukuran respons yang Anda harapkan. Pada Anthropic, simpan konten berulang dalam cache seperti instruksi sistem.
  5. Ramp up secara bertahap. Lonjakan tajam dalam trafik memicu batas percepatan permintaan OpenAI slow_down dan Anthropic, bahkan dalam batas Anda. OpenAI menyarankan bahwa setelah Anda mencapai 1 juta token input per menit, peningkatan Anda tidak lebih dari 50% setiap 15 menit.
  6. Jangan memutar ulang streaming yang sudah Anda tonton. Kesalahan setelah streaming dimulai dapat tiba sebagai peristiwa streaming, dan OpenAI menyarankan untuk tidak memutar ulang permintaan secara otomatis setelah Anda mengonsumsi output.
  7. Beri tahu pengguna ketika permintaan macet karena respons 429, alih-alih menampilkan spinner.

Cara menguji bahwa aplikasi Anda menangani batas laju LLM

Approach Apa yang Anda temukan Yang Anda lewatkan
Mock klien SDK dalam pengujian Anda, atau biarkan agen coding Anda menulis mock Apakah cabang error Anda berjalan Kode status sebenarnya, kode kesalahan, dan header penyedia, serta percobaan ulang SDK Anda sendiri. Aplikasi Anda juga memerlukan flag khusus pengujian untuk mengakses mock.
Panggil API nyata sampai membatasi laju permintaan Anda Perilaku aktual Anda membayar untuk setiap token, dan Anda tidak dapat memicu slow_down kelebihan beban atau batas pengeluaran sesuai permintaan
Mencegat lalu lintas nyata aplikasi Anda dan mengembalikan kesalahan penyedia, atau membatasi laju berdasarkan token yang digunakan aplikasi Anda URL asli, kebijakan percobaan ulang SDK Anda, dan body error penyedia, dengan batas yang Anda pilih Kode Anda secara terpisah. Simpan pengujian unit Anda untuk itu.

Cobalah di aplikasi Anda

Dev Proxy mencegat permintaan aplikasi Anda ke API model bahasa dan mengembalikan error milik penyedia, sementara aplikasi Anda terus memanggil URL nyata. Untuk OpenAI, unduh preset dan mulai Dev Proxy dengannya:

devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"

openai-throttling preset gagal pada 90% permintaan ke https://api.openai.com/* dengan kesalahan acak: rate_limit_exceeded untuk TPM atau RPM, slow_down, credit_balance_exhausted, atau 503 server_is_overloaded. Preset anthropic-throttling melakukan hal yang sama untuk https://api.anthropic.com/* dengan RPM, token input, token output, dan akselerasi 429s, dan 529 overloaded_error. Kedua prasetel mencakup RetryAfterPlugin, yang memberi tahu Anda ketika aplikasi Anda memanggil API lagi sebelum retry-after waktu tunggu 429 berakhir. Ini tidak memeriksa respons 503 dan 529.

Untuk menerapkan pembatasan laju berdasarkan token yang benar-benar digunakan aplikasi Anda, gunakan LanguageModelRateLimitingPlugin. Ini menghitung token prompt dan penyelesaian yang dilaporkan oleh setiap respons dan mengembalikan 429 dengan retry-after saat aplikasi Anda melewati batas yang Anda tetapkan. Ini berfungsi dengan API yang kompatibel dengan OpenAI, termasuk Azure OpenAI dan model lokal:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
  "plugins": [
    {
      "name": "LanguageModelRateLimitingPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "languageModelRateLimitingPlugin"
    }
  ],
  "urlsToWatch": [
    "https://api.openai.com/*",
    "https://*.openai.azure.com/openai/deployments/*/chat/completions*"
  ],
  "languageModelRateLimitingPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/languagemodelratelimitingplugin.schema.json",
    "promptTokenLimit": 1000,
    "completionTokenLimit": 500,
    "resetTimeWindowSeconds": 60
  }
}

Plugin tidak mereprodusi max_tokens estimasi. Isi 429 defaultnya menggunakan kode insufficient_quota. Untuk mengembalikan isi kesalahan yang diharapkan aplikasi Anda untuk batas laju, atur whenLimitExceeded ke Custom dan arahkan customResponseFile ke respons Anda sendiri. Untuk menginstal Dev Proxy, lihat Menyiapkan Dev Proxy.

Langkah berikutnya

Baca juga