Saya Mencoba Menambahkan Chat AI ke Aplikasi Saya dan Menemui Jalan Buntu
Saya mencoba menambahkan asisten chat AI ke alat manajemen proyek saya. Saya ingin pengguna dapat mengajukan pertanyaan tentang tugas yang terlambat atau catatan rapat. Kelihatannya mudah. Saya pikir saya hanya perlu memanggil API dan selesai. Saya salah.
Setelah 15 pesan, AI menjadi lambat dan tidak koheren. API mulai mengeluarkan error karena percakapannya terlalu panjang. Saya menggunakan GPT-4 dengan batas 8k token. Setiap pesan menyertakan deskripsi dan catatan yang panjang. Riwayatnya tumbuh terlalu cepat.
Saya mencoba tiga perbaikan berbeda:
- Memotong riwayat (Truncating history): Saya hanya menyimpan beberapa pesan terakhir. Ini menghemat kecepatan, tetapi AI melupakan hal lainnya.
- Peringkasan (Summarization): Saya meminta AI untuk meringkas chat setiap 5 pesan. Ini membantu memori, tetapi meningkatkan biaya dan latensi saya.
- Penilaian relevansi (Relevance scoring): Saya mencoba hanya menyimpan pesan yang paling relevan. Ini membutuhkan vector store dan menambah terlalu banyak kompleksitas.
Saya menyadari bahwa saya membutuhkan strategi yang lebih baik. Saya memutuskan untuk menggunakan dua metode: streaming dan jendela konteks tetap (fixed context window).
Streaming membuat aplikasi terasa cepat. Pengguna melihat teks muncul secara instan alih-alih menunggu balasan lengkap. Saya menggunakan Server-Sent Events untuk mengirim potongan teks saat teks tersebut tiba.
Saya juga membagi konteks saya menjadi tiga bagian:
- System prompt: Sekumpulan instruksi tetap.
- Konteks dinamis: Pembaruan proyek terbaru dan status tugas.
- Riwayat percakapan: Jendela geser (sliding window) dari pesan-pesan terbaru.
Saya tidak mengirim seluruh riwayat setiap saat. Saya hanya mengirim cukup informasi untuk menjawab pertanyaan saat ini. Ini mengurangi ukuran payload saya sebesar 40%. Ini menghemat biaya saya dan meningkatkan kecepatan.
Jika Anda membangun fitur AI, ingatlah: Streaming memberi Anda kecepatan. Strategi konteks yang baik memberi Anda kecerdasan.
Bagaimana Anda mengelola memori percakapan di aplikasi Anda? Apakah Anda menggunakan sliding windows atau peringkasan?