APIMart
Streaming Claude API — Penjelasan Fitur Utamanya

Streaming Claude API — Penjelasan Fitur Utamanya

Cara kerja streaming Claude API — event SSE, penyiapan proxy backend, TTFT dan kontrol biaya, pemulihan stream terputus, serta tips keandalan produksi.

Tutorial

Jika Anda ingin Claude terasa cepat, aktifkan streaming. Alih-alih menunggu 15–25 detik untuk satu balasan penuh, pengguna sering kali dapat melihat token pertama dalam sekitar 300–800 ms.

Berikut versi singkatnya:

  • Saya akan memakai streaming SSE ketika ingin balasan muncul saat sedang dihasilkan
  • Saya akan menjaga panggilan Claude di balik proxy backend untuk melindungi API key
  • Saya akan memantau TTFT (time to first token), max_tokens, dan pemutusan koneksi untuk mengontrol UX dan pengeluaran
  • Saya akan mengurai event streaming secara berurutan: message_start, event content block, message_delta, lalu message_stop
  • Saya akan menyangga (buffer) fragmen JSON tool hingga content block-nya selesai
  • Saya akan mengantisipasi koneksi yang terputus, karena Claude tidak melanjutkan stream secara native

Beberapa angka yang menonjol:

  • Haiku 4.5: TTFT sekitar 410 ms
  • Sonnet 4.6: TTFT sekitar 720 ms
  • Opus 4.7: TTFT sekitar 980 ms
  • Timeout proxy default 30–60 detik dapat memotong output yang panjang
  • Read timeout yang lebih panjang, 120–300 detik, sering diperlukan
  • Job batch dapat berbiaya 50% lebih murah daripada tarif token standar

Dengan kata sederhana: streaming mengubah pengiriman, bukan modelnya. Claude API mengirim teks dalam potongan event kecil melalui koneksi langsung, dan aplikasi saya menyusun ulang jawaban akhir di layar. Untuk chat, copilot, dan asisten, itu biasanya berarti nuansa pengguna yang lebih baik, lebih sedikit masalah idle timeout, dan lebih banyak pekerjaan di sisi klien maupun backend.

Berikut yang paling penting:

AreaYang akan saya fokuskan
KecepatanWaktu token pertama, ukuran prompt, pilihan model
Penyiapanstream: true, penanganan SSE, buffering proxy dimatikan
UXSpinner dulu, lalu teks token demi token, plus tombol Stop
BiayaLacak token input/output, atur max_tokens, batalkan sesi mati
KeandalanCoba ulang hanya error yang dapat dicoba ulang, simpan teks parsial, mulai lagi dengan prompt lanjutan

Jadi jika saya yang menyiapkannya, saya akan menganggap streaming sebagai pilihan UX dan infrastruktur, bukan sekadar flag API.

Streaming Claude API: Perbandingan Kecepatan Model, Biaya & Metrik Utama
Streaming Claude API: Perbandingan Kecepatan Model, Biaya & Metrik Utama

Membangun dengan Claude API - Bagian 4 - Response Streaming

Claude

Cara Kerja Streaming Claude API di Tingkat Protokol

Mengaktifkan streaming tidak mengubah modelnya sendiri. Ia mengubah cara output dikirimkan. Alih-alih menunggu satu respons lengkap, Claude mengirim potongan-potongan kecil saat sudah siap.

Endpoint dan pengaturan request mana yang mengaktifkan streaming

Streaming menggunakan endpoint Claude Messages API yang sama, /v1/messages, seperti request biasa. Satu-satunya perbedaan adalah menambahkan "stream": true ke body request [1][3]. Flag itu mengalihkan koneksi dari alur request-response standar menjadi Server-Sent Events (SSE), di mana server mendorong potongan-potongan saat dihasilkan.

SDK resmi Python dan TypeScript menyertakan helper stream yang menangani parsing event dan penyusunan pesan untuk Anda. Saat stream berakhir, memanggil .get_final_message() di Python atau .finalMessage() di TypeScript akan mengembalikan respons yang telah selesai, beserta jumlah token dan stop reason [1][4].

