Pengaturan

Bahasa

AI API Rate Limiting: Cara Kerja dan Cara Menanganinya

T
TokenLab
·26 Februari 2026·12 menit baca·Diperbarui 14 Juli 2026·1956 tampilan
#pembatasan laju#produksi#penanganan kesalahan#tutorial#praktik terbaik
AI API Rate Limiting: Cara Kerja dan Cara Menanganinya

Respons 429 dari AI API bisa berarti empat hal berbeda: terlalu banyak permintaan per menit, terlalu banyak token per menit, terlalu banyak koneksi konkuren, atau saldo akun habis. Keempatnya mengembalikan kode status yang sama, jadi solusinya bergantung pada diagnosis batasan mana yang sebenarnya Anda capai, bukan sekadar mencoba lagi dengan lebih agresif. Panduan ini menguraikan mode kegagalan, menunjukkan bukti apa yang tersedia dan tidak tersedia mengenai batasan saat ini, serta memberikan pola percobaan ulang (retry) dan fallback yang tangguh untuk produksi.

Poin Penting

  • Kode 429 bisa berarti batas permintaan, anggaran token, batas konkurensi, atau saldo akun yang habis. Masing-masing memerlukan solusi berbeda, dan percobaan ulang secara membabi buta hanya menyelesaikan satu dari empat masalah tersebut.
  • Baca header rate-limit pada respons yang berhasil, bukan hanya setelah terjadi error, dan lakukan throttling sebelum Anda mendekati batas maksimal.
  • Penghitungan token di sisi klien hanyalah estimasi, bukan jaminan. Ketidakcocokan tokenizer antara pustaka Anda dan penghitungan aktual penyedia dapat membuat margin keamanan lebih sempit dari yang Anda kira.
  • Batas RPM/TPM yang tepat per model dan tier tidak dipublikasikan dalam bukti yang tersedia untuk artikel ini. Anggap angka apa pun yang Anda lihat di tempat lain sebagai sesuatu yang harus diverifikasi terhadap dasbor akun Anda sendiri, bukan konstanta tetap.
  • Percobaan ulang yang tangguh memerlukan exponential backoff, jitter, jumlah percobaan ulang maksimal, dan kepatuhan terhadap header retry-after. Jangan pernah mencoba ulang operasi non-idempotent secara membabi buta.

Memahami AI API Rate Limiting: Empat Mode Kegagalan

Batas permintaan

Sebagian besar penyedia menghitung permintaan per menit (RPM). Jika terlampaui, Anda akan mendapatkan 429 instan, sering kali dengan badan respons kosong. Pengguna yang melakukan paging hasil dengan cepat, atau cron job yang berjalan tanpa throttle, adalah pemicu umum.

Batas token

Ini adalah jebakan yang paling sering diremehkan oleh tim. Penyedia sering kali menerapkan token per menit (TPM) secara terpisah dari RPM, sehingga Anda bisa terkena 429 meskipun masih berada di bawah batas permintaan Anda. Model dengan konteks besar memperburuk hal ini: berdasarkan bukti harga langsung TokenLab (diamati 2026-07-07), Claude Opus 4.8 dan GPT-5.5 mendukung sekitar 1.000.000+ token konteks. Panggilan yang memuat dokumen besar, basis kode penuh, atau riwayat obrolan panjang ke dalam jendela tersebut dapat menghabiskan sebagian besar anggaran token per menit Anda dalam satu permintaan, meskipun itu hanya "satu" permintaan. Ini adalah risiko perencanaan kapasitas berdasarkan ukuran jendela konteks, bukan jumlah token per panggilan yang terukur, jadi validasikan penggunaan aktual terhadap log Anda sendiri daripada berasumsi dengan angka tetap.

Batas konkurensi

Penyedia mungkin menoleransi volume rata-rata per menit Anda sampai Anda membuka lima puluh stream sekaligus. Batas konkurensi membatasi permintaan atau koneksi yang sedang berlangsung secara bersamaan. Respons streaming menahan koneksi tetap terbuka lebih lama, yang menghabiskan slot konkurensi lebih cepat daripada panggilan singkat sekali jalan. Agen pengodean yang dibangun di atas Claude Sonnet 5 atau Kimi K2.7 Code, dan antarmuka suara yang melakukan streaming dari Gemini 3.5 Flash, adalah pemicu umum karena mereka menjaga banyak koneksi jangka panjang tetap terbuka sekaligus.

