𝗧𝗮𝗺𝗶𝗻𝗴 𝗔𝗜 𝗟𝗮𝘁𝗲𝗻𝗰𝘆 𝘄𝗶𝘁𝗵 𝗦𝗦𝗘
Saya membina ciri melengkapkan automatik (autocomplete) AI. Pengguna tidak menyukainya.
Setiap tekanan kekunci mencetuskan permintaan AI. Pengguna menunggu 2 hingga 3 saat untuk respons JSON yang lengkap. UI terasa seperti rosak. Saya telah mencuba debouncing dan caching. Tiada apa yang berjaya. Masalah terasnya tetap sama: pengguna tidak melihat apa-apa sehingga keseluruhan jawapan tiba.
Saya menyelesaikan masalah ini menggunakan Server-Sent Events (SSE) untuk menghantar respons secara berperingkat (streaming).
Aliran lama kelihatan seperti ini:
- Pengguna menaip
- Debounce 300ms
- Permintaan HTTP POST
- AI memproses (1-2 saat)
- Pelayan memulangkan respons penuh
- Klien memaparkan (render)
Pengguna melihat skrin kosong selama beberapa saat. Walaupun dengan penunjuk pemuatan (loading spinner), ia tetap terasa lambat.
Saya mempertimbangkan polling atau WebSockets. Polling menambah terlalu banyak beban (overhead). WebSockets pula terlalu berat untuk aliran sehala (one-way stream).
Saya memilih SSE kerana:
- Ia berfungsi secara sehala dari pelayan ke klien
- Ia menggunakan teks ringkas dan cebisan (chunks) JSON
- Ia menyambung semula secara automatik jika sambungan terputus
- Ia tidak memerlukan perpustakaan (libraries) tambahan pada pelayan anda
Keputusannya mengubah segalanya:
- Masa untuk respons visual pertama: daripada 2.1s kepada 0.3s
- Penglibatan pengguna: meningkat 40%
- Aduan pengguna: sifar
Streaming adalah tentang persepsi. UI yang progresif terasa lebih pantas daripada UI yang statik. Pengguna lebih suka melihat perkataan muncul satu demi satu daripada menunggu satu blok teks yang besar.
Jika respons AI anda sangat pendek, kekal dengan permintaan standard. Jika anda memerlukan komunikasi dua hala, gunakan WebSockets. Tetapi untuk kebanyakan keperluan penstriman AI, SSE adalah pilihan terbaik.
Bagaimanakah anda mengendalikan latensi AI dalam aplikasi anda? Adakah anda menggunakan penstriman atau menunggu respons penuh?