Pengaturan itu memulai stream. Bagian berikutnya adalah alur event yang kembali melalui koneksi.

Event apa saja yang tiba selama stream

Sebuah stream mengikuti urutan event bernama yang tetap. Setiap event membawa data yang dibutuhkan klien Anda untuk menyusun ulang respons penuh dengan benar.

Event TypeTujuanData Utama
message_startMembuka streamMessage ID, role, model, dan input_tokens
content_block_startMemulai segmen konten baruIndeks block dan tipe block (text, tool_use, atau thinking)
content_block_deltaMengirim konten parsialIndeks block dan text_delta, input_json_delta, atau thinking_delta
content_block_stopMenutup segmen kontenIndeks dari block yang selesai
message_deltaMemperbarui state tingkat pesanoutput_tokens kumulatif dan stop_reason
message_stopMengakhiri streamSinyal akhir untuk menutup koneksi
pingHeartbeatDikirim selama pemrosesan model
errorMelaporkan error streamTipe dan pesan error

Inilah data yang disangga klien Anda dan ditampilkan secara real time. Untuk output teks biasa, tambahkan setiap text_delta ke buffer lokal saat event tiba. Begitulah string respons penuh terbentuk sepotong demi sepotong. Input tool-call bekerja sedikit berbeda: mereka tiba sebagai fragmen input_json_delta, jadi Anda sebaiknya menyangga mereka lebih dulu dan mengurainya hanya setelah content_block_stop [1][6].

Kapan APIMart relevan untuk streaming Claude

APIMart

Jika streaming Claude berada di dalam aplikasi multi-model, APIMart dapat memberi Anda satu tempat untuk merutekan akses Claude dan streaming melalui unified LLM API. Itu cenderung paling penting ketika Anda menginginkan alur streaming yang sama di klien web maupun mobile.

Cara Menambahkan Streaming Claude ke Aplikasi Web dan Mobile

SSE, HTTP streaming, atau wrapper WebSocket: mana yang harus dipakai

Setelah Anda memahami cara Claude mengirim event streaming, langkah berikutnya adalah menyalurkan event-event itu ke klien web dan mobile. Pertanyaan utamanya sederhana: transport mana yang paling cocok untuk aplikasi Anda?

TransportKompleksitas PenyiapanKecocokan BrowserPerilaku Koneksi
Server-Sent Events (SSE)RendahNative (EventSource/Fetch)Satu arah; reconnection otomatis
Plain HTTP StreamingSedangMembutuhkan ReadableStreamTidak ada struktur event atau reconnection bawaan
WebSocket WrapperTinggiMembutuhkan library/wrapperDua arah; stateful; mungkin diblokir oleh sebagian firewall korporat

Untuk sebagian besar aplikasi berbasis browser, SSE adalah pilihan default. Ia bekerja baik dengan sebagian besar proxy dan CDN, dan cerita dukungan browsernya sederhana.

WebSocket tetap bisa masuk akal. Jika aplikasi Anda sudah bergantung pada komunikasi dua arah dan langsung, ia mungkin cocok. Namun untuk aplikasi chat standar, WebSocket sering menambah lebih banyak komponen bergerak daripada nilainya.

Mengapa proxy backend biasanya arsitektur paling aman

Setelah Anda memilih transport, tempatkan penanganan stream di balik server Anda. Jaga request Claude di balik proxy backend untuk melindungi API key untuk berbagai model [9][5].

Lapisan proxy itu juga merupakan tempat yang tepat untuk:

  • menyisipkan system prompt
  • menerapkan rate limit per pengguna
  • mencatat waktu first-token dan last-token

Atur X-Accel-Buffering: no untuk menghentikan buffering proxy [2][8]. Hubungkan juga sinyal abort dari klien ke stream. Dengan begitu, jika pengguna menghentikan generasi, request langsung dibatalkan alih-alih menghabiskan token untuk respons yang tidak akan dibaca siapa pun.

