Seedream 5.5 is live on Atlas Cloud — native transparent PNG & 80+ round editing

API AI Generatif untuk Pengembang: Berhenti Merilis Kegagalan yang "Berhasil"

API AI generatif untuk developer memungkinkan aplikasi Anda mengirim input ke model dan menerima konten yang dihasilkan. Pilih salah satu berdasarkan kebutuhan input, format output, waktu tunggu, dan kriteria penerimaan Anda.

Permintaan Anda berhasil. Aplikasi masih tidak memiliki gambar yang dapat digunakan. Mungkin respons berisi ID tugas, atau gambar yang sudah jadi menyertakan objek tambahan yang membuatnya tidak cocok untuk halaman.

API AI generatif untuk developer memungkinkan aplikasi Anda mengirim input ke model dan menerima konten yang dihasilkan. Pilih salah satu berdasarkan input yang Anda perlukan, format output, waktu tunggu, dan kriteria penerimaan. Lalu bangun penanganan tugas dan pemeriksaan yang mengubah respons menjadi sesuatu yang dapat digunakan pengguna.

Panduan ini mengikuti alur kerja gambar dari pemilihan hingga pengiriman. Anda akan mendapatkan tabel pemilihan tugas, contoh JavaScript dan Python yang sesuai, 3 brief gambar konkret, dan lembar kerja biaya. Proses pengambilan keputusan yang sama berlaku untuk teks dan video, dengan protokol dan pemeriksaan output yang berbeda.

Poin-poin penting

  • Pilih tugas dan kriteria penerimaan sebelum model.
  • Simpan ID tugas asinkron agar pekerjaan yang terputus dapat dilanjutkan.
  • Ukur biaya per output yang diterima, termasuk generasi yang ditolak.
  • Uji file dan batasan bisnis sebelum menampilkan hasil akhir.

API AI Generatif untuk Developer: Apa Fungsinya

Model melakukan generasi. API mendefinisikan bagaimana perangkat lunak Anda meminta pekerjaan tersebut. SDK membungkus antarmuka dalam helper khusus bahasa. Platform hosting mengoperasikan akses ke model, sementara aplikasi Anda menyediakan pengalaman pengguna, izin, dan aturan untuk menerima hasil.

Perbedaan ini penting saat membaca halaman produk. Aplikasi chat yang membuat gambar tidak menjamin bahwa endpoint developernya menerima input yang sama. SDK dengan metode yang praktis tidak menghilangkan kebutuhan untuk memahami respons dasar dan status kegagalannya.

Mulailah dengan peta tugas berikut. Kolom interaksi menjelaskan desain aplikasi untuk dievaluasi, bukan janji bahwa setiap penyedia mendukung mode tersebut.

TugasInputKemampuan yang diperlukanOutputInteraksi untuk dievaluasiKriteria penerimaan
Draf balasan dukunganTiket dan konten bantuan yang disetujuiGenerasi teks berbasis sumberTeks drafSinkron atau streamingMenjawab tiket; tidak ada kebijakan yang dibuat-buat
Ekstraksi bidang dokumenTeks dokumen atau file yang didukungEkstraksi terstrukturBidang JSONPermintaan atau tugas antreanSkema valid dan bukti sumber
Ilustrasi editorialBrief visual tertulisTeks-ke-gambarFile gambarTugas asinkronObjek, tata letak, dimensi yang benar
Pengeditan gambarGambar sumber dan instruksiPengeditan terkondisi gambarGambar yang dieditTugas asinkronPerubahan yang diminta; detail yang dipertahankan
Generasi videoPrompt atau referensi yang didukungGenerasi videoFile videoTugas antreanDurasi, gerakan, audio yang benar jika diperlukan
Jawaban berbantuan pengambilanPertanyaan dan bagian yang diambilPengambilan plus generasiJawaban dan referensiSinkron atau streamingKlaim didukung oleh bagian yang diambil

Menghasilkan gambar, menganalisis gambar yang diunggah, dan mengedit gambar yang ada adalah kemampuan yang terpisah. Verifikasi masing-masing secara eksplisit. Demikian pula, endpoint video mungkin mendukung frame awal tanpa mendukung referensi multi-gambar arbitrer.

Embedding mengubah input menjadi vektor yang berguna untuk pengambilan dan kemiripan. Embedding dapat membantu menemukan dokumen relevan sebelum jawaban dihasilkan. Embedding sendiri tidak menghasilkan jawaban atau memastikan bahwa konten yang diambil mendukung klaimnya.

Batas praktisnya adalah input → permintaan → output → penerimaan aplikasi. Anda memiliki tahap akhir. Bidang faktur yang dihasilkan masih perlu validasi; gambar masih perlu inspeksi; respons dukungan masih perlu izin untuk membuat janji yang dikandungnya.

Pilihan protokol juga bervariasi. Referensi Google membedakan generasi standar, streaming, dan interaksi langsung. Anggap itu sebagai bukti bahwa mode interaksi berbeda, bukan mengasumsikan dukungan yang identik di tempat lain. (Referensi Google Gemini API, diakses September 2026.)

API AI Generatif untuk Developer: Cara Memilih

Tulis brief penerimaan kecil sebelum membandingkan katalog. Untuk fitur gambar editorial, itu mungkin menentukan output lanskap, jumlah objek terbatas, tanpa merek yang terlihat, dan langkah tinjauan manusia. Untuk klasifikasi tiket, itu mungkin menentukan kumpulan label tetap dan hasil tidak pasti yang eksplisit.