Kuota atau kehabisan saldo

Ini terlihat identik dengan rate limit di dasbor Anda: panggilan berhenti berfungsi. Namun, solusinya berbeda. Jika akun Anda kehabisan kredit prabayar atau mencapai batas pengeluaran harian yang ketat, API mengembalikan error yang menyerupai rate limit. Backoff tidak ada gunanya di sini. Anda perlu menambah saldo atau menaikkan ambang batas pengeluaran.

Snapshot Sumber

Poin data Sumber Diamati pada
Jendela konteks model dan harga per token Bukti harga/model langsung TokenLab 2026-07-07
Penamaan SSOT model (Claude Sonnet 5, GPT-5.5, Gemini 3.5 Flash, dll.) SSOT model TokenLab 2026-07-07, kedaluwarsa 2026-07-14
Batas tier RPM/TPM penyedia resmi Tidak tersedia dalam set bukti ini Tidak diverifikasi, periksa dasbor akun penyedia
Perilaku normalisasi header gateway TokenLab Tidak tersedia dalam set bukti ini Verifikasi di dokumentasi API TokenLab sebelum mengandalkan skema header tunggal

Jendela Konteks Model dan Harga Saat Ini (Bukti Langsung TokenLab)

Angka-angka ini berasal langsung dari snapshot harga langsung TokenLab. Ini bukan batas RPM atau TPM, melainkan menunjukkan mengapa satu panggilan pada model dengan konteks besar dapat menghabiskan anggaran token secara tidak proporsional.

Model Penyedia Jendela Konteks Input $/MTok Output $/MTok Sumber Diamati
Claude Sonnet 5 Anthropic 1.000.000 $2.00 $10.00 Bukti harga langsung TokenLab 2026-07-07
Claude Opus 4.8 Anthropic 1.000.000 $5.00 $25.00 Bukti harga langsung TokenLab 2026-07-07
Claude Fable 5 Anthropic 1.000.000 $10.00 $50.00 Bukti harga langsung TokenLab 2026-07-07
GPT-5.5 OpenAI 1.050.000 $5.00 $30.00 Bukti harga langsung TokenLab 2026-07-07
GPT-5.5 Batch/Flex OpenAI 1.050.000 $2.50 $15.00 Bukti harga langsung TokenLab 2026-07-07
Gemini 3.5 Flash Google 1.048.576 $1.50 $9.00 Bukti harga langsung TokenLab 2026-07-07
GLM-5.2 Z.ai 1.048.576 $0.93 $3.00 Bukti harga langsung TokenLab 2026-07-07
Kimi K2.7 Code Moonshot AI 262.144 $0.74 $3.50 Bukti harga langsung TokenLab 2026-07-07
DeepSeek V4 Pro DeepSeek 1.048.576 $0.44 $0.87 Bukti harga langsung TokenLab 2026-07-07
DeepSeek V4 Flash DeepSeek 1.048.576 $0.09 $0.18 Bukti harga langsung TokenLab 2026-07-07
Qwen3.7 Plus Alibaba 1.000.000 $0.32 $1.28 Bukti harga langsung TokenLab 2026-07-07
MiniMax M3 MiniMax 1.048.576 $0.30 $1.20 Bukti harga langsung TokenLab 2026-07-07

Catatan SSOT model: nama-nama ini mencerminkan SSOT model TokenLab yang diamati pada 2026-07-07, kedaluwarsa 2026-07-14. Penamaan dan ketersediaan sering berubah. Sebelum Anda melakukan hardcode string model ke dalam kode produksi, pastikan model tersebut masih terdaftar di direktori model TokenLab atau papan peringkat model.

Memperbaiki Kegagalan Rate Limit Tanpa Membangun Logika Percobaan Ulang dari Awal

Semua hal di atas adalah diagnosis. Pekerjaan remediasi, memutuskan model mana yang akan digunakan sebagai fallback, melacak konkurensi per pengguna, dan menjaga gambaran langsung tentang keluarga model mana yang sehat, adalah hal yang dirancang untuk ditangani oleh lapisan perutean TokenLab. Alih-alih membuat matriks fallback sendiri di lima penyedia, Anda mengarahkan permintaan ke TokenLab dan membiarkan gateway memilih di antara katalog model saat ini berdasarkan ketersediaan dan aturan fallback Anda.

Satu catatan jujur: TokenLab berada di depan beberapa penyedia upstream, dan masing-masing upstream mengembalikan set header, format error, dan semantik percobaan ulangnya sendiri. Apakah gateway menormalisasi sepenuhnya setiap header rate-limit menjadi satu skema yang konsisten, atau meneruskan beberapa header upstream tanpa perubahan, tidak dikonfirmasi dalam bukti yang tersedia untuk artikel ini. Verifikasi perilaku header saat ini di dokumentasi API TokenLab sebelum Anda menulis logika parsing yang mengasumsikan skema terpadu tunggal di setiap model. Bangun parser header Anda secara defensif, memeriksa keberadaan setiap bidang daripada berasumsi bahwa bidang tersebut ada.

Membaca Header Rate-Limit

Penyedia mengembalikan informasi rate-limit dalam header respons, meskipun nama pastinya bervariasi tergantung penyedia. Pola umum terlihat seperti ini:

x-ratelimit-limit-requests: 500
x-ratelimit-remaining-requests: 499
x-ratelimit-reset-requests: 12s
retry-after: 0

Baca ini pada respons yang berhasil, bukan hanya setelah 429. Simpan hitungan bergulir dari anggaran yang tersisa dan perlambat saat Anda turun di bawah ambang batas keamanan, biasanya 10-20% headroom, meskipun angka yang tepat bergantung pada burstiness lalu lintas Anda dan bukan sesuatu yang dapat ditentukan oleh set bukti ini untuk Anda.

Logika Percobaan Ulang Dengan Penanganan Error Eksplisit

Pembantu percobaan ulang perlu menangani lebih dari sekadar kasus 429. Ia harus membedakan error transien (429, 503, timeout) dari error klien (4xx selain 429) yang tidak akan pernah berhasil jika dicoba ulang, dan harus mematuhi retry-after jika ada.

async function callWithRetry(fn, maxRetries = 4) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    try {
      return await fn();
    } catch (err) {
      const status = err.status;

      // Error klien selain 429 tidak akan berhasil jika dicoba ulang
      if (status && status >= 400 && status < 500 && status !== 429) {
        throw err;
      }

      // Berhenti setelah percobaan ulang maksimal terlepas dari jenis error
      if (attempt === maxRetries) throw err;

      // 429: patuhi retry-after jika ada, jika tidak lakukan backoff dengan jitter
      if (status === 429) {
        const retryAfter = parseRetryAfterHeader(err);
        const delay = retryAfter
          ? retryAfter * 1000
          : Math.pow(2, attempt) * 1000 + Math.random() * 1000;
        await sleep(delay);
        continue;
      }

      // 503 atau timeout jaringan: backoff dan coba ulang, catat untuk observabilitas
      if (status === 503 || err.code === 'ETIMEDOUT' || err.code === 'ECONNRESET') {
        await sleep(Math.pow(2, attempt) * 1000 + Math.random() * 1000);
        continue;
      }

      // 5xx tidak dikenal: coba ulang dengan backoff, batasi percobaan dengan ketat
      if (status && status >= 500) {
        await sleep(Math.pow(2, attempt) * 1000 + Math.random() * 1000);
        continue;
      }

      throw err;
    }
  }
}

Jangan pernah membungkus operasi non-idempotent, seperti tagihan pembayaran atau penulisan dengan efek samping, dalam loop percobaan ulang yang naif. Konfirmasikan idempotensi atau gunakan kunci idempotensi sebelum mencoba ulang panggilan tersebut.

Akurasi Estimasi Token: Mengapa Hitungan Lokal Berbeda dari Hitungan Penyedia

Pustaka penghitungan token sisi klien memperkirakan tokenizer yang sebenarnya digunakan oleh model tertentu. tiktoken sangat cocok dengan keluarga OpenAI tetapi tidak dijamin cocok dengan tokenizer Anthropic, Google, atau open-weight secara tepat. Perbedaan muncul di sekitar token khusus, karakter multi-byte, dan pemformatan prompt sistem, dan perbedaan tersebut terakumulasi dalam percakapan panjang.

