- Selama setahun terakhir, saat berinteraksi dengan model bahasa besar selama beberapa jam setiap minggu, saya terus terkesan dengan kemampuannya menyelesaikan tugas yang makin sulit
- Hasilnya, kecepatan saya menulis kode untuk proyek riset dan proyek pribadi meningkat setidaknya 50%
- Kebanyakan orang yang membicarakan kegunaan LLM di internet cenderung terlalu optimistis atau terlalu pesimistis
- Daripada berdebat tentang masa depan, saya ingin menyajikan 50 contoh percakapan selama setahun terakhir ketika saya menggunakan LLM untuk meningkatkan kemampuan riset saya dan membantu proyek coding saya
- Contoh penggunaan LLM oleh saya
- Membangun seluruh web app dengan teknologi yang belum pernah saya gunakan sebelumnya
- Mempelajari cara menggunakan berbagai framework tanpa harus mencobanya sendiri terlebih dahulu
- Mengonversi puluhan program ke C atau Rust untuk meningkatkan performa 10–100 kali
- Merampingkan codebase besar untuk sangat menyederhanakan proyek
- Menulis kode eksperimen awal untuk hampir semua paper riset selama setahun terakhir
- Mengotomatiskan hampir semua tugas monoton atau skrip sekali pakai
- Hampir sepenuhnya menggantikan pencarian web untuk menyiapkan dan mengonfigurasi package atau proyek baru
- Menggantikan sekitar 50% pencarian web untuk debugging pesan error
- Jika dikategorikan, ini terbagi menjadi 2 hal
- Bantuan belajar: membuat saya bisa melakukan hal-hal yang sebelumnya sulit
- Otomatisasi tugas membosankan: memungkinkan saya fokus pada hal yang paling saya kuasai dan menyelesaikan masalah yang sulit
- Hal terpenting adalah bahwa ini adalah contoh cara saya benar-benar mendapatkan bantuan dari LLM
- Bukan untuk menunjukkan kemampuan yang mengesankan, melainkan berangkat dari kebutuhan saya untuk menangani pekerjaan nyata
Nuansa
- Satu hal yang tidak ditangani internet dengan baik adalah nuansa. Saya tidak akan berargumen bahwa LLM saat ini akan menguasai dunia, atau membahas apa yang mungkin bisa dilakukan model masa depan
- Saya hanya akan membahas apakah model saat ini membantu bagi saya
- Anda mungkin bertanya-tanya mengapa saya menulis untuk membenarkan bahwa model bahasa itu berguna. Namun di kalangan akademik, software engineering, dan media, tampaknya banyak orang yang secara luas menyatakan bahwa LLM tidak memberi kontribusi apa pun, hanya sekadar siklus hype lain, dan dalam beberapa tahun akan hilang tanpa dampak apa pun pada dunia
- Saya akan berargumen bahwa mereka salah karena LLM saat ini sudah berguna
- Sebaliknya, ada juga orang yang berargumen bahwa model saat ini dapat menggantikan semua programmer dan orang tidak perlu belajar pemrograman
- Saya tidak secara eksplisit bermaksud membantah klaim mereka
- Saya sepenuhnya memahami bahwa LLM dapat menimbulkan banyak dampak berbahaya. Yang saya maksud adalah misinformasi, penyalahgunaan, pengawasan, penggantian pekerjaan, dan sebagainya. Saya berencana segera menulis tentang pandangan saya mengenai dampak berbahaya LLM. Namun itu adalah persoalan terpisah dari apakah model bahasa bisa berguna
- Saya sangat memahami alasan mengapa orang mungkin tidak ingin menggunakannya karena LLM berhalusinasi, mengulang fakta secara mekanis, dan bisa gagal karena kurang tangguh. Namun tulisan ini bukan tentang itu
- Saya pikir model tetap bisa berguna meskipun ada kegagalan-kegagalan tersebut
- Etika dalam melatih model ini patut dipertanyakan. Anda bisa memikirkan data orang-orang yang digunakan tanpa izin mereka, atau orang-orang bergaji rendah yang dibayar untuk secara eksplisit melatih model. Saya setuju bahwa ini adalah masalah
- Namun tulisan ini bukan tentang itu
- Seperti yang sudah beberapa kali saya katakan, tulisan ini hanya akan membahas apakah model yang ada saat ini berguna
Latar belakang saya
- Saya pada dasarnya bukan orang yang mudah percaya. Sepuluh tahun lalu saya mengalami hype crypto di komunitas keamanan, tetapi sepenuhnya menghindari menulis paper tentang blockchain. Saya tidak pernah memiliki Bitcoin. Saya skeptis terhadap semua klaim
- Saat seseorang pertama kali mengatakan bahwa teknologi AI ini akan sangat berguna dan secara besar-besaran mengubah cara kerja sehari-hari saya, reaksi saya adalah "saya tidak akan percaya sebelum melihatnya sendiri"
- Saya adalah peneliti keamanan. Selama 10 tahun terakhir, pekerjaan sehari-hari saya adalah menunjukkan berbagai cara model AI gagal secara spektakuler saat menghadapi lingkungan yang tidak ada dalam data latihnya. Saya telah menunjukkan bahwa dengan sedikit mengacaukan input ke model machine learning, kita bisa membuatnya menghasilkan output yang sangat keliru, atau bahwa sebagian besar model machine learning mengingat contoh tertentu dari dataset pelatihannya dan mengulanginya saat digunakan. Saya sepenuhnya memahami keterbatasan sistem-sistem ini
- Meski begitu, saya mengatakan bahwa model bahasa besar saat ini telah menghasilkan peningkatan produktivitas terbesar sejak internet diciptakan. Jika hari ini saya harus memilih antara akses ke internet atau akses ke model bahasa terbaru untuk tugas pemrograman acak, untuk lebih dari separuh kasus saya akan memilih model bahasa
[ Cara saya menggunakan LLM ]
Membangun aplikasi lengkap untuk saya
- Tahun lalu saya membuat kuis untuk menguji seberapa baik GPT-4 dapat memprediksi kemampuannya menyelesaikan sejumlah kecil tugas. Kuis itu cukup populer dan mencatat lebih dari 10 juta page view.
- Saya meminta GPT-4 menulis sebagian besar versi awal aplikasi ini. Saya melakukannya dengan mulai meminta struktur dasar aplikasi, lalu melalui serangkaian pertanyaan yang perlahan membangun berbagai fitur
- Percakapan ini totalnya mencapai 30.000 kata dan memanfaatkan sepenuhnya kemampuan model GPT-4 terbaru saat itu
- [Prompt dan jawaban aslinya dihilangkan]
- Dalam percakapan saya dengan GPT-4, saya mengajukan permintaan dengan berbagai cara
- Mulai dari pesan yang menjelaskan apa yang saya inginkan dengan kata-kata dan meminta model memberikan implementasi penuh, hingga pesan yang meminta perubahan spesifik (
"Bisakah Anda menyebutkan persentil menggunakan KDE alih-alih membandingkannya dengan skor rata-rata?")
- Termasuk juga pesan dengan pertanyaan yang benar-benar tidak lengkap yang hanya menempelkan pesan error (misalnya
"Plotting: numpy.linalg.LinAlgError: singular matrix") atau ketika saya meminta jawaban sederhana sekali pakai ("Bagaimana cara menambahkan iframe ke halaman dalam JavaScript dengan konten yang dimuat dari string?")
- Mengapa model bahasa efektif
- Pendekatan ini berhasil karena model bahasa sangat baik dalam menyelesaikan hal-hal yang sudah pernah diselesaikan orang sebelumnya
- Sebanyak 99% dari kuis ini hanyalah HTML dasar dengan backend web server Python yang bisa ditulis oleh orang lain
- Alasan kuis ini menarik dan disukai orang bukan karena teknologi di baliknya, melainkan karena isi kuisnya. Dan jika semua bagian membosankan diotomatisasi, membuat kuis menjadi sangat mudah
- Saya yakin bahwa tanpa bantuan model bahasa, saya mungkin tidak akan membuat kuis ini
- Karena saya tidak tertarik meluangkan waktu untuk menulis seluruh web application dari nol
- Dan ini datang dari seseorang yang tahu cara memrogram!
- Saya percaya bahwa bahkan model saat ini pun sudah cukup untuk memungkinkan mayoritas orang melakukan tugas bermakna yang sebelumnya tidak mungkin mereka selesaikan, hanya dengan meminta solusi
- Ke depannya saya akan memperkenalkan beberapa contoh lagi ketika model menulis seluruh aplikasi untuk saya, dan saat saya merilisnya saya akan dengan jelas menyatakan bahwa itu dibuat dengan bantuan model bahasa
Berperan sebagai tutor untuk teknologi baru
- Dulu saya berusaha mengikuti framework baru, tetapi waktu yang dimiliki satu orang terbatas.
- Karena pekerjaan saya, saya menghabiskan sebagian besar waktu untuk mengikuti perkembangan riset terbaru, bukan perkembangan framework JavaScript terbaru.
- Saat memulai proyek baru di luar area riset tertentu, biasanya ada dua pilihan:
- pertama, menggunakan yang sudah saya ketahui, dan
- kedua, mempelajari cara baru yang baru muncul (dan biasanya lebih baik).
- Di sinilah model bahasa membantu. Sebagian besar framework atau alat baru seperti Docker, Flexbox, dan React bukanlah hal baru bagi orang lain. Secara global, ada puluhan ribu hingga ratusan ribu orang yang memahaminya secara mendalam. Hal yang sama berlaku untuk model bahasa saat ini.
- Alih-alih membaca tutorial statis yang ditulis untuk pembaca tertentu demi mencapai tujuan tertentu, kita bisa berinteraksi dengan model bahasa dan mempelajari hal-hal yang diperlukan untuk menyelesaikan pekerjaan.
- Awal tahun ini, saat membangun framework evaluasi LLM, saya ingin menjalankan kode hasil generasi LLM di lingkungan yang terbatas.
- Docker adalah alat yang sempurna untuk pekerjaan itu, tetapi saya belum pernah menggunakannya sebelumnya.
- Menggunakan Docker bukanlah tujuan proyek tersebut, melainkan hanya alat yang diperlukan untuk mencapai tujuan.
- Saya hanya ingin memahami 10% dari Docker agar yakin saya menggunakannya dengan aman dengan cara yang paling dasar.
- Pada tahun 90-an, saya mungkin harus membeli buku tentang cara menggunakan Docker mulai dari prinsip dasarnya, membaca beberapa bab pertama, lalu melompat-lompat untuk mencari tahu cara melakukan hal yang saya inginkan.
- Dalam 10 tahun terakhir, hal ini membaik menjadi mencari tutorial online yang menjelaskan cara memakai Docker, mengikutinya, lalu mencari pesan error untuk melihat apakah orang lain mengalami masalah yang sama.
- Tetapi hari ini, kita cukup meminta model bahasa untuk mengajari Docker.
- Setelah menyiapkan dan menjalankan Docker, saya menyadari ada masalah izin saat menjalankannya di Linux. Saya ingin menyelesaikan masalah itu, jadi saya meminta bantuan model.
- Dari situ saya mengetahui tentang Podman, lalu saya meminta model menulis ulang kode yang khusus untuk Docker menjadi versi Podman yang setara.
- Dan ketika saya ingin mencari tahu cara meneruskan GPU host ke dalam container Docker, saya juga memintanya.
Memulai proyek baru
- Waktu kecil, bahasa pemrograman pertama saya adalah Java. Saya benar-benar suka pemrograman, tetapi sangat benci melihat layar kosong saat memulai proyek baru. Terutama dengan Java!
- Bahkan hanya untuk mengompilasi program Hello World pun sulit: saya harus mencari tahu apa yang dilakukan
public static void main string args, di mana tanda kurung harus diletakkan, huruf mana yang harus kapital lagi, dan kenapa kurung kurawal serta kurung siku ada di mana-mana.
- Jadi saya melakukan apa yang mungkin dilakukan anak mana pun. Saya meminta ayah saya untuk mengerjakannya saja.
- Dua puluh tahun kemudian, saya masih tetap tidak suka memulai proyek baru dengan framework yang belum saya kenal.
- Terlalu banyak waktu habis untuk menghapus boilerplate, dan saya pun tidak benar-benar paham apa yang sedang saya lakukan.
- Misalnya, baru-baru ini saya ingin mencoba menulis kode CUDA untuk membenchmark performa beberapa pencarian Greedy yang naif di GPU dibandingkan dengan implementasi CPU milik seseorang yang efisien dan dioptimalkan.
- Namun saya tidak tahu cara menulis program CUDA.
- Saya tahu cara menulis C, dan saya paham cara kerja GPU, cara kerja kernel, layout memori, dan sebagainya.
- Tetapi saya tidak tahu bagaimana menulis kode yang benar-benar mengirim pekerjaan ke GPU.
- Jadi saya meminta model menulis first pass untuk program CUDA itu.
- Apakah hasilnya sempurna? Tentu tidak! Tetapi itu adalah sebuah awal. Dan itulah yang saya inginkan.
- Saya bisa melihat bahwa ada banyak hal yang salah pada kode ini.
- Sebenarnya, itu sama sekali bukan masalah.
- Karena saya tidak sedang mencari solusi yang sempurna, melainkan titik awal.
- Jika model di masa depan menjadi lebih baik, itu akan luar biasa.
- Tetapi bahkan dengan yang saya miliki sekarang pun, itu sudah sangat membantu.
- Terpisah sama sekali dari hal di atas, saya juga sedang menggunakan Raspberry Pi Pico W untuk proyek pribadi lain yang saya kerjakan di rumah.
- Ini adalah pertama kalinya saya menggunakannya.
- Secara khusus, saya ingin melakukan pekerjaan jaringan.
- Tentu saja saya bisa menemukan tutorial bagus secara online yang menjelaskan cara melakukan apa yang saya inginkan.
- Namun belakangan ini, saat mencari di internet, lima hasil teratas biasanya hanya berupa content farm sampah dengan kode bug dari tahun 2008 yang diperbarui hanya demi SEO, dan tetap saja tidak berfungsi.
- Jadi sebagai gantinya, saya meminta model bahasa untuk mengajari saya cara melakukan apa yang saya inginkan.
- Saya pernah bekerja dengan mikrokontroler sebelumnya, jadi saya kurang lebih memahami cara kerjanya.
- Tetapi saya belum pernah bekerja dengan Pico W.
- Saya hanya butuh sesuatu yang membantu saya memulai dengan semua dependensinya, dan sisanya bisa saya cari tahu sendiri.
- Program "hello world" pertama yang selalu saya tulis untuk mikrokontroler baru adalah membuat LED berkedip.
- Ini memungkinkan saya menguji apakah saya bisa mengompilasi dan mengunggah kode ke perangkat, apakah semua pin sudah dikonfigurasi dengan benar, dan secara dasar apakah saya tahu apa yang sedang saya lakukan.
- Jadi saya tinggal meminta program yang membuat LED berkedip. (Sekali lagi, apakah ini ada di internet? Hampir pasti ada. Tetapi kalau begitu saya harus mencarinya sendiri.)
- Setelah menjalankan kode ini, saya jadi tahu apa yang harus dilakukan selanjutnya.
- Saya tahu cara kerja Python (percaya atau tidak!).
- Jadi setelah bagian MicroPython yang khusus selesai, saya bisa langsung melanjutkan mengedit dari sana.
- Dan saat saya menemui masalah lain yang memerlukan penanganan khusus, saya tinggal meminta bantuan model.
- Misalnya, di sini saya melanjutkannya dengan meminta model menulis skrip untuk terhubung ke WiFi.
- Lalu setiap kali saya mentok lagi, misalnya harus terhubung ke server MQTT, saya tinggal meminta bantuan model.
- Sekarang saya terus melakukan hal seperti ini. Bahkan contoh di bagian paling atas dari bagian ini pun bukanlah hipotesis.
- Saya sedang menanyakan cara menggunakan Flexbox, karena cara baru untuk mempelajari layout HTML adalah memakai
div alih-alih tabel.
Menyederhanakan kode
- Sebagai peneliti keamanan, saya sering menerima repository baru berisi ribuan baris proyek riset orang lain, lalu harus mencari tahu cara kerjanya agar bisa menyerangnya.
- Jika semua orang menulis kode yang bersih, itu tidak akan terlalu sulit, tetapi dunia tempat kita hidup tidak seperti itu.
- Peneliti tidak punya insentif untuk memublikasikan kode yang bersih.
- Jadi sering kali orang mengirimkan kode sampah yang kebetulan berfungsi. (Saya juga begitu.)
- Saya tidak punya contoh terkait riset yang bisa saya bagikan di sini, tetapi saya bisa berbagi contoh dari proyek pribadi yang sedang saya kerjakan.
- Saya punya obsesi yang tidak sehat terhadap Conway's Game of Life.
- Belakangan ini saya mencari cara cepat untuk mengevaluasi beberapa pola kehidupan di Python.
- Ada alat C++ yang sangat bagus untuk melakukan ini, yaitu golly, tetapi saya tidak ingin menulis ulang kode Python saya ke C++.
- golly memiliki alat CLI yang melakukan hal yang saya inginkan.
- Yang saya butuhkan hanyalah cara memanggilnya dengan benar.
- Langkah pertama untuk itu adalah mengambil kode C++ yang mendukung sekitar 50 opsi command line berbeda dan membuatnya hanya melakukan satu hal yang saya inginkan dengan tepat.
- Jadi saya membuang seluruh 500 baris kode C++ itu ke LLM dan meminta file yang lebih pendek yang melakukan hal yang sama.
- Lalu bagaimana hasilnya? Bekerja dengan sempurna.
- Setelah itu, saya meminta wrapper Python di sekitar kode C++ tersebut. Itu juga bekerja dengan baik.
- Ini adalah salah satu hal yang begitu merepotkan sehingga penulis aslinya sendiri mungkin tidak akan pernah melakukannya.
- Tetapi sekarang karena saya bisa tinggal memintanya, saya jadi punya sesuatu yang 100 kali lebih cepat daripada kode Python asli saya.
- Saya cukup sering melakukan hal seperti ini. Ada contoh lain yang melakukan hal yang persis sama di Python.
- Tak satu pun dari pekerjaan ini sulit.
- Tetapi setiap kali saya melakukannya seperti ini, saya bisa menghemat banyak waktu.
- Dan menurut saya, inilah salah satu alasan LLM saat ini begitu luar biasa.
- Memang tidak mencolok, dan saya mungkin tidak akan mendapat banyak poin internet dengan berkata, "ini cara membosankan saya memakai LLM untuk mempermudah hidup saya," tetapi inilah yang benar-benar terjadi.
Mengotomatiskan pekerjaan yang monoton
- Ada banyak pekerjaan yang tidak butuh pemikiran, membosankan, tetapi tetap harus dikerjakan
- Salah satu alasan utama menunda pekerjaan adalah karena kita tahu menyelesaikannya akan terasa menjengkelkan dan menyakitkan
- LLM sangat mengurangi rasa sakit seperti ini, dan karena saya tahu saya hanya perlu menyelesaikan masalah yang menarik, menjadi jauh lebih mudah untuk mulai mengerjakan sesuatu
- Di sini saya akan melihat masalah-masalah yang sepenuhnya biasa yang saya selesaikan dengan meminta bantuan LLM
- Misalnya, baru-baru ini saya harus melakukan disassembly pada program Python yang ditulis untuk Python 3.9
- Sebagian besar disassembler Python hanya bekerja sampai versi sebelum Python 3.7 dan tidak bisa dijalankan pada biner 3.9
- Disassembly bukan pekerjaan yang benar-benar sulit. Sebagian besar hanya soal mengikuti goto untuk merekonstruksi control flow tanpa membuat kesalahan
- Daripada menghabiskan waktu mengonversi ribuan op-code secara manual untuk ratusan baris kode, saya meminta LLM melakukannya sebagai gantinya
- Dan hasilnya benar-benar sangat bagus! Jauh, jauh lebih baik daripada yang saya kira mungkin
- Contoh lain adalah ketika saya harus mengambil data tidak terstruktur dan memformatnya ke bentuk terstruktur
- Misalnya, saat mengerjakan suatu proyek saya membutuhkan daftar judul buku beserta nama penulisnya
- Jadi saya mencari data itu secara online dalam format yang tidak terstruktur lalu meminta LLM memformatnya
- Atau baru-baru ini, saat menulis posting blog tentang bagaimana saya menembus suatu pertahanan, saya ingin menampilkan diff lengkap dari kode yang harus saya ubah
- Jadi saya menempelkan (1) diff dan (2) contoh sebelumnya tentang cara mengubah diff menjadi HTML, lalu meminta LLM menyajikan diff ini dalam format sebelumnya
- Contoh lain, sebagai bagian dari pekerjaan saya, saya sering perlu membuat sitasi untuk sumber yang kerap saya gunakan
- Google Scholar memudahkan hal ini untuk makalah, dan saya tinggal menyalin-tempel sitasinya
- Namun, mengutip halaman web agak merepotkan
- Belakangan ini saya sering meminta LLM membuat sitasinya. (Untuk memperjelas, saya memeriksa apakah hasilnya akurat!)
- Saya bisa memberi setidaknya 100 contoh lagi seperti ini. Namun, saya rasa intinya sudah jelas
- Saya sangat paham bahwa ini adalah jenis pekerjaan yang bisa membuat seseorang melihatnya dan berkata, "Cuma itu??"
- Namun, perlu diingat bahwa bahkan 5 tahun lalu, mereka paling banter hanya bisa merangkai paragraf yang konsisten, bukan menyelesaikan keseluruhan masalah
Menjadikan semua pengguna sebagai "power user"
- Jika Anda pernah melihat seseorang yang jauh kurang mahir daripada Anda menggunakan suatu alat, itu bisa terasa agak menyakitkan
- Anda mungkin melihat mereka menghabiskan beberapa menit, bahkan kadang beberapa jam, untuk tugas yang sebenarnya bisa diotomatisasi dengan penggunaan macro atau aplikasi paralel yang cerdas
- Namun, mempelajari mantra yang diperlukan untuk melakukan itu butuh waktu dan sulit
- Misalnya, baru-baru ini saya ingin menulis program Python yang menangani input keyboard dari keyboard Apple Lisa
- Saya menemukan seseorang online yang menulis sesuatu dalam C untuk melakukan ini, dan ada banyak baris seperti
#define KEYNAME key_code
- Saya ingin mengubahnya menjadi dictionary Python yang memetakan kode bilangan bulat ke string yang sesuai
- Saya pengguna Emacs. Saya tahu bagaimana menyelesaikan masalah ini di Emacs. Seharusnya tidak terlalu sulit. Berikut adalah tangkapan tombol utama yang baru saja saya rekam yang bisa menghasilkan efek ini:
C-h C-s #def [enter] M-f [delete] C-d M-f C-[space] M-f C-w C-a C-y : " M-f ", C-g C-] } C-[ {
- Bagi saya ini hampir terasa alami, tetapi agar ini terasa alami, saya menghabiskan lebih dari setengah hidup saya untuk menjadi cukup terbiasa dengan Emacs. Namun sekarang, jika LLM terhubung ke editor, apa yang akan saya ketik?
C-h C-h rewrite these #defines to a dictionary of {keycode: string, ...}
- Lalu tiba-tiba teks itu ditulis ulang di depan mata saya!
- Dalam kasus seperti ini, saya rasa kegunaan potensial LLM lebih tinggi bagi non-ahli daripada bagi ahli
- Model menaikkan standar untuk semua orang, dan jika sebelumnya mereka sama sekali tidak bisa melakukan sesuatu, tiba-tiba mereka bisa melakukan jauh lebih banyak
Menggunakannya sebagai referensi API
- Programmer sejati membaca manual referensi ketika ingin tahu cara kerja suatu alat
- Namun saya programmer yang malas, jadi saya hanya ingin jawabannya langsung disuapkan kepada saya
- Jadi sekarang saya bertanya kepada language model
- Ketika menunjukkan contoh seperti ini, beberapa orang bereaksi defensif dan berkata, "Tidak ada satu pun yang dilakukan LLM yang tidak bisa Anda lakukan dengan alat yang sudah Anda miliki!"
- Dan mereka benar
- Namun tidak ada yang bisa Anda lakukan dengan mesin pencari yang tidak bisa dilakukan dengan buku fisik, dan tidak ada yang bisa Anda lakukan dengan buku fisik yang tidak bisa dilakukan dengan membaca source code
- Namun masing-masing hal ini, pada gilirannya, menjadi lebih mudah daripada yang sebelumnya
- Dan ketika sesuatu menjadi lebih mudah, Anda akan melakukannya lebih sering, dengan cara yang secara kualitatif berbeda.
- Contoh-contoh beserta prompt-nya
- Saya bertanya, "Di Bash, $ yang mana yang memberikan semua argumen yang tersisa" dan mendapatkan jawabannya. (Lalu segera diikuti pertanyaan lain, "bagaimana cara memakai ini"!)
- Atau ketika saya ingin tahu cara membuat teks menjadi merah di LaTeX, saya tidak lagi mencari atau membaca dokumentasi, melainkan bertanya pada model
- Dan saya melakukan hal yang sama ketika ingin tahu perintah LLDB yang setara dengan berbagai perintah GDB
- Atau ketika ingin tahu bagaimana beberapa perintah find bekerja
- Juga cara menggunakan lpr
- Juga cara melakukan rebinding pada perintah LaTeX
- Sebenarnya, ini adalah salah satu cara saya paling sering menggunakan LLM
- Satu-satunya alasan saya tidak bisa merangkai ribuan contoh lain seperti ini adalah karena baik Emacs maupun shell saya sama-sama punya alat bawaan untuk melakukan query ke LLM
- Jadi dalam 90% kasus, ketika saya ingin melakukan salah satu hal seperti ini, saya bahkan tidak perlu meninggalkan editor
Mencari hal-hal yang sulit ditemukan
- Mencari konten di internet dulu adalah keterampilan yang dipelajari dengan susah payah
- Kata spesifik apa yang ingin dimasukkan ke dalam kueri? Haruskah berbentuk jamak? Tunggal? Bentuk lampau?
- Kata apa yang ingin saya hindari agar tidak muncul di halaman? Apakah saya ingin X AND Y, atau X OR Y?
- Sekarang tidak lagi seperti itu
- Saya bahkan tidak ingat kapan terakhir kali menulis kueri dengan OR di Google
- Saya juga tidak ingat kapan terakhir kali memakai tanda minus (-) untuk menyingkirkan subset hasil
- Di kebanyakan kasus saat ini, saya cukup menuliskan apa yang ingin dicari dan mesin pencari akan menemukannya.
- Namun mesin pencari tetap belum menjadi kueri bahasa alami 100%
- Rasanya masih seperti memainkan permainan Reverse-Jeopardy, mencoba memakai kata kunci yang akan digunakan dalam jawabannya, bukan dalam pertanyaannya
- Ini adalah keterampilan yang hampir semua dari kita pelajari lalu lupa bahwa kita pernah mempelajarinya
- Model bahasa saat ini memang lebih baik untuk beberapa tugas sederhana tertentu, dan jumlahnya terus bertambah seiring waktu
- Saya cukup mengetik seperti, "jadi + setara dengan
add, lalu yang ~ itu apa" dan model akan memberi tahu bahwa jawabannya adalah inv
- Ini adalah hal yang sangat sulit dicari lewat mesin pencari standar
- Saya tahu ada cara untuk menemukan jawabannya
- Mungkin saya bisa mengetik "python documentation metaclass
add" lalu mencari ~ di halamannya untuk mendapatkan jawabannya
- Tetapi efektif juga untuk langsung menanyakan pertanyaan yang saya miliki kepada LLM
- Melakukan ini mungkin hanya menghemat beberapa detik dalam sekali jalan, tetapi saat saya sedang menyelesaikan suatu tugas coding dan pada saat yang sama sudah mencoba menangani sejuta hal lain, bisa sekadar menuangkan apa yang sedang ingin saya pecahkan dan mendapatkan jawaban yang koheren itu terasa luar biasa
- Bukan berarti mereka sudah sempurna untuk pekerjaan ini saat ini
- Model bahasa hanya tahu hal-hal yang cukup sering diulang di internet
- Arti dari "cukup sering" berbeda-beda tergantung modelnya, jadi saya tetap harus menghabiskan beberapa siklus mental untuk memikirkan apakah sebaiknya bertanya ke model atau ke internet
- Namun model akan terus membaik
- Atau, setiap kali terjadi kegagalan acak, saya akan menumpahkan apa yang saya lihat ke model dan meminta penjelasan
- Di sini saya mengetik "Remote wildcard transfer issue" untuk melakukan itu
- Sebagai contoh yang sama sekali berbeda, tahun lalu saat menulis sebuah posting blog saya ingin huruf pertama dari kata pertama dibuat besar dan sisa teks membungkus di sekelilingnya
- Ini disebut drop cap. Tetapi saat itu saya tidak tahu
- Saya hanya tahu efek yang saya inginkan, jadi saya bertanya kepada model bahasa, "saya ingin ini terlihat seperti buku keren dengan teks membungkus di sekitar O," dan model memberikan persis apa yang saya inginkan
- Ini juga termasuk ke dalam kategori "saya melakukannya hanya karena ada LLM"
- Saya mungkin tidak akan menganggap layak menghabiskan banyak waktu untuk mencari tahu cara melakukannya
- Tetapi karena saya bisa bertanya ke model, saya jadi melakukannya, dan itu membuat posting saya sedikit lebih keren
Menyelesaikan tugas sekali pakai
- Ada dua jenis program
- Pertama, ada program yang ingin saya buat dengan benar. Program-program ini akan ada untuk beberapa waktu dan perlu dipelihara selama bertahun-tahun, jadi kerapian itu penting
- Kedua, ada program yang hanya akan ada selama 25 detik. Program-program ini membantu menyelesaikan suatu tugas lalu langsung dibuang
- Dalam kasus seperti ini, ketika program benar-benar berdiri sendiri dan saya sama sekali tidak peduli pada kualitas kodenya, sekarang saya hampir selalu menulisnya dengan LLM
- Peringatan: sebagian besar kasus ini juga termasuk hal-hal yang mungkin membuat orang berkata, "cuma itu?"
- Tetapi seperti yang saya katakan sebelumnya, waktu yang bisa diinvestasikan dalam satu hari untuk proyek tertentu itu terbatas
- Dan jika saya bisa menghemat waktu dan energi mental untuk menulis program yang tidak akan pernah dipakai lagi, saya akan melakukannya
- Contoh yang paling umum mungkin adalah membantu membuat plot untuk memvisualisasikan data yang saya hasilkan dari suatu eksperimen penelitian
- Saya punya puluhan contoh seperti ini. Mungkin lebih dekat ke 100 daripada 0. Semuanya pada dasarnya tampak sama, jadi saya hanya menuliskan satu di sini
- Contoh serupa lainnya adalah ketika saya memiliki data dalam satu format dan ingin mengubahnya ke format lain
- Biasanya ini hanya perlu dilakukan sekali, dan setelah selesai skrip hasilnya dibuang
- Jika skrip yang saya inginkan cukup sederhana, saya sering meminta LLM menulis seluruhnya
- Misalnya, di sini saya meminta LLM menulis skrip yang membacakan makalah dengan suara keras agar saya bisa memeriksa apakah tidak ada masalah tata bahasa yang bodoh
- Dalam kebanyakan kasus, ketika saya belum benar-benar tahu apa yang saya inginkan, saya mulai dengan meminta kode awal dari model lalu mengiterasikannya dari situ
- Misalnya, di sini ada tugas sekali pakai untuk memproses data dengan cepat
- Pada tahun 2022, saya mungkin akan menghabiskan 2 menit menulis ini dalam Python lalu menunggu berjam-jam sampai programnya selesai berjalan karena itu hanya akan dijalankan sekali
- Mengoptimalkannya akan memakan waktu lebih lama daripada waktu jalan program Python tersebut
- Tetapi sekarang? Saya yakin saya akan menghabiskan 2 menit yang sama untuk meminta kode Rust yang memproses data saya
- Atau ada contoh lain ketika saya meminta model mengunduh dataset dan melakukan pemrosesan awal
- Apakah itu mudah saya lakukan sendiri? Mungkin iya
- Tetapi ini bukan pekerjaan yang ingin saya pikirkan
- Saya ingin memikirkan penelitian yang akan saya lakukan dengan dataset itu
- Menghilangkan distraksi sangat berharga, jauh melebihi beberapa menit yang dihemat
- Di lain waktu saya sedang menulis program agar bisa mencetak 3D gambar yang dipikselkan menjadi kubus-kubus kecil
- Untuk itu saya ingin mengubah PNG menjadi file STL, tetapi itu bukan inti proyeknya
- Itu hanya sesuatu yang perlu terjadi di tengah proses. Jadi saya meminta LLM untuk membereskannya
- Contoh lainnya, baru-baru ini saya ingin menyiapkan proyek baru menggunakan Docker Compose
- Ada masalah yang muncul, dan bagaimanapun caranya saya hanya ingin membuatnya berjalan dulu; saya akan mencari tahu nanti apa yang salah
- Jadi pada akhirnya saya bolak-balik beberapa kali hanya dengan menyalin pesan error satu per satu, dan akhirnya mendapatkan solusi yang berfungsi.
- Juga, dalam banyak kasus saya mendapati diri saya memulai dengan meminta solusi lengkap lalu meminta petunjuk tentang cara memodifikasinya
- Di percakapan ini saya mulai dengan meminta program untuk mem-parsing HTML, lalu dari situ meminta referensi API atau petunjuk untuk memperbaikinya
- Di waktu lain saya ingin melacak seberapa banyak memori dan CPU yang digunakan komputer seiring waktu
- Saya mungkin bisa saja menghabiskan beberapa menit mencari perintah yang tepat dan membungkusnya menjadi skrip yang melakukan apa yang saya inginkan, tetapi saya cukup meminta model bahasa melakukannya untuk saya
- Baru-baru ini saya sedang mencoba membuat sedikit perangkat elektronik, dan saya punya program C yang berjalan di Arduino tetapi ingin menjalankannya di Raspberry Pi Pico dengan MicroPython
- Tidak ada bagian menarik dalam proses konversi ini. Itu hanya perlu diselesaikan
- Jadi alih-alih mengerjakannya sendiri, saya meminta model bahasa melakukannya untuk saya
- Untuk proyek lain, saya perlu mengklasifikasikan beberapa gambar dengan model ML yang rapi dalam semacam loop interaktif
- Saya bisa saja menulisnya sendiri, tetapi saya juga bisa meminta model untuk melakukannya untuk saya
Menjelaskan sesuatu kepada saya
- Saya belakangan ini mulai tertarik pada perangkat elektronik
- Waktu kecil saya pernah berkutat dengan perangkat elektronik dan mengambil beberapa mata kuliah terkait di universitas
- Tetapi sekarang ketika benar-benar mencoba mengerjakan proyek nyata, sulit melakukan apa pun karena ada ribuan hal kecil yang tidak saya ketahui
- Saya bisa saja membaca buku elektronika praktis, dan dengan begitu mungkin bisa memahami topik itu dengan baik, tetapi saya tidak ingin menghabiskan waktu seperti sedang belajar
- Setengah alasan saya mengerjakan perangkat elektronik adalah untuk beristirahat dari membaca dan menulis makalah sepanjang hari
- Hal yang bagus dari LLM di sini adalah, meskipun tidak seberpengetahuan orang paling ahli di dunia, ada ribuan, bahkan jutaan orang yang tahu jawaban atas pertanyaan seputar perangkat elektronik yang mungkin saya punya
- Jadi model bahasa kemungkinan juga tahu jawabannya
- Dan karena ia dengan senang hati menjawab semua pertanyaan, saya bisa menikmati bagian yang menyenangkan tanpa bergulat dengan detail-detailnya
- Dan kalau saya mencari di internet, saya mungkin bisa mendapatkan jawabannya dengan sedikit usaha tambahan, tetapi setelah seharian bekerja dengan kode riset yang rumit, kenyamanan karena cukup meminta model terasa sangat menenangkan
- Jadi, berikut kumpulan contoh saat saya mengajukan pertanyaan dasar kepada model bahasa tentang cara kerja perangkat elektronik
- Apakah jawaban-jawaban ini sempurna? Siapa yang tahu
- Tetapi apakah ini lebih baik daripada tidak tahu apa-apa?
- (Tulisan ini sudah cukup panjang, dan pada titik ini saya mungkin sama lelahnya menulis seperti Anda lelah membacanya. Jadi saya akan meninggalkan contoh-contoh ini tanpa penjelasan tambahan.)
- Pertanyaan dasar tentang desain PCB
- Pertanyaan dasar tentang penyolderan
- Pertanyaan dasar tentang kapasitor
- Pertanyaan dasar tentang LED
- Pertanyaan dasar tentang floppy disk
- Saya bisa teruskan, tetapi saya rasa Anda sudah menangkap intinya
Menyelesaikan pekerjaan dengan solusi yang sudah dikenal
- Hampir semua hal pada dasarnya sudah pernah dikerjakan seseorang
- Hampir tidak ada hal yang benar-benar baru yang ingin saya lakukan
- Dan model bahasa sangat unggul dalam memberikan solusi untuk hal-hal yang pernah dilihat sebelumnya
- Dalam proyek baru-baru ini, saya perlu meningkatkan performa sebagian kode Python
- (1) Saya meminta LLM menulis ulangnya dalam C, lalu
- (2) meminta dibuatkan antarmuka agar kode C itu bisa dipanggil dari Python
- Tugas-tugas ini sebenarnya tidak “sulit”
- Mengubah dari Python ke C mungkin bisa saya lakukan dalam 1–2 jam
- Dan meskipun saya tidak tahu persis bagaimana API Python->C bekerja, saya bisa memahaminya dengan membaca dokumentasi
- Tetapi kalau harus mengerjakannya sendiri, saya tidak akan pernah melakukannya
- Karena itu bukan jalur yang penting, jadi lebih baik menunggu dan membiarkan komputer menyelesaikannya daripada menghabiskan waktu mempercepat hal-hal yang tidak perlu sering dijalankan
- Tetapi untuk program sederhana, mengubah Python ke C adalah proses yang (sebagian besar) mekanis, dan ada tepat satu konvensi pemanggilan standar Python->C
- Jadi saya tinggal meminta LLM melakukannya untuk saya.
- Sejak itu saya jadi berharap ini memang sesuatu yang bisa saya lakukan, dan pada dasarnya setiap kali saya membutuhkan potongan kode yang cepat, saya tinggal menjelaskan dalam Python apa yang saya inginkan lalu meminta C yang dioptimalkan
- Di waktu lain saya melakukan hal yang sama, tetapi meminta output Rust alih-alih C jika saya merasa akan lebih mudah menilai kebenaran output Rust dengan membandingkannya dengan output C
- Contoh lain, memparalelkan fungsi Python menggunakan pustaka multiprocessing tidaklah sulit
- Anda perlu menulis sedikit boilerplate dan pada dasarnya itu langsung jalan
- Tetapi menulis kodenya agak menyebalkan, dan mengganggu pekerjaan yang sebenarnya ingin dilakukan
- Sekarang setiap kali saya membutuhkan itu, saya tinggal meminta LLM melakukannya
- Atau sering kali saat menguji suatu API, pada awalnya saya hanya menulis permintaan curl agar semuanya mulai berjalan
- Dan setelah itu berhasil dan saya ingin mengulang pekerjaan itu secara terprogram, saya mengubahnya ke Python
- Sebelumnya saya biasanya melakukan hal yang benar-benar jelek dan cukup memanggil os.popen() lalu menjalankan perintah curl, dan ini tidak bagus
- Akan lebih baik mengubahnya ke pustaka Python requests. Tetapi itu butuh waktu, jadi saya tidak akan melakukannya
- Namun sekarang saya tinggal meminta LLM melakukannya, dan saya bisa mendapatkan program yang lebih bersih dengan lebih cepat
- Atau untuk proyek mendatang yang mungkin akan saya bahas di sini, saya perlu tahu jenis hal apa yang digunakan orang dengan pemancar nirkabel sederhana
- LLM adalah pilihan yang sempurna, karena yang benar-benar saya inginkan adalah jawaban manusia median!
Memperbaiki kesalahan umum
- Sebelum 2022, jika saya mendapat pesan kesalahan dari beberapa alat atau pustaka terkenal, saya mengikuti protokol seperti ini:
- Salin pesan kesalahan
- Tempel ke Google
- Klik tautan Stack Overflow teratas
- Periksa apakah pertanyaannya memang yang ingin saya tanyakan; jika tidak, kembali ke 2
- Terapkan solusi teratas pada pekerjaan saya
- Jika tidak berhasil, kembali ke 2, ubah kata kunci pencarian, berdoa, dan seterusnya
- Sejujurnya, alat yang rusak itu biasanya berjarak sekitar 5 langkah dari tugas yang sebenarnya ingin saya selesaikan, dan saya benar-benar tidak peduli bagaimana cara kerjanya; yang penting cukup berjalan
- Bagaimana dengan tahun 2024 sekarang?
- Salin pesan kesalahan
- Tanyakan ke LLM, “bagaimana cara memperbaiki error ini? [error]”
- Terapkan solusi langkah demi langkah yang disarankan LLM
- Jika tidak berhasil, katakan “itu tidak berhasil”
- Saya tidak punya salinan untuk ditunjukkan sebagai contoh. (Atau saya tidak bisa menemukannya meski sudah mencari selama satu jam.) Tetapi ada alasan bagus untuk itu: saya sudah menanamkannya langsung ke dalam alur kerja saya
- Saya pengguna Emacs
- Saya sudah menyiapkan lingkungan agar setiap kali menjalankan program dan program itu keluar dengan status code bukan nol (artinya ada masalah), sistem otomatis memanggil LLM tercepat terbaik terbaru untuk meminta penjelasan atas jawabannya, dan sekaligus meminta patch yang bisa langsung saya terapkan untuk memperbaiki bug di kode
- Model-model saat ini memang masih belum cukup bagus untuk mengalahkan penulis dalam tugas ini dalam kebanyakan kasus, tetapi mereka makin mendekati
- Dan sesekali, ketika LLM memperbaiki bug yang ternyata hanya typo di suatu tempat dan saya tahu bug itu akan menjadi mimpi buruk untuk dilacak, itu jadi kejutan yang menyenangkan
Ringkasan
- Semua percakapan yang saya tautkan di atas mencakup kurang dari 2% dari seluruh percakapan saya dengan LLM selama setahun terakhir
- Alasan saya tidak menautkan percakapan-percakapan lain bukan karena model tersebut gagal dalam kasus-kasus itu (meskipun tentu saja ada banyak kasus seperti itu), melainkan karena
- (1) hanya mengulang pola yang sama seperti percakapan yang sudah saya tautkan, atau
- (2) tidak mudah menjelaskan apa yang sedang terjadi dan sulit melihat sendiri mengapa itu berguna
- Saya memperkirakan penggunaan model-model ini akan terus meningkat ke depannya
- Sebagai catatan, pada 2024 saya melakukan 30% lebih banyak kueri LLM melalui antarmuka web dibandingkan 2023, dan kenaikan kueri API tidak bisa saya agregasikan, tetapi saya kira setidaknya meningkat sekitar 2 hingga 3 kali lipat
Menilai bukan dari hal yang tidak bisa dilakukan LLM, melainkan dari hal yang bisa dilakukannya
- Saat menilai kandidat dalam wawancara, kita perlu lebih memperhatikan apa yang bisa mereka lakukan daripada apa yang tidak bisa mereka lakukan
- Jika diberi pertanyaan sepele, LLM bisa terlihat tidak kompeten. Misalnya, jika ditanya dalam bahasa Mandarin yang digunakan 1 miliar orang, LLM mungkin akan kesulitan menjawab dengan benar
- Bahkan dalam ilmu komputer pun ada banyak bidang yang tidak saya kuasai, misalnya hanya mengetahui sebatas pernyataan
SELECT di SQL
- Sulit memahami klaim di internet yang menyebut LLM terlalu dibesar-besarkan hanya karena tidak bisa melakukan task tertentu
- Tidak bisa menghitung jumlah kata dalam kalimat
- Tidak bisa menulis puisi yang semua katanya diawali huruf 'a'
- Tidak bisa mengalikan bilangan dua digit
- Tidak bisa memilih elemen acak dari sebuah daftar
- Namun saya meragukan apakah orang benar-benar pernah menganggap LLM sebagai alat yang tepat untuk melakukan hal-hal seperti itu
- Sama seperti kita tidak menyebut manusia tidak berguna hanya karena tidak bisa membagi bilangan bulat 64-bit di dalam kepala, tidak tepat meremehkan LLM hanya karena kita bisa menyusun masalah yang tidak bisa diselesaikannya
- Yang penting adalah apakah ada task di mana LLM bisa memberikan nilai
- Para programmer sudah sangat paham bahwa bahasa yang berbeda berguna untuk tujuan yang berbeda
- Untuk menulis sistem operasi, C lebih cocok daripada Python
- Kita tidak mengatakan Python tidak berguna hanya karena tidak bisa meratakan variabel ke batas 32 byte. Itu hanya soal tingkat abstraksi yang berbeda
- LLM juga bekerja pada tingkat abstraksi yang sangat tinggi
- Sulit berharap LLM menangani pekerjaan yang bahkan bisa diselesaikan dengan program sederhana
- Namun masuk akal untuk berharap LLM bisa menyelesaikan jenis pekerjaan yang berbeda
Kesimpulan
- Dua motivasi menulis artikel ini
- Untuk menegaskan bahwa LLM secara pribadi sudah memberikan banyak nilai bagi saya
- Untuk menunjukkan contoh pemanfaatan bagi orang-orang yang merasa ide LLM bagus tetapi tidak tahu bagaimana itu bisa membantu mereka
- Nilai LLM
- LLM memang tidak bisa melakukan semuanya, tetapi bahkan model saat ini pun sudah memberikan nilai yang cukup besar
- Misalnya, LLM bisa membantu mendiagnosis error CUDA dan memberi tahu cara memasang ulang paket, menulis ulang program dalam C, atau mengajarkan topik tertentu
- Ini adalah hal-hal yang bisa dilakukan mahasiswa jika diberi waktu beberapa jam, tetapi tidak ada mahasiswa yang selalu siap menjawab pertanyaan kapan saja. Sebaliknya, LLM bisa
- Perkembangan LLM dan situasi saat ini
- Bahkan 5 tahun lalu, kemampuan terbaik LLM hanyalah menulis paragraf bahasa Inggris yang tampak meyakinkan, dan nyaris tidak punya kegunaan praktis
- Namun saat ini, LLM meningkatkan produktivitas pekerjaan pemrograman setidaknya 50% dan menghilangkan pekerjaan yang membosankan
- Berkat LLM, saya juga berhasil menyelesaikan beberapa proyek yang sebelumnya tidak akan saya coba
- Sanggahan terhadap kritik soal kegunaan LLM
- Saya tidak setuju dengan klaim bahwa "LLM terlalu dibesar-besarkan dan tidak punya nilai nyata"
- Secara pribadi, LLM memberi saya nilai yang besar
- Bahkan saya yang punya 20 tahun pengalaman pemrograman pun produktivitasnya meningkat drastis berkat LLM
- Saya rasa ada banyak orang selain saya yang juga bisa merasakan manfaat dari LLM
- Prospek ke depan
- Bahkan model saat ini saja sudah memberikan banyak nilai
- Selama 5 tahun ke depan, saya merasakan campuran antara antusiasme dan kekhawatiran tentang bagaimana LLM akan berkembang
- Saya berencana membahas prediksi tentang hal itu dalam tulisan berikutnya
7 komentar
Ini tulisan yang mudah untuk disetujui. Penulis memakainya dengan sangat baik sampai rasanya melelahkan untuk dibaca..;
Saya juga sepertinya tidak pernah keluar dari jendela terminal. Rasanya semua developer yang malas mungkin memakainya seperti ini.
Kalau masalahnya sederhana, saya pakai
copilot.vim, lalu cukup buka buffer apa pun dan arahkan jawabannya lewat autocomplete.Kalau tidak ingat perintah shell, ada perintah
copilot-cli ??, jadi tidak perlu mencari lagi.Alat pelengkap kode bahkan sudah memahami maksud saya dan menghasilkan kode sebelum saya sempat bertanya.
Seperti yang dikatakan di artikel, saya tahu harus mencari dengan kata kunci seperti apa, tetapi LLM lebih enak karena saya bisa bertanya dengan bebas tanpa perlu terlalu formal.
Saya juga pakai copilot-vim! Boleh saya tanya, yang Anda maksud dengan copilot-cli itu yang mana?
https://www.npmjs.com/package/@githubnext/github-copilot-cli
adalah ini!
https://docs.github.com/ko/copilot/…
Ada juga versi ekstensi GitHub CLI, tetapi cara penggunaannya sedikit berbeda.
Menyenangkan bisa mendapat bantuan Copilot juga di command line, terima kasih!
Saat saya tahu cara membuatnya tapi malas mengetik, saya menyuruh ChatGPT yang mengerjakannya.
Menurut saya, agar bisa memakainya dengan baik, kita harus tahu cara meninjau hasilnya.
Penulis menekankan kegunaan LLM dalam 1. membantu pembelajaran 2. mengotomatiskan pekerjaan yang membosankan.
Akhir-akhir ini, buat saya juga persis begitu. Kalau dipikir-pikir dari hal-hal yang belakangan saya kerjakan:
Tentu ini semua tetap bisa dilakukan tanpa LLM, tapi karena tinggal menyuruhnya saja jauh lebih cepat, jadi sangat pas untuk keperluan life hacking.
Banyak yang terasa relevan.
Ini mirip dengan yang saya rasakan saat menggunakan AI.