Evaluasi kandidat dalam urutan ini:

  1. Input dan output. Periksa endpoint model yang tepat untuk file yang didukung, batas input, format output, dan perilaku gambar referensi. Nama keluarga model terlalu luas untuk dijadikan kontrak.
  2. Kepatuhan tugas. Coba brief yang representatif, termasuk yang aneh. Hitung kegagalan batasan secara terpisah dari kegagalan file atau jaringan sehingga Anda tahu apa yang perlu diperbaiki.
  3. Kesesuaian integrasi. Konfirmasi autentikasi, envelope respons, nilai status tugas, dan dukungan pustaka klien. Sertakan pekerjaan yang diperlukan untuk mengadaptasi ini ke backend Anda yang ada.
  4. Waktu tunggu dan konkurensi. Putuskan apakah pengguna dapat pergi dan kembali. Uji beban kerja yang diharapkan sebelum berkomitmen pada pengalaman interaktif dengan tenggat waktu singkat.
  5. Kejelasan penagihan. Identifikasi unit yang dapat ditagih dan pengaturan mana yang mengubahnya. Periksa penanganan kegagalan dan pengembalian dana alih-alih mengasumsikan setiap permintaan yang dikirim menerima biaya yang sama.
  6. Persyaratan data. Tinjau penanganan input, penyimpanan, penghapusan, dan ketentuan yang berlaku terhadap data sebenarnya yang ingin Anda kirim. Dokumentasikan pertanyaan yang belum terselesaikan sebelum menggunakan materi sensitif.
  7. Manajemen perubahan. Simpan set regresi dan catat pengenal model, prompt, dan parameter. Rencanakan bagaimana Anda akan menilai kembali perilaku setelah pembaruan atau penggantian.

Panduan institusional menggambarkan mengapa aturan akses dan data termasuk dalam keputusan ini: Harvard menjelaskan rute akses yang disetujui dan pembatasan seputar alat developer AI-nya. Itu adalah pengaturan Harvard, bukan izin universal untuk aplikasi Anda. (Harvard University Information Technology, diakses September 2026.)

Rute aksesTim yang cocokPekerjaan integrasiTanggung jawab operasionalBatasan utamaVerifikasi sebelum memilih
Penyedia model langsungTim yang berfokus pada kemampuan satu penyediaAPI, akun, adaptor khusus penyediaAplikasi dan tugas Anda; inferensi penyediaPenyedia tambahan menambah kontrak terpisahFitur endpoint, wilayah, kuota, ketentuan
Platform hosting multi-modelTim yang mengevaluasi beberapa model yang didukungAkses bersama plus validasi khusus modelAplikasi dan tugas Anda; inferensi yang dihosting platformAkses bersama tidak menstandarkan setiap parameterModel yang tepat, skema, penagihan, jalur data
Model terbuka yang dihosting sendiriTim dengan keterampilan infrastruktur dan penyajian modelTerapkan, ekspos, amankan, dan pelihara inferensiPerangkat keras, penyajian, penskalaan, pemantauan, pembaruanKapasitas dan overhead rekayasaLisensi, kesesuaian perangkat keras, throughput, pemeliharaan

Atlas Cloud adalah salah satu opsi hosting untuk dievaluasi ketika beberapa kemampuan model berada dalam aplikasi yang sama. Artikel ini menggunakan antarmuka tugas gambar sebagai contoh konkret. Anda tetap perlu memvalidasi input dan output setiap model; mengubah ID model saja tidak cukup.

image.png

Dokumentasi endpoint gambar resmi yang menunjukkan format output, kualitas, dan batasan ukuran

Parameter khusus model adalah bagian dari kontrak integrasi. Baca nilai yang diizinkan sebelum menggunakan kembali body permintaan.

Untuk tim SaaS kecil, perbandingan yang berguna adalah total upaya untuk mengirimkan satu hasil yang diterima. Sertakan kode adaptor, investigasi dukungan, waktu tinjauan, dan tes migrasi bersama biaya inferensi. Itu mencegah prototipe yang praktis menyembunyikan alur kerja produksi yang mahal.

API AI Generatif untuk Developer: Permintaan Pertama

Contoh ini menggunakan GPT Image 2 Text-to-Image, dengan ID model openai/gpt-image-2/text-to-image. Dokumentasi endpointnya mencantumkan quality: high, size: 2048x1152, dan output_format: png. Ini adalah pengaturan yang diminta untuk contoh di bawah.

1. Tetapkan prompt di playground. Gunakan brief sarapan di bawah tanpa menambahkan gambar referensi. Periksa nama model dan pengaturan yang diterapkan sebelum menekan Run. Pilihan yang kembali saat Anda meninggalkan bidang bukan pengaturan yang Anda minta.

plaintext
1Create a realistic editorial food photograph for an article about a simple breakfast.
2
3On a light oak table, show exactly one white ceramic plate holding exactly two slices of toasted sourdough bread, one small clear glass bowl of strawberry jam, and one stainless steel butter knife resting to the right of the plate.
4
5Use soft morning window light from the left, natural colors, a three-quarter overhead camera angle, and realistic bread texture. Keep every requested object fully inside the frame.
6
7No people, no hands, no drinks, no extra dishes, no packaging, no logos, no text, and no watermark. Landscape composition, 16:9.

2. Simpan autentikasi di server. Frontend Anda harus meminta backend Anda sendiri untuk memulai tugas. Simpan ATLAS_API_KEY di lingkungan server. Jangan pernah memasukkannya ke dalam JavaScript browser, URL gambar, atau log yang terlihat oleh klien. Setel ATLAS_API_HOST ke api.atlascloud.ai; ini adalah nama host, tanpa skema atau jalur.

3. Kirim sekali dan simpan ID. Rute generasi yang didokumentasikan adalah POST /api/v1/model/generateImage. Baca data.id, lalu simpan terhadap tugas aplikasi Anda. Jika respons pengiriman hilang, selidiki sebelum membuat tugas lain yang berpotensi dapat ditagih.

4. Polling tugas yang disimpan. Kueri GET /api/v1/model/prediction/{prediction_id}. Dokumentasi prediksi menjelaskan processing, completed, dan failed, dengan URL output di data.outputs. Status selesai tetap harus diperiksa untuk array output yang tidak kosong.

5. Unduh dan validasi. Simpan file di bawah kendali Anda, verifikasi bahwa file dapat didekode, dan periksa terhadap brief. Hanya setelah itu kembalikan hasil yang diterima ke aplikasi. Kesalahan unduhan atau validasi harus tetap terlampir pada tugas yang ada.

Kode berikut disusun dari dokumentasi antarmuka resmi. Ini tidak disajikan sebagai tolok ukur API langsung. Alur kerja media artikel ini menggunakan playground uji browser, bukan kunci API.

Simpan prompt sarapan yang tepat sebagai prompt.txt. Untuk Node.js, gunakan lingkungan dengan fetch bawaan, instal sharp, dan simpan ini sebagai generate.mjs. Jalankan di direktori kerja khusus. Jalankan hanya satu dari dua contoh bahasa kecuali Anda sengaja ingin dua tugas.

javascript
1import { readFile, writeFile, mkdir } from 'node:fs/promises';
2import sharp from 'sharp';
3
4const key = process.env.ATLAS_API_KEY;
5const host = process.env.ATLAS_API_HOST;
6if (!key || host !== 'api.atlascloud.ai') {
7  throw new Error('Set ATLAS_API_KEY and ATLAS_API_HOST');
8}
9const base = 'https:' + '//' + host;
10const headers = { Authorization: `Bearer ${key}` };
11const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
12const payload = {
13  model: 'openai/gpt-image-2/text-to-image',
14  prompt: await readFile('prompt.txt', 'utf8'),
15  quality: 'high', size: '2048x1152', output_format: 'png'
16};
17await mkdir('output', { recursive: true });
18await writeFile('output/request.json', JSON.stringify(payload, null, 2));
19
20async function api(path, method = 'GET', body) {
21  const response = await fetch(base + path, {
22    method,
23    headers: { ...headers, 'Content-Type': 'application/json' },
24    body: body ? JSON.stringify(body) : undefined,
25    signal: AbortSignal.timeout(30000)
26  });
27  const requestId = response.headers.get('x-request-id');
28  console.error(JSON.stringify({ method, status: response.status, requestId }));
29  if (!response.ok) {
30    const error = new Error(`HTTP ${response.status}; request ${requestId}`);
31    error.retryable = [429, 500, 503, 504].includes(response.status);
32    throw error;
33  }
34  const json = await response.json();
35  if (!json.data) throw new Error('Missing response data');
36  return json.data;
37}
38
39let id = process.env.PREDICTION_ID;
40try {
41  if (!id) {
42    // Deliberately no automatic retry for submission.
43    const submitted = await api('/api/v1/model/generateImage', 'POST', payload);
44    id = submitted.id;
45    if (typeof id !== 'string' || !id) throw new Error('Missing prediction ID');
46    await writeFile('output/prediction-id.txt', id);
47  }
48  const deadline = Date.now() + 600000;
49  let errors = 0;
50  let outputUrl;
51  while (Date.now() < deadline) {
52    let job;
53    try {
54      job = await api('/api/v1/model/prediction/' + encodeURIComponent(id));
55      errors = 0;
56    } catch (error) {
57      const transient = error.retryable ||
58        ['TimeoutError', 'AbortError'].includes(error.name) ||
59        error instanceof TypeError;
60      if (!transient || ++errors > 3) throw error;
61      await sleep(Math.min(30000, 1000 * 2 ** errors) + Math.random() * 500);
62      continue;
63    }
64    if (job.status === 'failed') {
65      throw new Error(`Task failed; code ${job.error_code ?? 'unknown'}`);
66    }
67    if (job.status === 'completed') {
68      outputUrl = job.outputs?.[0];
69      if (typeof outputUrl !== 'string' || !outputUrl) {
70        throw new Error('Completed task has no output');
71      }
72      break;
73    }
74    if (job.status !== 'processing') throw new Error('Unexpected task status');
75    await sleep(2000);
76  }
77  if (!outputUrl) throw new Error('Polling deadline reached; resume this ID');
78  const url = new URL(outputUrl);
79  if (url.protocol !== 'https:') throw new Error('Unexpected output protocol');
80  // Do not forward the API credential to the media host.
81  const file = await fetch(url, { signal: AbortSignal.timeout(60000) });
82  if (!file.ok) throw new Error(`Download HTTP ${file.status}`);
83  const bytes = Buffer.from(await file.arrayBuffer());
84  await sharp(bytes, { limitInputPixels: 20000000 }).raw().toBuffer();
85  const meta = await sharp(bytes).metadata();
86  if (meta.format !== 'png' || meta.width !== 2048 || meta.height !== 1152) {
87    throw new Error('File format or dimensions differ from the request');
88  }
89  await writeFile('output/breakfast.png', bytes);
90  console.log(JSON.stringify({ id, state: 'ready_for_review',
91    file: 'output/breakfast.png' }));
92} catch (error) {
93  console.error(JSON.stringify({ id: id ?? null, state: 'needs_attention',
94    error: error.message }));
95  process.exitCode = 1;
96}