Langkah praktis untuk mengurangi penyimpangan:

  • Baca penggunaan token aktual yang dikembalikan dalam badan respons (sebagian besar penyedia menyertakan jumlah token prompt dan penyelesaian) dan gunakan itu untuk mengkalibrasi estimator lokal Anda dari waktu ke waktu.
  • Simpan margin keamanan, bukan batas yang kaku. Jika batas TPM penyedia Anda mendekati estimasi penggunaan Anda, tunda atau bagi permintaan daripada mengirimkannya tepat di batas tersebut.
  • Jika prompt Anda besar atau berulang di seluruh panggilan, lihat cakupan TokenLab mengenai perilaku tokenisasi dan strategi pemisahan prompt untuk cara konkret memotong token per permintaan sebelum Anda mencapai batas sama sekali. Mengurangi token per panggilan sering kali merupakan solusi yang lebih murah daripada menegosiasikan tier yang lebih tinggi.

Traffic Shaping dan Model Fallback

Exponential backoff dengan jitter. Gandakan waktu tunggu setelah setiap percobaan ulang dan tambahkan jitter acak agar klien konkuren tidak mencoba ulang secara bersamaan.

Traffic shaping per pengguna atau tugas. Batasi panggilan konkuren per pengguna (misalnya, 3 konkuren, 5 permintaan per detik burst) agar satu pengguna berat tidak menghabiskan batas seluruh akun Anda dan menurunkan performa pengguna lain.

Estimasi anggaran token sebelum mengirim. Hitung token di sisi klien, dan jika permintaan akan mendorong Anda melebihi anggaran TPM yang dilacak, tunda atau bagi permintaan tersebut daripada mengirimkannya dan berharap berhasil.

Model fallback sebagai jaring pengaman. Ketika model utama mengembalikan 429, arahkan ke model alternatif dengan batasan terpisah dan kemampuan yang sebanding. Tugas pengodean dapat melakukan failover dari Claude Sonnet 5 ke DeepSeek V4 Pro atau Kimi K2.7 Code. Beban kerja bervolume tinggi dan berbiaya rendah dapat melakukan failover antara DeepSeek V4 Flash, Gemini 3.5 Flash, dan Qwen3.7 Plus, yang semuanya berada di tier perutean berbiaya rendah dari katalog model saat ini.

Daftar Periksa Penanganan Rate Limit

Kategori Apa yang harus diperiksa Tindakan segera Solusi jangka panjang
Batas permintaan Nilai header RPM, frekuensi burst Throttling permintaan klien, tambahkan rate limiter lokal Tier per pengguna, antrean sisi server
Batas token Anggaran TPM per model, rata-rata token per panggilan, penggunaan yang dilaporkan respons Pra-hitung token, bagi prompt besar, tunda panggilan di dekat batas Batching dengan penganggaran token, arahkan pekerjaan bervolume tinggi ke model berbiaya lebih rendah
Batas konkurensi Maksimal stream atau koneksi simultan Batasi permintaan konkuren per klien, tutup stream yang idle Connection pooling, peluncuran stream yang diatur
Kuota / saldo Saldo akun, batas pengeluaran harian Tambah kredit, sesuaikan ambang batas pengeluaran Peringatan saldo rendah, isi ulang otomatis prabayar

Rentang Batas Tipikal: Apa yang Bisa dan Tidak Bisa Kami Konfirmasi

Pencarian sekunder untuk topik ini sering kali menginginkan tabel angka RPM/TPM "tipikal". Kami tidak akan mengada-ada. Batas per-tier yang dipublikasikan sering berubah, bervariasi menurut riwayat akun dan tier penggunaan, dan bukan bagian dari bukti yang tersedia untuk artikel ini.

Pertanyaan Status Langkah verifikasi
Berapa batas RPM "tipikal" untuk model frontier? Tidak dikonfirmasi dalam set bukti ini Periksa dasbor akun penyedia Anda atau header respons rate-limit secara langsung
Berapa batas TPM "tipikal" untuk model konteks 1M? Tidak dikonfirmasi dalam set bukti ini Catat penggunaan aktual dari header respons selama seminggu lalu lintas untuk membangun baseline Anda sendiri
Apakah tier penggunaan mengubah angka-angka ini? Masuk akal berdasarkan perilaku penyedia umum, tidak di-benchmark di sini Konfirmasikan batas tier saat ini di konsol penyedia Anda
Apakah batas agregat TokenLab cocok dengan batas penyedia upstream secara tepat? Tidak dikonfirmasi dalam set bukti ini Verifikasi di dokumentasi API TokenLab sebelum perencanaan kapasitas