Satu jebakan lagi: timeout default 30–60 detik dapat memotong respons yang panjang [9][2]. Di produksi, gunakan read timeout sekitar 120–300 detik untuk generasi yang lebih panjang.

Seperti apa UX sisi klien yang baik selama respons berlangsung

Setelah stream terlindungi dan diteruskan, tugasnya beralih ke UI. Di sinilah streaming terasa mulus atau kaku.

Tampilkan indikator "Thinking..." atau spinner segera setelah pengguna mengirim prompt. Itu menutupi jeda first-token. Segera setelah content_block_delta pertama tiba, hapus indikator dan mulai me-render teks.

Lalu tambahkan setiap text_delta saat datang sehingga respons muncul dengan efek typewriter. Untuk menjaga antarmuka agar tidak tersendat, kelompokkan pembaruan dengan requestAnimationFrame agar Anda tidak memicu terlalu banyak re-render. Auto-scroll sebaiknya mengikuti respons saat sedang dihasilkan, tetapi harus berhenti jika pengguna menggulir ke atas untuk membaca konten lama.

Selalu sertakan tombol "Stop" yang terhubung ke AbortController sehingga bisa membatalkan request Fetch. Itu seharusnya mengakhiri stream dengan bersih tanpa menghapus teks yang sudah ada di layar.

Jika koneksi terputus, biarkan output parsial tetap terlihat. Untuk pemulihan, simpan teks parsial itu dan mulai lagi dengan prompt lanjutan, karena Claude tidak melanjutkan stream yang terputus secara native [3][1].

Cara Mengelola Latensi, Biaya, dan Keandalan di Produksi

Setelah stream aktif, pekerjaan produksi berpusat pada tiga kontrol: latensi, pengeluaran, dan pemulihan.

Bagaimana streaming mengubah latensi yang dirasakan

Metrik UX utama di sini adalah Time to First Token (TTFT): waktu hingga kata pertama muncul. Dalam aplikasi streaming, token pertama yang terlihat itu membentuk keseluruhan nuansa produk. Jika muncul cepat, aplikasi terasa responsif. Jika lambat, pengguna akan menyadarinya.

Benchmark menunjukkan celah yang jelas antar model Claude: Haiku 4.5 mencapai TTFT sekitar 410 ms, Sonnet 4.6 berada di sekitar 720 ms, dan Opus 4.7 sekitar 980 ms [3]. Aturan sederhananya adalah gunakan model tercepat yang masih memenuhi standar kualitas Anda.

Ukuran prompt juga penting. Context window yang lebih besar dapat mendorong TTFT hingga 1–3 detik [5]. Jadi jika system prompt Anda memiliki instruksi tambahan, aturan lama, atau contoh yang membengkak, memangkasnya dapat membuat aplikasi terasa jauh lebih gesit.

Cara melacak penggunaan token dan mengontrol biaya USD

Streaming dan batch berbiaya sama per token. Yang berubah hanyalah kapan output tiba. Jumlah token disertakan dalam stream itu sendiri: event message_start menyertakan usage.input_tokens, dan event message_delta menjelang akhir menyertakan usage.output_tokens kumulatif final [1][4]. Backend Anda sebaiknya menyimpan data penggunaan final itu setelah stream berakhir agar penagihan tetap akurat.

Atur max_tokens pada setiap request. Ia memberi Anda batas keras dan mencegah generasi panjang mendorong biaya naik [1][11]. Anda juga sebaiknya memantau pemutusan koneksi klien di sisi server. Jika pengguna sudah pergi dan generasi terus berjalan, Anda tetap menghabiskan token tanpa alasan [5][7].

Untuk job yang tidak membutuhkan output langsung, perhitungannya berubah. Rangkuman batch, pemrosesan offline, dan pembuatan laporan semalaman adalah contoh yang baik. Dalam kasus itu, Batch API menawarkan diskon 50% dari tarif token normal [5][10].

Claude 3.5 Sonnet berbiaya sekitar $3.00 per 1 juta token input dan $15.00 per 1 juta token output pada streaming standar [8]. Dengan Batch API, workload async berbiaya setengahnya.