Python yang lebih pendek menggunakan requests dan Pillow, prompt.txt yang sama, dan pengaturan identik. Ini juga menerima PREDICTION_ID untuk melanjutkan. Skrip ini mendemonstrasikan satu tugas lokal; layanan yang diterapkan memerlukan catatan tugas yang persisten dan unduhan yang terbatas.

python
1import io, json, os, random, time
2from pathlib import Path
3from urllib.parse import quote, urlparse
4import requests
5from PIL import Image
6
7key = os.environ['ATLAS_API_KEY']
8assert os.environ['ATLAS_API_HOST'] == 'api.atlascloud.ai'
9base = 'https:' + '//' + os.environ['ATLAS_API_HOST']
10headers = {'Authorization': 'Bearer ' + key}
11out = Path('output')
12out.mkdir(exist_ok=True)
13payload = dict(model='openai/gpt-image-2/text-to-image',
14               prompt=Path('prompt.txt').read_text(encoding='utf-8'),
15               quality='high', size='2048x1152', output_format='png')
16job_id = os.getenv('PREDICTION_ID')
17try:
18    if not job_id:
19        # A submission timeout needs investigation, not a blind retry.
20        r = requests.post(base + '/api/v1/model/generateImage',
21                          headers=headers, json=payload, timeout=30)
22        r.raise_for_status()
23        job_id = r.json()['data']['id']
24        if not isinstance(job_id, str) or not job_id:
25            raise ValueError('Missing prediction ID')
26        (out / 'prediction-id.txt').write_text(job_id)
27    deadline, errors, url = time.monotonic() + 600, 0, None
28    while time.monotonic() < deadline:
29        try:
30            r = requests.get(base + '/api/v1/model/prediction/' +
31                             quote(job_id, safe=''), headers=headers, timeout=30)
32            r.raise_for_status()
33        except requests.RequestException as exc:
34            status = exc.response.status_code if exc.response is not None else None
35            if status not in (None, 429, 500, 503, 504) or errors >= 3:
36                raise
37            errors += 1
38            time.sleep(min(30, 2 ** errors) + random.random() / 2)
39            continue
40        errors = 0
41        job = r.json()['data']
42        if job['status'] == 'failed':
43            raise RuntimeError('Task failed: ' + str(job.get('error_code')))
44        if job['status'] == 'completed':
45            outputs = job.get('outputs') or []
46            if not outputs or not isinstance(outputs[0], str) or not outputs[0]:
47                raise ValueError('Completed task has no output')
48            url = outputs[0]
49            break
50        if job['status'] != 'processing':
51            raise ValueError('Unexpected task status')
52        time.sleep(2)
53    if not url:
54        raise TimeoutError('Polling deadline reached; resume this ID')
55    if urlparse(url).scheme != 'https':
56        raise ValueError('Unexpected output protocol')
57    r = requests.get(url, timeout=60)  # No Authorization header here.
58    r.raise_for_status()
59    with Image.open(io.BytesIO(r.content)) as image:
60        image.load()
61        if image.format != 'PNG' or image.size != (2048, 1152):
62            raise ValueError('Unexpected file format or dimensions')
63    (out / 'breakfast.png').write_bytes(r.content)
64    print(json.dumps(dict(id=job_id, state='ready_for_review')))
65except Exception as exc:
66    print(json.dumps(dict(id=job_id, state='needs_attention', error=str(exc))))
67    raise SystemExit(1)

image.png

Playground GPT Image 2 yang selesai menunjukkan prompt sarapan yang dikirim dan output akhir

Jalannya playground yang selesai mencatat prompt yang dikirim, ukuran output, pengaturan kualitas, dan hasil yang dihasilkan secara bersamaan.

Tenggat polling menghentikan klien ini dari menunggu; itu tidak membatalkan pekerjaan sisi server. Permintaan yang sudah dalam proses dapat selesai setelah jendela polling, jadi ini bukan jaminan latensi end-to-end yang ketat. Pertahankan ID dan izinkan worker untuk memeriksanya nanti.

API AI Generatif untuk Developer: Penggunaan Praktis

3 brief di bawah menguji persyaratan yang berbeda. Itu adalah permintaan independen, bukan rantai di mana satu hasil menjadi input berikutnya. Pertahankan model dan pengaturan yang sama yang diminta agar perbedaan dalam brief tetap mudah dipahami.

A. Gambar editorial makanan: jumlah dan penempatan. Prompt sarapan menguji apakah output berisi 2 potong roti panggang, 1 piring, 1 mangkuk selai, dan 1 pisau. Pisau harus berada di sebelah kanan piring, dan semua objek yang diperlukan harus tetap berada di dalam bingkai.

image.png

