Coding dengan LLM

Sejak ChatGPT dirilis, sudah ada banyak kekhawatiran: sepertinya pekerjaan coding akan digantikan AI. Sekarang sudah sekitar 2 tahun sejak ChatGPT dirilis dan di awal tahun ini ada demo “First AI software Engineer” yang membuat orang terkagum-kagum, tapi ternyata demonya tidak benar dan sampai sekarang perkembangan AI sebagai software engineer belum sesuai ekspektasi yang ada di video demo tersebut.

Orang ini membuat banyak software engineer panik, tapi kemudian hilang kabarnya

Sebagian orang berpendapat bahwa LLM sekarang ini akan mentok sampai level tertentu, dan sebagian lagi berpendapat bahwa LLM masih akan terus berkembang dan akan segera menggantikan software engineer, dan bahkan akan sampai level AGI (Artificial General Intelligence) yang akan bisa menyelesaikan segala macam masalah di bidang apapun.

Singkatnya, pendapat saya untuk saat ini: LLM masih akan berkembang, tapi tidak akan secepat itu bisa menggantikan software engineer. Menurut saya LLM sangat membantu software engineer, tapi masih cukup jauh untuk bisa menggantikan software engineer di semua bidang, karena bidang software engineering ini luas sekali (setidaknya sampai saya pensiun nanti).

Selama dua tahun ini saya sudah mencoba memakai berbagai produk AI dan bereksperimen dengan kode open source. Saya juga berusaha memahami AI, melihat banyak video, membaca banyak paper, walau tidak bisa mempraktikkan training dari nol karena biaya yang dibutuhkan sangat besar.

Pengalaman memakai LLM

Di bagian ini saya ingin menuliskan aneka hal yang sudah saya coba dengan LLM, mulai dari sekedar memakai LLM langsung dari web/app interfacenya, memanggil API, sampai bereksperimen dengan LLM lokal.

Memakai API OpenAI

Di awal masa-masa mendapatkan akses ChatGPT, saya banyak bereksperimen dengan memakai API OpenAI, karena waktu itu belum banyak tool tersedia. Saya mencoba dari sekedar memakai bot telegram (yang saya tuliskan di sini) atau pendekatan RAG (seperti saya tulis di artikel ini). Saya juga memakai AI untuk beberapa proyek saya, walau masih sangat terbatas.

Banyak orang memakai LLM untuk ekstraksi data. Contoh kecil yang bisa saya ceritakan adalah tentang ekstraksi nomor telepon dari chat message pemesanan pulsa. Sebenarnya sudah ada form isian khusus, tapi banyak yang masih memakai chat.

Teorinya memakai regex saja sudah cukup untuk kasus seperti ini : “saya mau isi 089912345”, tapi ternyata orang suka memberi spasi “saya mau isi 0899 123 45”, atau mungkin spasi diganti dengan “-“, atau diberi tanda kurung “(0899)-123 45”, mungkin terpikir solusi sangat sederhana: hapus saja semua non digit, sampai kemudian ada yang pesan “saya mau isi 089912345, cepet ya sebelum jam 1” atau “saya mau isi 089912345, 15 ribu aja ya bos”, nah sekarang jika semua non digit dihapus, maka semua angka berikutnya akan dianggap bagian dari nomor telepon.

