8 poin oleh GN⁺ 2025-01-04 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2025-01-04
Komentar Hacker News
  • Menguji lebih dulu apakah angka lebih kecil dari nilai minimum atau lebih besar dari nilai maksimum saat mengoptimalkan kode sangat efektif. Ini dilakukan sebelum menghitung digital sum dan bisa meningkatkan kecepatan hingga 5.5x. Pekerjaan ini juga bisa dilakukan dengan NumPy tanpa Numba.
  • LLM seperti GPT sering kali menghasilkan output tingkat menengah di awal. Dengan prompt tertentu, hasil yang lebih baik dapat diperoleh.
  • LLM adalah mesin simulasi situasional yang mensimulasikan model dunia nyata lewat prediksi teks. Untuk prediksi teks yang akurat, dibutuhkan model dunia nyata yang akurat.
  • LLM cenderung berfokus pada penulisan kode untuk pemula, dan akan lebih efektif jika Anda menyebutkan paketnya secara eksplisit serta meminta kode yang sederhana.
  • Di Android/Kotlin, ChatGPT tidak efisien dan sering memanggil metode yang tidak valid atau yang sudah dihentikan.
  • Penting untuk memulai sesi coding dengan "perencanaan terbuka" daripada "menulis kode". Anda harus memperjelas asumsi-asumsi LLM dan menyesuaikan rencana sebelum menulis kode.
  • Menjelaskan cara menghapus dan menginstal ulang PostgreSQL secara penuh di Debian, sambil mempertahankan direktori data agar database sebelumnya tetap ada.
  • Mengoptimalkan kode terlalu dini bisa jadi tidak baik; lebih baik mengoptimalkan hanya saat diperlukan.
  • Meminta "menulis kode yang lebih baik" secara berulang dapat menurunkan performa dan membuat solusi tidak lagi berfungsi.
  • Menjelaskan bahwa perhitungan di LiveCode lebih cepat dibanding Python, yakni dengan menjumlahkan lewat loop.