Contoh pembuatan gambar sarapan dipasangkan dengan pemeriksaan jumlah objek dan penempatan pisau checksThe hasil yang dihasilkan berisi piring, roti panggang, mangkuk selai, dan pisau sisi kanan yang diminta, siap untuk tinjauan penempatan di bawah.

Periksa irisan yang tumpang tindih satu per satu. Sarapan yang secara visual meyakinkan tetap bisa gagal jika cangkir muncul di latar belakang atau pisau bergeser ke piring. Jika hasil gagal, revisi instruksi spasial yang ambigu, ubah satu variabel, dan pertahankan alasan penolakan. Hindari berulang kali meminta gambar yang secara umum lebih baik.

B. Sampul artikel: ruang headline yang dapat digunakan. Permintaan ini memperlakukan komposisi sebagai dependensi tata letak. Editor halaman membutuhkan ruang kosong di sebelah kiri, sementara sisi kanan membawa alat dan pot. Tambahkan judul sebenarnya nanti menggunakan HTML/CSS agar tetap dapat diedit dan dibaca.

plaintext
1Create a realistic editorial photograph for an article about repairing everyday objects.
2
3On the right half of a light wooden workbench, show one pair of worn gardening gloves, one small metal hand trowel, and one unbranded terracotta plant pot. The left 45 percent of the image must remain an empty, softly lit section of the same workbench, suitable for adding a headline later.
4
5Use natural side light from a nearby window, believable material textures, neutral colors, and a slightly elevated camera angle.
6
7No people, no hands, no extra tools, no plants, no logos, no letters, no text, and no watermark. Landscape composition, 16:9.

image.png

Contoh sampul meja kerja yang menunjukkan ruang headline sisi kiri yang diminta dan objek sisi kanan

Hasilnya mempertahankan ruang kosong yang dapat digunakan di sebelah kiri sambil menjaga sarung tangan, pot, dan sekop di sebelah kanan.

Periksa hasil pada potongan penerbitan yang dimaksud. Master lanskap dapat kehilangan wilayah kosong yang berguna saat kartu seluler memotong secara terpusat. Jika komposisi gagal, tentukan batas objek yang lebih ketat atau ubah potongan aplikasi. Jangan sembunyikan kegagalan dengan menempatkan teks di atas subjek yang diminta.

C. Ilustrasi kain: detail dan urutan. Permintaan berikutnya meminta 3 sampel kain terlipat dengan tekstur yang dapat dibedakan secara visual. Ini menguji jumlah, posisi, dan apakah hasilnya mendukung ilustrasi penjelasan pada ukuran yang akan dilihat pembaca.

plaintext
1Create a realistic close-up editorial photograph for an article explaining common fabric textures.
2
3Show exactly three folded fabric swatches arranged side by side on a neutral matte gray surface: natural beige linen on the left, blue cotton denim in the center, and dark green wool on the right.
4
5Use the same soft daylight across all three fabrics, an overhead camera angle, and sufficient depth of field to keep the visible weave of each fabric in focus. Preserve natural wrinkles and believable fiber detail.
6
7No labels, no rulers, no sewing tools, no hands, no additional objects, no text, no logos, and no watermark. Landscape composition, 16:9.

image.png

Ilustrasi kain yang dihasilkan AI dengan pemeriksaan penempatan sampel kain beige, biru, dan hijau tua

Tiga sampel kain yang diminta terlihat berbeda secara visual. Tekstur yang dihasilkan ini adalah ilustrasi, bukan bukti komposisi serat produk nyata.

Jika sampel kain tengah tidak memiliki tenunan yang dapat dibaca, catat masalah itu dan sesuaikan pembingkaian atau instruksi detail. Jangan pernah menggambarkan tekstur yang dihasilkan sebagai properti terukur dari produk nyata.

Fitur teks memerlukan pemeriksaan yang sama-sama ketat. Untuk klasifikasi tiket, tolak label di luar kumpulan yang diizinkan dan pertahankan rute yang tidak pasti. Untuk ekstraksi dokumen, syaratkan bidang dan rentang sumber bersama JSON yang dapat diurai. Respons yang valid secara sintaksis tetap dapat menempatkan jumlah yang salah di bidang yang salah.

API AI Generatif untuk Developer: Menangani Kegagalan

Lacak keberhasilan transportasi, penyelesaian tugas, dan penerimaan bisnis secara terpisah. Respons HTTP yang berhasil dapat berisi tugas yang sedang diproses. Tugas yang selesai dapat menghasilkan unduhan yang rusak. Gambar yang dapat dibaca dapat melanggar brief. Masing-masing memerlukan tindakan pemulihan yang berbeda.

Setel 3 waktu dengan sengaja: timeout HTTP individual, interval polling, dan jendela tunggu keseluruhan. Contohnya menggunakan timeout permintaan API 30 detik, polling 2 detik, dan jendela polling 10 menit. Ini adalah pilihan aplikasi, bukan kinerja layanan yang diiklankan.