Akhirnya yang dipakai adalah: regex untuk semua pola umum (jadi regexnya lebih smart), dan jika fail, akan ditanya ke LLM apakah memang ada nomor telepon, dan jika ada, ini bisa dikirim ke programmer untuk dijadikan pola berikutnya (misalnya ternyata ada yang menulis nomor telepon dengan pemisah titik: “0899.123.45”.

Secara umum: LLM bagus untuk ekstraksi data yang tidak terstruktur, tapi tetap perlu diperhatikan dengan tambahan validasi ekstra (jika data harus sangat akurat). LLM juga bagus untuk ekstrak data sentimen (misalnya apakah sebuah review sifatnya positif atau negatif).

Ketika memakai AI untuk hal sangat sederhana ini, saya jadi belajar bahwa LLM tidak selalu patuh. Jika kita minta format JSON, outputnya belum tentu JSON, kadang ada ucapan “yes, of course …” walau diminta jangan mengoutputkan apapun selain JSON. LLM yang baru sudah ditraining agar lebih taat mengoutputkan format tertentu.

Pengganti Stack Overflow

Saat ini saya sudah sangat jarang mengunjungi StackOverflow, saya lebih sering bertanya pertanyaan coding ke ChatGPT. Jika ada hal kompleks di mana ChatGPT tidak tahu jawabannya (karena terlalu baru), saya bisa mengupload dokumentasi, lalu meminta ChatGPT menjelaskan.

Saya juga memakai Kagi Search Engine berbayar, yang bisa menjawab aneka pertanyaan programming langsung. Jika jawaban kurang memuaskan, saya bisa menggunakan fitur “lens” untuk membatasi pencarian di situs programming saja.

Editing dengan AI Code Editor

Saya mencoba beberapa editor kode berbasis AI: Cursor, dan PearAI, yang keduanya adalah fork dari VScode. Masalah utama dengan fork adalah: tidak semua plugin yang saya pakai sehari-hari bisa dipakai, meskipun cukup nyaman melakukan editing dengan editor khusus AI akhirnya saya memilih memakai plugin VSCode, dan bukan editor terpisah.

Ada beberapa plugin yang saya coba: tabnine, continue dev, codeium, dan tentunya copilot. Buat yang belum tahu: VSCode punya fitur “profile”, tiap profile bisa punya plugin yang berbeda, jadi lebih gampang membandingkan berbagai plugin dan tidak saling bentrok. Akhirnya yang cocok untuk flow kerja saya adalah copilot (yang akan saya jabarkan di bagian berikut). Untuk yang ingin gratisan, codeium sudah cukup baik.

Editing sehari-hari dengan Copilot

Ada dua mode bekerja dengan copilot: via chat dan via code completion. Mode chat dipakai untuk meminta langsung dalam bentuk teks, seperti: “ubah agar semua method yang mengembalikan int supaya mengembalikan string”. Mode completion dipakai untuk melengkapi kode di kursor.

Copilot kadang bisa menebak kode yang perlu dilengkapi, tapi sebagai programmer, kita lebih tahu data yang masuk. Misalnya kita ingin memproses data, tapi ingin membuang dulu semua nilai negatif, kita bisa menambahkan komentar //remove all negative values, dan copilot biasanya bisa mengimplementasikan apa yang kita tuliskan.

Tidak semua implementasinya benar, jadi perlu dibaca dan dimengerti. Saya beruntung dari dulu suka membaca kode (dimulai dari jadi asisten yang perlu menilai kode program lebih dari 100 orang yang ditulis di atas kertas ketika ujian, sampai melakukan reverse engineering aneka program) jadi flow kerja seperti ini cocok untuk saya.

Sebagian orang berpendapat bahwa daripada membaca dan memperbaiki kode akan lebih cepat menulis kodenya secara langsung. Di kasus yang kompleks saya juga sering merasa seperti ini, tapi di 90% kasus yang saya temui, copilot bisa membantu menulis dengan lebih cepat.

Coding App Kecil dengan Claude

Saya sering juga meminta LLM untuk membuat program utuh yang spesifikasinya jelas dan butuh fitur terbatas. Utuh di sini artinya program bisa langsung dijalankan. Biasanya yang saya gunakan adalah Claude, walau sekarang saya kadang memakai juga ChatGPT o1 preview.

Banyak program di dunia nyata spesifikasinya bisa panjang dan kompleks sekali, misalnya ketika memakai aplikasi shopping di ponsel, segala aturan untuk diskon bisa sangat kompleks. Contoh aturannya: Jika user memiliki kupon toko dan kupon dari platform, maka yang dipakai adalah platform, dan jumlah maksimum koin yang bisa dipakai adalah 100, tapi jika kupon yang dipakai adalah kupon toko, maka koin yang bisa dipakai adalah 200. Jika ingin menjelaskan ini baris demi baris ke LLM, akan lebih cepat kalau kita sambil melihat kodenya di copilot. Untuk saat ini, sangat tidak cocok menuliskan satu spesifikasi panjang, lalu berharap LLM menyelesaikan semuanya dengan sempurna.

Walau banyak yang kompleks, banyak juga hal sederhana di dunia nyata. Contoh: ketika banjir di Chiang Mai, saya sering memonitor situs yang menampilkan level air di berbagai titik sungai di Chiang Mai. Daripada terus-terusan memonitor, saya minta Claude membuat skrip yang memonitor situs tiap 15 menit (karena data hanya diupdate tiap jam), dan jika berubah, langsung kirimkan via bot telegram. Aplikasi ini belum ada yang pernah membuat, dan cukup sederhana, tapi males juga coding pas di luar rumah (kami mengungsi ke guest house ketika banjir).

Walau sudah ada program open source untuk melakukan sesuatu, saya kadang meminta LLM membuatkan versi yang lebih sederhana dari sebuah program. Contoh: saya butuh program untuk mengecek apakah sebuah situs hidup atau tidak, dengan melakukan “GET”, dan mengecek apakah teks tertentu ada atau tidak pada responsenya. Saat ini sudah ada banyak sekali program yang bisa melakukan hal yang sama, tapi seringkali situasinya begini:

  • Terlalu kompleks setupnya
  • Bagus, tapi terlalu banyak fiturnya, butuh banyak waktu untuk membaca seluruh dokumentasi cuma untuk fitur yang saya inginkan saja. Program yang kompleks ini butuh resource disk, memory, dan CPU yang lebih banyak
  • Bagus, sederhana, tapi tidak dimaintain lagi, dan memakai versi library yang sudah lama sekali

Salah satu contoh program ini adalah telegram-send yang saya pakai bertahun-tahun, sampai suatu saat pembuatnya berhenti memaintain ini, dan ketika salah upgrade library dependensi, jadi tidak bisa jalan. Bisa saja memakai venv, tapi ini menambah kerjaan (karena ini tadinya saya pakai untuk skrip global yang dipanggil dari cron untuk notifikasi task yang selesai).

Rewrite Skrip Python

Saya punya beberapa skrip Python untuk berbagai keperluan yang sudah berjalan bagus, tapi makan resource (walau tidak banyak). Ada yang butuh dependensi library tertentu, dan kadang error ketika upgrade versi library, jadi akhirnya perlu memakai virtualenv. Virtual env Python ini makan disk space yang lumayan.

Dulu saya terima saja kenyataan itu, karena malas rewrite skripnya ke bahasa Go atau bahasa lain. Sekarang dengan ChatGPT atau Claude, saya bisa menerjemahkan sebagian skrip Python ke Go (dan ada juga yang ke C, karena butuh akses low level). Setelah dicompile, programnya akan jalan, tidak butuh disk space banyak, dan tidak butuh memori atau CPU yang tinggi. Binary hasil kompilasi Go juga bisa dicopy langsung ke mesin lain, tidak perlu repot menginstall semua package dalam virtual environment.

Editing ringan dengan Aider

Aider adalah program untuk editing kode dengan LLM memakai pendekatan CLI. Teorinya kita bisa membuat program kompleks dengan ini, tapi saya hanya memakai untuk mengedit hal-hal kecil dan jelas. Masalah dengan CLI adalah: saya tidak bisa dengan mudah melihat keseluruhan file, dan tidak mudah memilih teks dan langsung minta edit bagian tertentu.

Contoh prompt yang saya pakai karena lebih cepat dengan Aider: “add new option -v that will show download progress”. Ini perubahan yang kecil dan saya cukup yakin LLM bisa melakukan hal ini, dan ini lebih cepat daripada membuka vscode, buka copilot, chat, dan copy paste perubahan.

Mengetahui hal apa yang bisa atau tidak bisa dilakukan oleh Aider didapat dari pengalaman. Sebenarnya kita selalu bisa melakukan undo perubahan aider (karena otomatis dicommit di git), tapi Aider memakai banyak token untuk bisa melakukan sebuah aksi, artinya editing banyak kode akan menghabiskan banyak uang. Berbagai model open source belum bisa menyaingi ChatGPT/Claude untuk kasus edit seperti ini.

Eksperimen dengan model LLM lokal

Beberapa proyek open source saat ini tersedia untuk menjalankan LLM lokal, di komputer sendiri, dengan CPU dan/atau GPU. Saat ini yang cukup populer (dan sering saya pakai) adalah ollama.

Saat ini komputer yang saya pakai untuk eksperimen adalah desktop yang memiliki 2 GPU (dua buah 3060 12 GB), dan juga punya M2 Max yang memiliki RAM 64 GB. Dengan ini saya bisa menjalankan model-model sampai 30B parameter (30 milyar parameter, walau agak lambat), atau versi 8B dengan cukup cepat.

Tentunya LLM dengan hanya beberapa milyar parameter tidak akan memiliki pengetahuan yang luas seperti ChatGPT (ibaratnya seperti gambar peta 0.3 megapixel tidak akan memiliki detail yang sempurna dibandingkan gambar peta 48 megapixel). Tapi berinteraksi dengan LLM yang terbatas ini bisa membuat saya lebih paham batasan dan prompt apa yang cocok untuk LLM ukuran kecil.

Situasi saat ini

Sekarang baru 2 tahun ChatGPT diluncurkan, apakah sudah mengancam software engineer? sepertinya belum. Ada berita bahwa 25% kode yang dihasilkan Google ditulis AI. Apa kata engineer Google? Katanya itu cuma sekedar autocomplete yang dihitung sebagai “kode ditulis oleh AI”.

Ternyata cuma autocomplete

Kalau memang LLM sudah mengangkat produktivitas programmer, tentunya akan disebutkan lebih jelas, misalnya: sekarang programmer 25% lebih produktif, atau kami cuma butuh 3/4 programmer dari sebelumnya.

Masih perlu belajar coding

Jadi masihkah perlu belajar coding sekarang? Menurut saya saat ini adalah saat yang sangat baik untuk belajar programming/coding, sambil dibantu semua teknologi AI dan mengikuti semua perkembangan AI. Tentunya jangan mentok di level coding/algoritma saja, tapi juga level yang lebih tinggi.

Pelajari hal-hal fundamental, segala macam algoritma dan terminologi yang digunakan, karena itu perlu disampaikan dalam bentuk kata-kata ke sistem AI. Ikuti perkembangan supaya tahu bagian mana yang sekarang sudah sangat mudah diotomasi AI. Contoh: mendesain UI Website sekarang gampang sekali dilakukan dengan V0 buatan Vercel.

Satu hal yang tidak akan pernah bisa dilakukan AI adalah: bertanggung jawab. Jika memang AI sudah bisa “sempurna” coding dari awal sampai akhir, tetap perlu ada yang memeriksa dan menyatakan bahwa yang dihasilkan sudah sesuai yang diminta. Jadi pasti masih dibutuhkan orang-orang yang perlu bisa memahami kode yang dihasilkan AI.

LLM masih terbatas

LLM tidak menggunakan logika untuk menghasilkan output, dan bukanlah sebuah database. Jika kita bertanya siapa Ibu dari aktor X, dia bisa menjawab bahwa namanya adalah Y dengan informasi mengenai Y (misalnya lahir di London tahun 1977). Tapi kalau ditanya: siapa anak dari Y (di mana Y lahir di London 1977), kemungkinan besar jawabannya adalah salah (sampai saat ini ChatGPT masih memiliki masalah ini).

Pengunaan prompt yang sedikit berbeda, kadang membuat output LLM jauh berbeda. ChatGPT, Claude, dan Gemini punya halaman yang menjelaskan bagaimana memberikan prompt yang baik untuk model yang mereka miliki.

Saat ini sebenarnya para ahli AI juga masih belum paham sifat emergen LLM ini, dan bahkan usaha untuk memanipulasi “knowledge” sebuah LLM juga masih belum sepenuhnya berhasil. Machine unlearning ini masih jadi topik riset yang hangat.

Banyak progres sekedar akal-akalan

Arsitektur LLM bisa langsung memproses suara dan menjawab suara tanpa representasi teks di tengah-tengah. Teorinya ini bisa dikembangkan lebih luas lagi: bisa langsung membaca teks dari gambar, atau menghasilkan gambar langsung dari konsep apapun.

Kenyataannya: saat ini hal-hal tersebut masih butuh resource sangat banyak, jadi berbagai solusi (saat ini) sifatnya akal-akalan.

ChatGPT o1 berusaha menyelesaikan masalah AI yang tidak bisa memakai logika dengan CoT (Chain of Thought Programming), berusaha menjawab dengan banyak langkah. Hasilnya cukup baik, tapi juga masih banyak salahnya.

Contoh lain: untuk menghasilkan gambar, ChatGPT akan membuat prompt dan diberikan ke Dall-E. ChatGPT bisa “melihat” dan memahami gambar, tapi tidak bisa membuat gambar secara langsung.

Tapi Dall-E memiliki keterbatasan: tidak semua gambar bisa dihasilkan. Saat ini ada satu contoh konyol: semua GenAI yang membuat foto tidak bisa membuat kucing berekor pendek. Berbagai tweak prompt tetap gagal.

Saat ini tidak bisa membuat kucing berekor pendek

Apakah ChatGPT tidak punya konsep kucing berekor pendek? kita bisa mengupload gambar kucing berekor pendek dari internet, dan bertanya pada ChatGPT

Meminta ChatGPT mendeskripsikan gambar

Ternyata bisa paham. Lalu kalau kita minta ChatGPT membuat gambar prompt itu (“a side profile of a cat with a short, stubby tail, which appears to be a Manx ….”), apakah akan berhasil? ternyata tetap tidak bisa, karena keterbatasan Dall-E.

Contoh akal-akalan lain adalah: ChatGPT dan Gemini menggunakan tool untuk konversi PDF dan file lain agar bisa diproses sebagai teks (jadi kadang bingung membaca teksnya). Pendekatan lain adalah dengan langsung memproses image PDF seperti yang dilakukan Claude.

Berikut ini contoh kesalahan pemrosesan PDF. Sementara itu claude menyerah karena terlalu banyak halamannya, dan ChatGPT curang dengan membaca judulnya saja dan mencari isinya di Internet.

Output yang kacau

Tips

Di bagian ini, saya ingin membagikan beberapa tips praktis memakai LLM untuk coding.

Gabungkan beberapa AI

Tidak semua LLM bisa menerima input yang kita mau, contohnya: saatnya ChatGPT o1-preview bisa melakukan analisis, tapi tidak menerima input image. Akal-akalan yang bisa dilakukan: meminta model lain untuk mendeskripsikan image, lalu meminta o1 untuk memikirkan solusinya.

Sebagian LLM ditraining untuk task tertentu, misalnya V0 yang jago membuat user interface berbasis web, jadi bagian UI bisa diserahkan ke LLM ini. LLM lain bisa dipakai untuk menghasilkan kode sisi server.

Memakai teks untuk segalanya

Saat ini kemampuan LLM untuk memproses dan menghasilkan tipe file selain teks sangat terbatas. Jika kita ingin membuat diagram, maka hasil diagram akan memiliki teks yang aneh atau tidak terbaca. Solusinya: gunakan teks. Dalam kasus diagram, kita bisa meminta LLM menggunakan format output dot atau mermaid.

Beri konteks yang jelas

Di ChatGPT ada fitur untuk membuat GPT baru, di sini kita bisa memberikan prompt awal atau dokumen acuan. Jadi misalnya kita bisa membuat “ProjectX-Assistant”, di mana ProjectX adalah proyek yang sedang kita kerjakan, di dalamnya kita bisa menyatakan hal-hal penting, misalnya “all code must be in Python, and these are the libraries that are allowed: requests, flask, …”. Contoh dokumen yang bisa diupload: struktur database, contoh data, dan fungsi-fungsi yang sudah kita miliki. Sekarang jika kita mulai chat dengan GPT itu, kita bisa langsung bertanya, dan jawabannya akan sesuai dengan konteks project kita.

Copilot bisa cukup akurat mengimplementasikan sebuah fungsi karena tahu konteks project kita, termasuk juga segala macam konvensi coding yang kita gunakan. Jika karena satu alasan kita tidak ingin memakai Copilot, kita bisa mensimulasikan dengan mengcopy paste fungsi-fungsi yang sudah kita miliki dengan prefix “given these existing functions: <copas> implement a function that ….”.

Percuma berdebat dan menjelaskan panjang

Semua akan mengalami kasus ini: bertanya ke ChatGPT (atau LLM lain), dan jawabannya salah. Bentuk salahnya bisa banyak: tidak bisa dicompile sama sekali, memakai library yang tidak ada (halusinasi), crash, runtime error, outputnya salah, tidak menangani semua kasus, dsb.

Banyak orang berusaha membetulkan langkah demi langkah di satu sesi chat, dan kadang berputar-putar di error yang sama. ChatGPT akan minta maaf, lalu membuat jawaban yang masih salah, lalu minta maaf lagi, demikian terus berulang-ulang.

Kalau kita mengerti tentang batasan konteks, kita akan paham bahwa ini sangat tidak efisien, dan kemungkinannya kecil jawaban jadi benar setelah berkutat lama. Pendekatan yang lebih benar adalah dengan memulai chat baru, tapi kali ini jelaskan dengan lebih tepat apa yang diinginkan dan tidak diinginkan.

Jika masih gagal juga, lihat contoh kasus kucing berekor pendek sebelumnya: LLM-nya memang tidak mampu memberikan jawaban yang kita mau. Cari pendekatan lain: berpikir/bereksperimen sendiri, mencari di github, pecahkan masalahnya menjadi lebih kecil.

Penutup

Bagi saya pribadi: LLM sangat fun, sangat membantu hidup saya, bukan hanya soal coding (akan saya tuliskan posting lain tentang pemakaian LLM selain untuk coding). Dalam hal coding, saya jadi bisa coding lebih cepat, mengimplementasikan tool-tool kecil yang butuh waktu, menulis ulang skrip lama, dan bahkan membantu membuat tool ketika pentest.

Saya merasa sangat terbantu berbagai LLM, jadi saya subscribe ke banyak layanan, baik via web/app maupun APInya. Saya anggap seperti membayar asisten yang tidak pernah mengeluh dan tersedia kapan saja.

Saya juga menikmati aneka teknologi AI baru yang dirilis, walau kadang sekarang merasa “ah itu biasa aja” karena sudah ada ribuan produk serupa.

LLM saat ini masih di tahap sangat awal, belum jelas masa depannya seperti apa. Apakah seperti ponsel yang dalam sekitar 10 tahun sudah menjadi bagian hidup semua orang dan menggantikan banyak benda (kamera, peta, music player, dsb).

Atau apakah seperti teknologi self-driving car. Dari sejak 10 tahun lalu sudah ada demo self driving car yang sangat bagus, sepertinya pekerjaan sopir akan segera tergantikan, tapi sampai sekarang self-driving car masih sangat terbatas. Sudah ada self-driving taxi di kota tertentu, tapi sampai belum ada tanda-tanda bahwa mobil-mobil otomatis akan segera menggantikan semua mobil di sebagian besar tempat di dunia ini.

Di masa-masa awal GenAI ini, mari kita manfaatkan semua sebaik-baiknya.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *