Beranda → Blog → Galat API transkripsi dan apa artinya sebenarnya
Galat API transkripsi dan apa artinya sebenarnya
Integrasi jarang rusak, dan selalu pada saat yang paling tidak tepat. Kabar baiknya: penyebab galat transkripsi hanya sedikit dan kebanyakan selesai dalam semenit. Berikut urutannya, sekaligus mana yang pantas diulang otomatis.
Tabel kode status
| Kode | Yang terjadi | Yang harus dilakukan |
|---|---|---|
| 401 | Kunci salah, dicabut, atau tidak terkirim | Periksa header Authorization dan kuncinya |
| 400 | Berkas kosong, rusak, atau bukan audio | Buka dengan pemutar, periksa kodeknya |
| 413 | Berkas melebihi batas ukuran | Kompres ke opus atau potong |
| 429 | Kena batas laju atau saldo habis | Perlambat, atau isi saldo |
| 502 | Mesin pengenalan sementara tidak tersedia | Ulangi setelah jeda |
Bentuk galatnya mengikuti pola yang biasa — objek error dengan message dan type — sehingga exception bertipe di SDK tetap bekerja.
401 biasanya soal header
Tiga penyebab umum, berurutan menurut frekuensi:
- Kunci membawa spasi atau baris baru, terutama saat disalin dari surel.
- Kata Bearer hilang: headernya harus Authorization: Bearer kunci_anda.
- Kunci lingkungan uji masuk ke produksi, atau sebaliknya.
Pemeriksaan tercepat adalah satu perintah curl — kalau lolos, masalahnya di kode, bukan di akses.
429 punya dua arti
Kode yang sama muncul saat Anda mengirim terlalu cepat dan saat menit berbayar habis. Teks pesannya membedakan keduanya. Kasus pertama diatasi antrean dan batas paralel, kedua dengan mengisi saldo.
Kebiasaan bagus: pantau sisa saldo di area klien dan siapkan pemberitahuan lebih awal, bukan menemukannya di log produksi.
Cara mengulang dengan benar
Yang layak diulang hanya kegagalan sementara: 429, 502, dan putusnya jaringan. 400, 401, dan 413 akan mengembalikan jawaban sama selamanya — itu harus diperbaiki, bukan digempur.
import time
from openai import OpenAI, APIStatusError, APIConnectionError
client = OpenAI(base_url="https://voicesscribe.com/v1", api_key="kunci Anda", max_retries=0)
def transcribe(path, tries=4):
delay = 2
for attempt in range(tries):
try:
with open(path, "rb") as f:
return client.audio.transcriptions.create(model="whisper-1", file=f).text
except APIStatusError as e:
if e.status_code not in (429, 500, 502, 503):
raise
except APIConnectionError:
pass
time.sleep(delay)
delay *= 2
raise RuntimeError("gagal mentranskrip " + str(path))
Menggandakan jeda lebih penting daripada jumlah percobaan: itu memberi layanan ruang pulih dan menjaga Anda tidak menabrak batas yang sama sedetik kemudian.
Coba dengan rekaman Anda sendiri. Pendaftaran memakan waktu satu menit, dan menit gratisnya cukup untuk menilai kualitasnya.
Ambil kunci API gratisPertanyaan yang sering diajukan
Apakah permintaan gagal tetap dihitung?
Tidak. Hanya permintaan yang berhasil diproses yang ditagih; galat tidak memakan menit.
Kenapa 400 muncul pada berkas yang bisa diputar?
Biasanya berkas yang diganti namanya: ekstensinya mp3 tapi isinya wadah lain. Periksa dengan ffprobe lalu enkode ulang bila perlu.
Bagaimana membedakan 429 batas laju dan saldo habis?
Dari pesan di badan jawaban. Sisa saldo dan riwayat pemotongan selalu terlihat di area klien.
Perlukah mengaktifkan coba ulang bawaan SDK?
Umumnya tidak. Logika sendiri lebih aman karena Anda yang menentukan kode mana diulang dan berapa lama menunggu.
Bacaan terkait
- Suara ke teks dengan Python: dari satu berkas ke skrip yang jalan — Transkripsi Python yang berjalan dalam sepuluh menit: pemasangan, permintaan pertama, format respons, penanganan galat, dan kesalahan yang paling banyak memakan waktu.
- Cara mentranskrip rekaman yang tidak muat satu permintaan — Menangani audio berjam-jam: kompresi, pemotongan di jeda, pemrosesan potongan secara paralel, dan penggabungan teks dengan stempel waktu berkelanjutan.
- Cara membangun pipeline transkripsi untuk arsip audio — Mentranskrip ribuan rekaman tanpa kehilangan satu pun: antrean kerja, konkurensi, percobaan ulang, melanjutkan setelah proses mati, dan menjaga tagihan tetap terkendali.