GejalaKemungkinan penyebabPeriksa selanjutnyaPendekatan coba lagi
Kesalahan parameterBidang atau nilai tidak didukungSkema endpoint yang tepat dan payload yang dikirimPerbaiki permintaan terlebih dahulu
HTTP 401Masalah autentikasi atau rute salahKonfigurasi kunci dan jalur endpointTidak ada percobaan ulang tanpa perubahan
Saldo tidak mencukupiSaldo atau jatah yang tersediaStatus penagihan akunSelesaikan pendanaan atau jatah terlebih dahulu
HTTP 429Batas laju tercapaiKonkurensi akun/model dan laju permintaanBackoff terbatas dengan jitter
Tugas melaporkan gagalKegagalan model, input, atau kebijakanID prediksi, kode kesalahan, detail kesalahanSelidiki sebelum generasi baru
Timeout pollingTenggat klien atau tugas lambatStatus tugas yang adaLanjutkan kueri ID yang sama
Selesai dengan output kosongHasil hilang atau tidak terdugaRespons tugas terstruktur lengkapTandai untuk investigasi; jangan kirim ulang secara buta

Dokumentasi kesalahan platform saat ini menyatakan bahwa endpoint LLM dan media tidak menyediakan header Retry-After atau sisa batas laju. Gunakan kebijakan penundaan sisi klien; jangan membuat pemulihan bergantung pada header yang tidak dikembalikan oleh rute ini. Keluarga API lain dapat berperilaku berbeda.

Batasi percobaan ulang baca otomatis. Penundaan eksponensial ditambah sedikit jitter acak membantu mencegah banyak worker mencoba lagi bersamaan. Kurangi konkurensi jika throttling berlanjut. Kegagalan berulang harus menjadi insiden yang dapat diamati daripada loop tak berujung yang tersembunyi di balik spinner.

Percobaan ulang pengiriman memerlukan penanganan yang lebih ketat. Saat koneksi ditutup setelah Anda mengirim body, Anda mungkin tidak tahu apakah server membuat tugas. Catat niat lokal sebelum pengiriman dan selidiki riwayat permintaan atau jejak dukungan saat tidak ada ID prediksi yang diterima. Jangan mengarang header idempotensi kecuali endpoint mendokumentasikannya.

Setelah Anda memiliki ID, gunakan untuk melanjutkan. Kegagalan unduhan harus memicu upaya unduhan lain atau pemeriksaan status, bukan permintaan pembuatan gambar lain. Contoh-contohnya sengaja mempertahankan perilaku percobaan ulang otomatis pada pembacaan polling dan berhenti pada pengiriman yang gagal.

Untuk setiap tugas, simpan ID tugas aplikasi Anda, ID prediksi, ID permintaan, model, pengaturan, stempel waktu, dan disposisi akhir. Simpan prompt hanya di bawah kebijakan data yang sesuai. Jangan pernah memasukkan header otorisasi atau konten pengguna sensitif ke dalam log kesalahan umum.

Berikan status frontend yang dapat dijelaskan: bersiap, memproses, memeriksa output, siap, atau perlu perhatian. Tampilkan tugas yang dapat dipulihkan saat seseorang memuat ulang halaman. Nonaktifkan pengiriman berulang saat tugas lokal yang sama masih tertunda, sambil tetap mengizinkan permintaan baru yang disengaja bila sesuai.

API AI Generatif untuk Developer: Biaya Nyata

Harga permintaan yang rendah tidak memberi tahu Anda biaya fitur yang dapat digunakan. Anggaran Anda memerlukan jumlah yang ditagih, jumlah output yang diterima, dan pekerjaan pendukung yang diperlukan untuk mengirimkannya.

API teks biasanya membedakan token input dan output. Konteks panjang, bagian yang diambil, riwayat percakapan, dan respons berulang semuanya dapat berkontribusi pada penggunaan. Catat kategori yang sebenarnya ditagih oleh endpoint yang dipilih alih-alih menerapkan perkiraan token tunggal ke setiap beban kerja.

Untuk gambar, periksa unit penagihan dan konfigurasi model yang tepat. Ukuran dan kualitas dapat memengaruhi penagihan secara berbeda di seluruh model. Untuk video, durasi, resolusi, dan pilihan model dapat mengubah biaya. Jangan mengubah harga awal katalog menjadi kutipan untuk konfigurasi tertentu.

Harga tepat kualitas tinggi, 2048 × 1152 untuk model gambar yang dipilih tidak diverifikasi di kedua katalog dan halaman detail selama riset artikel ini. Tidak ada harga satuan atau diskon saat ini yang dinyatakan di sini. Konfirmasi sebelum menjalankan evaluasi produksi berbayar.

Gunakan 2 perhitungan terkait:

plaintext
1API cost per accepted output = actual API charges / accepted outputs
2
3Full feature cost per accepted output =
4(API charges + attributable review + storage + transfer + processing costs)
5/ accepted outputs

Jaga periode pengamatan tetap konsisten. Untuk penyimpanan berkelanjutan, nyatakan apakah perhitungan mencakup bulan pertama, periode retensi yang ditentukan, atau biaya berulang yang dialokasikan. Hindari membandingkan angka inferensi saja dari satu model dengan biaya penuh dari alur kerja lain.

Contoh hipotetis: Anda mengirim 100 permintaan dan menerima 80 output. Bagi total biaya sebenarnya untuk batch tersebut dengan 80. Jika semua 100 permintaan dikenai jumlah yang sama c, biaya API per output yang diterima adalah 1.25c. Kondisi itu penting: ini tidak mengasumsikan bahwa setiap permintaan yang gagal ditagih.

