Insufficient_quota dan credit_balance_exhausted OpenAI: mengapa mencoba kembali tidak akan membantu

OPENAI API kembali 429 dengan jenis insufficient_quota kesalahan ketika akun Anda kehabisan kredit atau melampaui batas pengeluaran atau penggunaan. Ini adalah kode status yang sama dengan rate limit, tetapi menunggu beberapa detik tidak akan memperbaikinya. Akses kembali tersedia hanya setelah seseorang menambahkan kredit, menaikkan batas, atau periode bulanan diatur ulang. OpenAI mengatakan bahwa mencoba kembali permintaan yang terkait dengan kesalahan penagihan, pengeluaran, atau kuota tidak akan memulihkan akses API, dan bahwa Anda harus memeriksa error.code untuk menemukan penyebab spesifiknya. Untuk informasi selengkapnya, lihat Kode kesalahan.

Seperti apa tampilan error kuota OpenAI

Masing-masing kesalahan ini mengembalikan 429. error.type masih bisa berupa insufficient_quota, jadi periksa error.code untuk mengetahui mana yang Anda punya.

error.code Apa artinya Bagaimana akses dipulihkan kembali
credit_balance_exhausted Organisasi Anda tidak memiliki kredit prabayar yang tersisa. Tambahkan kredit.
organization_spend_limit_exceeded Organisasi Anda mencapai batas pengeluaran bulanannya di semua proyek. Naikkan atau hapus batas, atau tunggu reset bulanan.
project_spend_limit_exceeded Proyek ini mencapai batas pengeluaran bulanannya. Proyek lain tetap berfungsi. Naikkan atau hapus batas proyek, atau tunggu reset bulanan.
organization_usage_limit_exceeded Organisasi Anda mencapai batas penggunaan bulanan yang ditetapkan OpenAI untuk organisasi Anda. Ini terpisah dari batas pengeluaran yang Anda tetapkan. Minta batas yang disetujui yang lebih tinggi, atau hubungi dukungan OpenAI.

Bandingkan ini dengan kesalahan "Batas laju tercapai", seperti rate_limit_exceeded dan slow_down. Itu bersifat sementara, dan biasanya akan berhasil jika Anda mencoba lagi setelah menunggu sebentar. Untuk informasi selengkapnya, lihat Kesalahan OpenAI 'Batas laju tercapai'.

Cara menangani kesalahan kuota OpenAI

  1. Baca error.code, tidak hanya statusnya. 429 sendiri tidak memberi tahu Anda apakah akan mencoba kembali. Perlakukan 4 kode dalam tabel sebagai "stop", dan kode batas laju permintaan sebagai "wait and retry".
  2. Berhenti mencoba lagi. Jangan mengirim permintaan lagi, dan jangan biarkan loop retry terus memanggil API. Hingga seseorang memperbaiki masalah penagihan, setiap permintaan gagal dengan cara yang sama.
  3. Jeda semua panggilan yang akan gagal. Satu kesalahan kuota berarti permintaan berikutnya dari organisasi atau proyek yang sama juga gagal. Lewati mereka alih-alih mengirim masing-masing dan menunggu munculnya error.
  4. Beri tahu pengguna. Jelaskan bahwa fitur AI tidak tersedia untuk saat ini, dan jaga agar aplikasi Anda tetap berfungsi.
  5. Peringatkan diri Anda sendiri. Catat kode tersebut dengan tingkat keparahan tinggi, atau hubungi penanggung jawab penagihan. Perbaikan berada di luar kode Anda, jadi pihak yang tepat perlu mengetahuinya.

OpenAI Python SDK mencoba ulang respons 429 2 kali secara default. Berapa pun kali dicoba ulang, kode Anda akhirnya mendapatkan RateLimitError dengan kode penagihan, dan di situlah Anda berhenti:

import logging

import openai
from openai import OpenAI

client = OpenAI()
logger = logging.getLogger(__name__)

BILLING_CODES = {
    "credit_balance_exhausted",
    "organization_spend_limit_exceeded",
    "project_spend_limit_exceeded",
    "organization_usage_limit_exceeded",
}
billing_error: str | None = None


def ask(prompt: str) -> str:
    global billing_error
    if billing_error:
        raise RuntimeError("AI features are paused until billing is fixed.")
    try:
        response = client.responses.create(model="gpt-4.1", input=prompt)
        return response.output_text
    except openai.RateLimitError as error:
        if error.code in BILLING_CODES:
            billing_error = error.code
            logger.critical("OpenAI billing error: %s", error.code)
        raise

Flag tetap aktif hingga aplikasi Anda dimulai ulang. Bersihkan dengan cara lain jika aplikasi Anda berjalan dalam waktu lama, misalnya dengan tindakan admin setelah seseorang memperbaiki masalah penagihan.

Cara menguji bahwa aplikasi Anda menangani kesalahan kuota OpenAI

Anda jarang melihat error kuota selama pengembangan. Akun pengujian Anda memiliki saldo, dan penggunaan Anda masih rendah. Jadi, cara Anda menguji penanganan kuota menentukan apakah Anda menemukan bug sebelum pengguna Anda menemukannya.

Approach Apa yang Anda temukan Yang Anda lewatkan
Tunggu proses produksi Kegagalan aktual Semuanya, sampai pengguna menekannya, dan fitur AI tetap down sampai seseorang melihat
Mock API dalam pengujian Anda, atau biarkan agen coding Anda menulis mock Apakah cabang stop Anda berjalan Isi dan kode kesalahan nyata OpenAI, dan kebijakan percobaan kembali SDK Anda. Aplikasi Anda juga memerlukan sakelar khusus pengujian untuk mengakses mock.
Gunakan kredit nyata Anda atau tetapkan batas pengeluaran kecil Perilaku sesungguhnya Ini berbayar, dan memblokir setiap aplikasi lain yang berbagi organisasi atau proyek
Mencegat lalu lintas nyata aplikasi Anda dan mengembalikan kesalahan kuota sesuai permintaan URL nyata, SDK nyata Anda dan kebijakan percobaan ulang, dan format kesalahan OpenAI sendiri Tidak ada perubahan dalam aplikasi Anda, sehingga aplikasi Anda tidak menguji kode Anda dalam isolasi. Gunakan pengujian unit Anda untuk itu saja.

Coba ini di aplikasi Anda

Dev Proxy mencegat permintaan aplikasi Anda ke api.openai.com dan mengembalikan kesalahan OpenAI, sementara aplikasi Anda terus memanggil URL nyata. preset openai-throttling mencampurkan error credit_balance_exhausted ke dalam error batas laju. Ini kembali 429 dengan jenis insufficient_quota dan tanpa Retry-After header, sehingga Anda dapat memeriksa apakah aplikasi Anda berhenti alih-alih mencoba kembali.

Unduh preset, dan mulai Dev Proxy dengannya:

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

Untuk menguji hanya kesalahan kuota, edit file prasetel openai-errors.json dan pertahankan hanya respons credit_balance_exhausted. Untuk menguji kode batas pengeluaran dan penggunaan, tambahkan respons dengan bentuk yang sama dan respons dengan code yang berbeda.

Kemudian jalankan aplikasi Anda seperti biasa dan tonton apa yang dilakukannya. Untuk menginstal Dev Proxy, lihat Menyiapkan Dev Proxy.

Langkah berikutnya

Baca juga