Angka penggunaan itu juga membantu dalam penagihan dan pemantauan rate limit. Untuk strategi lebih lanjut dalam mengelola request bervolume tinggi, lihat tips biaya AI API kami.

Cara mencegah stream terputus dan memulihkan dengan aman

Claude tidak memiliki fitur resume di sisi server [1][3]. Jika sebuah stream terputus, kirim output parsial dalam request baru dan minta Claude melanjutkan dari titik putus.

Coba ulang hanya kegagalan yang kemungkinan besar akan pulih sendiri.

Error CodeTipeTindakan
429Rate limitCoba ulang dengan backoff: 5s → 10s → 20s
529Server overloadedCoba ulang setelah 30–60 detik
408Connection timeoutReconnect segera
4xxClient errorJangan coba ulang; perbaiki request

Setelah itu, langkah terakhir adalah memilih fitur streaming mana yang paling penting.

Kesimpulan: Fitur Streaming Claude Mana yang Paling Penting

Setelah Anda menelaah latensi, biaya, dan keandalan, streaming Claude bermuara pada tiga hal: responsivitas yang dirasakan, sinyal event yang jelas, dan penanganan error yang solid.

Streaming penting karena pengiriman first-token membuat Claude terasa cepat dan responsif.

Alur event SSE memberi Anda text delta, jumlah usage, dan sinyal error secara real time [1][3].

Gunakan proxy backend untuk melindungi key, matikan buffering, dan tangani pemutusan koneksi [2][8]. Untuk aplikasi multi-model, APIMart dapat memusatkan streaming, logging, dan penagihan Claude.

Di produksi, TTFT yang cepat, pelacakan usage, dan ketahanan proxy adalah yang paling penting.

FAQ

Kapan saya sebaiknya memakai streaming alih-alih respons Claude API biasa?

Gunakan streaming ketika aplikasi Anda berhadapan langsung dengan pengguna. Ia mengirim token saat dihasilkan, sehingga respons terasa hampir instan. Pergeseran kecil itu dapat membuat keseluruhan produk terasa lebih cepat dan mulus.

Streaming bekerja paling baik untuk chat real-time, jawaban panjang, dan alur kerja agent dengan tool call. Ia juga membantu Anda menghindari timeout ketika output berjalan panjang atau batas token tinggi.

Lewati streaming untuk request singkat dan sederhana atau job batch yang mengutamakan throughput daripada latensi.

Apa yang harus saya lakukan jika stream Claude terputus di tengah respons?

Jika stream Claude terputus, Server-Sent Events tidak akan melanjutkan dari titik terakhir dengan sendirinya. Aplikasi Anda perlu menangani bagian itu.

Saat koneksi terputus, Anda bisa mencoba ulang request penuh atau menampilkan output parsial yang sudah Anda simpan. Gunakan blok try/except untuk menangkap APIConnectionError atau APIStatusError, dan simpan referensi ke konten yang sudah Anda kumpulkan sejauh ini.

Jika Anda ingin stream berlanjut dengan lebih sedikit hambatan, lacak last event ID dan putar ulang stream secara manual dari titik itu.

Bagaimana cara mengurangi biaya streaming tanpa merusak UX?

Fokus pada penyetelan prompt dan penanganan sesi yang efisien. Atur batas keras max_tokens, jaga prompt tetap singkat, dan tambahkan opsi pembatalan dini agar pengguna dapat menghentikan generasi setelah mendapatkan yang mereka butuhkan.

Untuk workload batch yang tidak memerlukan bolak-balik langsung, gunakan mode non-streaming. Untuk pelacakan biaya yang akurat, tunggu event message_stop final alih-alih memperkirakan dari potongan di tengah stream.

Siap mencoba?

Pilih model yang Anda inginkan di marketplace model

Coba model chat, gambar, dan video di marketplace model APIMart, lalu rasakan kemampuan model dengan cepat melalui satu API terpadu.

Model chatModel gambarModel video
Buka marketplace model