ModelPengaturanPengirimanBiaya sebenarnyaOutput yang diterimaBiaya API per output yang diterimaTanggal pengukuran
GPT Image 2 Text-to-Imagehigh; 2048x1152; PNGUntuk dicatatUntuk dicatatUntuk dicatatUntuk dihitungUntuk dicatat
Model yang sama, batch evaluasi berikutnyaCatat pengaturan yang tepatUntuk dicatatUntuk dicatatUntuk dicatatUntuk dihitungUntuk dicatat

Gunakan ini sebagai lembar kerja, bukan tabel hasil. Demonstrasi gambar tidak menetapkan tingkat penerimaan atau biaya produksi yang representatif. Pisahkan kutipan playground dari catatan penagihan yang sudah pasti, terutama saat mengevaluasi di lingkungan pengujian.

Ketika output yang diterima sama dengan nol, laporkan batch sebagai tidak berhasil dan tunjukkan total pengeluaran. Rasio biaya per output yang diterima tidak terdefinisi dalam kasus itu. Menyembunyikan batch yang gagal akan membuat anggaran Anda terlihat lebih baik daripada perilaku aplikasi.

Kurangi pemborosan terlebih dahulu: validasi input sebelum pengiriman, simpan ID tugas, cegah duplikat yang tidak disengaja, dan gunakan kembali aset yang diterima bila produk mengizinkan. Kemudian bandingkan pengaturan yang lebih murah pada brief dan pemeriksaan yang sama. Pengaturan yang mengurangi kutipan tetapi menggandakan pekerjaan penolakan dapat meningkatkan biaya fitur.

Uji Output, Bukan Hanya Respons

Tulis kriteria penerimaan saat menyusun prompt. Ini mencegah gambar yang meyakinkan mengubah definisi keberhasilan Anda setelah fakta. Pisahkan persyaratan keras dari preferensi opsional, dan catat mengapa peninjau menolak hasil.

Otomatiskan pemeriksaan yang memiliki jawaban mekanis yang jelas: keberhasilan unduhan, dekode file, format, dimensi, dan batas ukuran file. Untuk JSON, validasi skema, bidang yang diperlukan, label yang diizinkan, dan tipe. Bidang yang diperlukan yang hilang tidak boleh diam-diam menjadi default yang dibuat-buat.

Gunakan tinjauan manusia untuk persyaratan yang memerlukan interpretasi. Dalam contoh sarapan, peninjau harus membedakan irisan yang tumpang tindih, mengidentifikasi pisau, menilai posisinya, dan mencari objek tambahan. Pemeriksa visi otomatis dapat membantu, tetapi evaluasi kesalahannya sebelum membiarkannya menyetujui hasil sendiri.

Tinjauan sarapan harus mencakup pemeriksaan independen berikut:

  • Tepat 2 potong roti panggang, 1 piring putih, 1 mangkuk selai bening, dan 1 pisau.
  • Pisau di sebelah kanan piring; objek yang diperlukan sepenuhnya dalam bingkai.
  • Tidak ada cangkir, piring, tangan, kemasan, atau merek yang terlihat tambahan.
  • PNG yang dapat dibaca pada dimensi yang diminta.

image.png

Catatan validasi yang memisahkan pemeriksaan metadata file dari pemeriksaan penerimaan visual

Catatan melaporkan dimensi dan ukuran file yang dihasilkan secara terpisah dari pemeriksaan penerimaan visualnya.

Bangun set regresi tetap dari fitur sebenarnya: permintaan biasa, komposisi padat, instruksi yang bertentangan, potongan yang sulit, dan batas input yang relevan. Beri versi pada brief dan aturan peninjau. Ulangi saat mengubah model, template prompt, atau pengaturan output.

Laporkan keberhasilan teknis dan tingkat output yang diterima secara terpisah. File yang dapat dibaca yang berisi objek tambahan dihitung sebagai pengiriman yang berhasil dan penolakan konten. Menggabungkan hasil tersebut menjadi satu angka keberhasilan menyembunyikan perbaikan yang dibutuhkan tim Anda.

Survei developer 2025 menemukan 46% tidak mempercayai akurasi alat AI dan 33% mempercayainya; 3% melaporkan kepercayaan tinggi. Respons ini menyangkut alat AI dalam alur kerja pengembangan, bukan tingkat kegagalan terukur untuk API generasi. (Stack Overflow Developer Survey, 2025.)

Demikian pula, 3 eksekusi ilustratif tidak dapat menetapkan akurasi keseluruhan atau latensi p95 yang berguna. Kumpulkan sampel yang lebih besar dan relevan di seluruh kondisi yang Anda harapkan dalam produksi, dan pertahankan outlier. Gunakan demonstrasi untuk mengembangkan pemeriksaan, lalu gunakan evaluasi sistematis untuk membuat keputusan rilis.

Daftar Periksa Produksi Sebelum Anda Merilis

Permintaan pertama yang berhasil hanya menyelesaikan sebagian kecil dari keputusan rilis. Aplikasi Anda juga harus menahan pengeluaran, memulihkan pekerjaan yang belum selesai, dan menjelaskan apa yang terjadi ketika tidak ada hasil yang tersedia.

Lindungi akses. Simpan kredensial di backend, pisahkan lingkungan, batasi akses ke catatan tugas, dan rencanakan rotasi kredensial. Otorisasi setiap permintaan status dan unduhan terhadap pengguna yang memiliki tugas itu. ID tugas yang tidak dapat ditebak bukan pengganti pemeriksaan izin.

