- Eksperimen ini menguji apakah kode benar-benar membaik saat secara berulang meminta LLM untuk "menulis kode yang lebih baik" saat menulis kode.
- Kasus aslinya terinspirasi dari meme pada fitur pembuatan gambar DALL-E milik ChatGPT tentang prompt "buat lebih ...".
Eksperimen Prompt Berulang Sederhana
- Diberikan prompt pemrograman Python ke Claude 3.5 Sonnet untuk menyelesaikan masalah sederhana yang bisa dioptimalkan.
- Implementasi dasar
- Dari 1 juta bilangan bulat acak antara 1 dan 100.000, cari selisih antara nilai minimum dan maksimum angka dengan jumlah digit 30
- Implementasi dasar memakan waktu 657ms (menggunakan metode konversi
str Python)
- Iterasi #1
- Meminta Claude untuk "menulis kode yang lebih baik" agar menyempurnakan kode
- Claude merefaktor kode menjadi bentuk kelas Python dan membuatnya berorientasi objek, serta menghitung digit sum semua angka sebelumnya
- 2,7x lebih cepat
- Iterasi #2
- Claude memanfaatkan multithreading dan operasi NumPy yang tervektorisasi untuk mengoptimalkan kode lebih lanjut
- 5,1x lebih cepat
- Iterasi #3
- Kode justru menjadi lebih rumit, dengan regresi ke pendekatan konversi string
- 4,1x lebih cepat
- Iterasi #4
- Menggunakan pustaka Python numba untuk memanggil compiler JIT dan mengimplementasikan paralelisasi dengan asyncio Python
- Kecepatan meningkat hingga 100x
- Alih-alih menjadi "kode tingkat galaksi", hasilnya justru menjadi kode "enterprise-grade" yang overengineered
Menerapkan Prompt Engineering
- Diperlukan prompt engineering untuk mengoptimalkan output LLM
- Claude 3.5 Sonnet memiliki kemampuan mengikuti instruksi yang kuat, sehingga jika berikan arahan yang jelas, hasilnya bisa lebih baik
- Gunakan prompt sistem dengan instruksi rinci, bukan sekadar "menulis kode yang lebih baik"
- Prompt awal
- Definisikan secara rinci arti "kode teroptimasi" (algoritma, paralelisasi, meminimalkan kode yang tidak perlu, dll)
- Pada implementasi awal, optimasi digit sum dengan Numba → 59x lebih cepat
- Iterasi #1
- Claude menambahkan paralelisasi, tetapi memasukkan operasi bit shift aneh (untuk heksadesimal), yang menimbulkan bug
- Performa malah turun menjadi 9,1x
- Iterasi #2
- Claude mencoba mengoptimalkan performa dengan operasi SIMD, namun tetap memakai operasi bit shift yang salah.
- 65x lebih cepat dari implementasi awal
- Iterasi #3
- Claude mengoptimalkan performa menggunakan hash table
- 100x lebih cepat dari implementasi awal
- Iterasi #3
- Claude memperbaiki operasi bit shift yang salah, lalu performa turun sedikit.
- 95x lebih cepat dari implementasi awal
Kesimpulan
- Prompt yang samar seperti "kode lebih baik" saja sudah bisa menghasilkan perbaikan bertahap
- Dengan prompt engineering yang menjelaskan arah yang diinginkan (operasi numerik, JIT, paralelisasi, dll) secara jelas, kode bisa berkembang lebih cepat
- Ide optimasi otomatis bisa memunculkan penemuan alat baru (seperti numba), tetapi insinyur tetap harus memverifikasi bug dan menggunakannya secara selektif
- Dalam sistem produksi nyata, tidak praktis untuk langsung memakai semua kode yang diusulkan LLM karena masih besar kebutuhan verifikasi dan kendala domain spesifik
- Eksperimen ini berbasis Python, tetapi ide optimasi dari LLM juga berpotensi diterapkan saat integrasi bahasa lain seperti Rust (mis. PyO3)
1 komentar
Komentar Hacker News