Batasan

  • Tidak ada angka RPM/TPM resmi yang tersedia untuk GPT-5.5, Claude Opus 4.8, Gemini 3.5 Flash, atau model lain yang dirujuk di sini. Setiap angka dalam tabel harga di atas adalah ukuran jendela konteks dan biaya per token, bukan rate limit.
  • Apakah gateway TokenLab menyatukan header rate-limit sepenuhnya di seluruh penyedia upstream, atau meneruskan beberapa header tanpa perubahan, tidak dikonfirmasi dalam set bukti ini. Anggap parsing header sebagai sesuatu yang spesifik untuk penyedia sampai Anda memverifikasi perilaku gateway saat ini di dokumentasi.
  • Nama model dalam artikel ini mencerminkan SSOT model TokenLab yang diamati 2026-07-07, kedaluwarsa 2026-07-14. Konfirmasikan ketersediaan saat ini di direktori model sebelum merilis kode yang melakukan hardcode string model.
  • Akurasi estimasi token dibandingkan dengan penghitungan sisi penyedia tidak di-benchmark dalam set bukti ini. Kalibrasi estimator Anda sendiri terhadap penggunaan yang dilaporkan respons daripada mempercayai offset tetap.

FAQ

Mengapa aplikasi saya mendapatkan error 429 meskipun jumlah permintaan di bawah batas? Periksa anggaran token-per-menit (TPM) terlebih dahulu. Satu prompt besar dapat menghabiskan jatah token sementara jumlah permintaan tetap rendah. Periksa juga konkurensi: koneksi streaming yang terbuka dapat memblokir permintaan baru bahkan ketika RPM dan TPM keduanya terlihat baik-baik saja.

Haruskah saya mencoba ulang segera ketika menerima 429? Tidak. Tunggu periode yang ditentukan dalam retry-after, atau gunakan exponential backoff dengan jitter jika header tersebut tidak ada. Percobaan ulang segera berisiko menyebabkan efek thundering-herd dan dapat memperpanjang jendela lockout Anda.

Bagaimana saya tahu jika jumlah token lokal saya akan cocok dengan apa yang sebenarnya ditagihkan oleh penyedia? Anda tidak bisa tahu secara pasti. Tokenizer sisi klien adalah perkiraan. Baca penggunaan token yang dikembalikan dalam setiap badan respons dan gunakan untuk mengkalibrasi estimator Anda dari waktu ke waktu, serta simpan margin keamanan daripada mengirim permintaan tepat di batas estimasi Anda.

Apakah TokenLab mengekspos satu set header rate-limit terpadu di setiap model? Tidak dikonfirmasi dalam bukti yang tersedia di sini. Penyedia upstream yang berbeda mengembalikan format header yang berbeda, dan seberapa banyak normalisasi yang diterapkan TokenLab adalah sesuatu yang harus diverifikasi dalam dokumentasi API saat ini daripada berasumsi.

Bagaimana saya bisa menghindari rate limit tanpa meningkatkan paket saya? Kombinasikan penganggaran token, batas konkurensi lokal, dan model fallback. Estimasi token sebelum mengirim, bagi prompt panjang, dan arahkan ke model alternatif, misalnya dari Claude Sonnet 5 ke DeepSeek V4 Pro, ketika batas utama Anda tercapai.

Memulai

Rate limit adalah fakta dalam membangun AI API, tetapi tidak harus menyebabkan pemadaman. Gateway TokenLab memberi Anda akses ke katalog model saat ini serta data harga dan throughput langsung sehingga Anda dapat merutekan di sekitar batasan alih-alih menebak-nebak. Jika Anda juga mengevaluasi trade-off agregator, perbandingan OpenRouter membahas perilaku fallback dan overhead operasional secara lebih mendalam. Dapatkan kunci API Anda di tokenlab.sh dan bangun logika percobaan ulang dan fallback sekali saja, bukan per penyedia.

Sumber

Harga diamati pada 2026-07-07

Bagikan:

Model publik terbaru

Bangun dengan model dalam panduan ini

Bandingkan harga, uji rute, dan ubah riset menjadi panggilan API yang berjalan.