Batasi input dan penggunaan sumber daya. Validasi panjang prompt, jenis dan ukuran unggahan, pengaturan output yang diminta, dan kombinasi yang didukung. Untuk media yang diunduh, terapkan tujuan yang diizinkan, pengalihan, batas byte, dan batas dekode. Skrip ringkas di atas mengilustrasikan siklus hidup; itu bukan layanan unduhan publik yang diperkuat.

Setel anggaran sebelum pengiriman. Tentukan batas per pengguna dan per tugas, tugas bersamaan maksimum, dan siapa yang dapat meminta pengaturan yang lebih mahal. Cadangkan anggaran saat pekerjaan tertunda sehingga permintaan simultan tidak semuanya lolos pemeriksaan saldo tersisa yang sama.

Simpan status. Tulis tugas lokal sebelum memanggil penyedia. Simpan ID prediksi yang dikembalikan segera dan buat polling dapat dilanjutkan setelah proses dimulai ulang. Jika status pengiriman tidak diketahui, gunakan status investigasi alih-alih memberi tahu pengguna bahwa tugas pasti gagal.

Miliki aset yang dikirim. Putuskan di mana file yang diterima disimpan, siapa yang dapat mengaksesnya, dan kapan kedaluwarsa. Verifikasi masa pakai tautan penyedia dan ketentuan retensi daripada bergantung pada URL output sementara tanpa batas. Sertakan penghapusan file turunan dalam alur data aplikasi.

Buat kegagalan dapat dipahami. Bedakan tugas yang tertunda, hasil yang ditolak, dan kesalahan layanan. Tawarkan rute yang jelas untuk mencoba lagi dengan sengaja atau meminta tinjauan. Pertahankan brief pengguna sehingga pemulihan tidak memerlukan rekonstruksi pekerjaan.

Pantau perubahan. Lacak penyelesaian, penerimaan, biaya, dan waktu tunggu secara terpisah. Jalankan ulang set regresi setelah perubahan model atau parameter, dan pertahankan konfigurasi sebelumnya bila memungkinkan. Redaksi log sensitif dan tetapkan periode retensi untuk konten dan catatan operasional.

Untuk mengevaluasi platform contoh untuk aplikasi Anda sendiri, mulailah dengan katalog model Atlas Cloud, lalu baca dokumentasi endpoint dan prediksi yang dipilih. Pilih satu tugas, tentukan penerimaan, dan catat apa yang sebenarnya diberikan evaluasi sebelum memperluas akses.

Pertanyaan yang Sering Diajukan

API AI generatif mana yang harus saya pilih untuk aplikasi saya?

Pilih berdasarkan input, output, waktu tunggu yang dapat diterima, dan persyaratan tinjauan fitur. Jalankan brief representatif yang sama terhadap kandidat yang dapat Anda gunakan secara legal dan operasional. Bandingkan biaya output yang diterima dan pekerjaan integrasi bersama kemampuan. Tidak ada pilihan universal yang ditetapkan oleh 3 contoh gambar ini.

Apakah ada API AI generatif gratis untuk developer?

Beberapa layanan menawarkan uji coba atau penggunaan gratis terbatas, tetapi ketersediaan, kelayakan, kuota, dan penggunaan yang diizinkan berubah. Verifikasi ketentuan saat ini untuk endpoint yang tepat. Jatah alat konsumen gratis tidak selalu mencakup akses API. Self-hosting juga menggunakan perangkat keras, listrik, dan waktu rekayasa, bahkan ketika bobot model dapat diunduh.

Apakah saya perlu pengalaman machine learning untuk menggunakan API AI generatif?

Anda dapat memulai dengan keterampilan HTTP, JSON, autentikasi, dan pengembangan backend biasa. Mengirimkan fitur yang dapat diandalkan juga memerlukan evaluasi dan pekerjaan operasional. Anda perlu memahami keterbatasan model cukup baik untuk menentukan output yang dapat diterima, tanpa harus melatih model sendiri.

Bisakah satu API menangani teks, gambar, dan video?

Sebuah platform dapat menyediakan ketiganya, tetapi setiap kemampuan dapat menggunakan endpoint, parameter, jenis output, dan pola tunggu yang berbeda. Verifikasi setiap antarmuka secara terpisah. Akun atau kredensial bersama tidak membuat body permintaan teks kompatibel dengan model gambar atau video.

Mengapa permintaan gambar saya mengembalikan ID tugas alih-alih gambar?

Endpoint mengirimkan pekerjaan secara asinkron. Simpan ID dan kueri rute status yang didokumentasikan. Ambil file saat tugas selesai, lalu validasi. Jika klien Anda berhenti menunggu, tugas sisi server mungkin masih berjalan; lanjutkan tugas itu sebelum mengirim yang lain.

Bagaimana cara mengurangi biaya API tanpa merusak alur kerja?

Cegah pengiriman duplikat, validasi input lebih awal, gunakan kembali aset yang diterima bila sesuai, dan uji konfigurasi yang lebih murah terhadap kriteria penerimaan yang tidak berubah. Ukur biaya sebenarnya per hasil yang diterima. API AI generatif untuk developer layak digunakan ketika aplikasi di sekitarnya dapat mengirimkan pekerjaan yang dapat digunakan dengan biaya yang dapat Anda pertahankan.

Model Terbaru

Satu API untuk semua AI multimedia.

Jelajahi semua model