Apa yang berubah dengan model yang lebih kuat?
Sejak Agustus 2026, saya telah mengeksplorasi seberapa banyak rekayasa balik yang dapat dilakukan agen dengan akses ke suatu program dan cara untuk memeriksa kerjanya. Sebagian besar pengalaman saya berasal dari merekonstruksi game, terutama Touhou. Karena saya telah mengubah model, repositori menyimpan catatan tentang apa yang berhasil dipulihkan oleh setiap sesi.
Sebagian besar pekerjaan tersebut bertujuan untuk rekonstruksi yang tepat: kami mengkompilasi sumber yang dikelola di bawah rantai alat historis dengan versi tetap dan memeriksa apakah sumber tersebut mereproduksi fungsi target. Ketika model selanjutnya berhasil ketika pekerjaan sebelumnya terhenti, perubahan sumber menunjukkan apa yang memungkinkan kemajuan tersebut.
Variabel sementara membutuhkan masa hidup yang tumpang tindih
Sebagian besar logika fungsi serangan TH09 telah direkonstruksi, namun kompiler masih menyimpan hasil sementara yang berbeda dari aslinya. Masalah yang tersisa adalah berapa lama hasil tersebut perlu bertahan dan kapan penyimpanannya dapat digunakan kembali.
Catatan sesi GPT-6-Sol melaporkan ketidakcocokan ini setelah menguji beberapa pengaturan kode sumber biasa. Ketika GPT-6.1-Sol memeriksa masalahnya lagi, ia mengajukan hipotesis yang berguna tentang masa hidup variabel-variabel sementara ini.
Fungsi tersebut memberikan hasil sementara dan menyalinnya ke posisi animasi. Di C++, hasil sementara tetap aktif hingga ekspresi yang menggunakannya selesai. Mengelompokkan operasi nyata ke dalam satu ekspresi membuat hasil tersebut tetap hidup, sehingga kompiler tidak dapat lagi menggunakan penyimpanan yang sama untuk semuanya.
Salah satu hasil masih berbagi penyimpanan dengan nilai yang nantinya digunakan untuk pemeriksaan tabrakan. Memberikan nilai tersebut seumur hidupnya akan menyelesaikan sisa tumpang tindih. Setelah beberapa eksperimen yang ditargetkan, kompilasi ulang yang bersih dari sumber mengonfirmasi bahwa seluruh fungsi cocok.
Saya tertarik pada bagaimana penemuan dan pengujian saling mendukung. Hipotesis tentang masa hidup objek yang bersifat sementara memberikan arah baru bagi agen AI. Umpan balik dari kompiler membantunya menyempurnakan hipotesis tersebut menjadi susunan kode sumber yang cocok.
Grafik aliran kontrol yang berbeda
Fungsi TH09 kedua menunjukkan mengapa arah baru itu penting. Di sini kendalanya adalah bagaimana beberapa cabang membagikan karya akhirnya. Pekerjaan sebelumnya GPT-6.1-Sol memiliki bagian-bagian fungsi yang cocok, namun cabang-cabangnya masih digabungkan secara berbeda dari aslinya.
GPT-6-Astra mengubah grafik aliran kontrol di sekitarnya. Jalur utama sekarang mengarah ke pembaruan akhir bersama dan kembalinya. Dalam struktur sumber tersebut, kompiler menggabungkan cabang-cabang dengan cara yang sama seperti aslinya. Fungsi keseluruhannya cocok, dan pemeriksaan pembangunan kembali secara terpisah mengonfirmasi hal tersebut.
Mengubah representasi membuka ruang pencarian yang lebih produktif. Kedua kasus tersebut memberi saya alasan untuk menganggap serius kemampuan model umum: agen dapat terus mencoba variasi lokal untuk waktu yang lama sebelum menemukan cara yang lebih baik untuk mengekspresikan pekerjaan di sekitarnya.
Pada saat yang sama, sesi selanjutnya dimulai dengan sumber sebelumnya dan mencatat kegagalan. Akumulasi pekerjaan itu adalah bagian dari keuntungan mereka. Sejarah memungkinkan kita memeriksa penemuan-penemuan dan pemeriksaannya; perbandingan terkontrol akan membantu memisahkan pengaruh model dari pengalaman yang diwarisinya.
Inilah yang membuat pertanyaan ini menarik bagi saya. Beberapa kemajuan datang dari penemuan representasi baru. Sebagian besar pekerjaan yang tersisa melibatkan pengujian pengaturan kode sumber yang berbeda terhadap kompiler yang sudah dikenal. Seberapa banyak hal ini memerlukan kemampuan penalaran yang luas? Berapa banyak yang dapat dipelajari suatu model dengan bekerja berulang kali menggunakan compiler dan kode tersebut?
Mengapa model AI khusus dapat berfungsi dengan baik?
Touhou memberi kita alasan konkret untuk mengharapkan pengalaman itu membantu. Sebagian besar kode permainan berasal dari penulis yang sama, ZUN, jadi kebiasaan berulang adalah asumsi awal yang masuk akal. Repositori mendukung hal tersebut dengan contoh-contoh yang berguna: loop terkait dan pengaturan pembantu telah memberikan hipotesis di seluruh game.
Pola sumber tersebut menjadi lebih spesifik ketika kita menyertakan kompiler. Dalam versi dan rangkaian opsi tertentu, perubahan kecil pada sumber dapat menghasilkan perbedaan berulang dalam kode mesin. Beberapa dari perbedaan tersebut ternyata tidak jelas.
Di TH095, misalnya, bahkan nama variabel lokal dapat memengaruhi tempat VC7.1 menyimpannya. Memindahkan deklarasinya tidak menyelesaikan tata letak penyimpanan. Namun, fungsi latar belakang sebelumnya telah mengungkapkan pola penamaan yang mempengaruhi pilihan kompiler. Hal ini menunjukkan hipotesis yang lebih menjanjikan untuk merekonstruksi Supervisor::LoadDat.
Menggunakan kembali pola tersebut untuk variabel ukuran file menghasilkan tata letak yang diperlukan tanpa menambahkan penyimpanan. Fungsi penuh kemudian dicocokkan.
Ini adalah detail yang sangat spesifik yang mungkin tidak diketahui oleh model AI tujuan umum saat pertama kali mengalami masalah. Model yang dikhususkan untuk kompiler ini dapat melihat banyak kasus seperti itu dan mempelajari variasi kode sumber mana yang layak untuk diuji terlebih dahulu.
Peluangnya sangat jelas dalam masalah pencocokan akhir dimana kita sudah memahami perilakunya. Kami kemudian menanyakan pengaturan kode sumber biasa mana yang diubah oleh kompiler ini menjadi instruksi yang diamati. Spesialisasi dapat membantu model mengusulkan bentuk-bentuk tersebut dengan lebih efisien, sementara target tetap menentukan hipotesis mana yang bertahan.
Pola yang berguna harus mempertahankan konteksnya. TH08 menggunakan versi Visual C++ yang lebih lama dari TH095 dan TH09. TH04 menggunakan compiler yang berbeda dari era DOS. rekonstruksi kode pemain memerlukan hipotesis berbeda tentang pola kode sumber dan bagaimana kode yang dikompilasi dihubungkan ke dalam file yang dapat dieksekusi. Memiliki penulis yang sama memberi kita ekspektasi awal, namun setiap target memberi tahu kita apakah target tersebut berlaku. Model khusus perlu membedakan konteks-konteks ini.
Di mana pengalaman ini harus disimpan?
Sebelum memutuskan untuk mengajarkan pola-pola tersebut melalui pelatihan model, saya akan melihat pengetahuan yang sudah kita simpan di gudang. Dalam esai sebelumnya, saya menulis tentang hal ini yang menjadi memori kerja proyek. Memori tersebut mencakup pelajaran kompiler, beserta sumbernya dan eksperimen gagal yang menjadikannya berguna.
Dengan mengambil catatan tersebut, agen dapat memulai dengan hasil yang diketahui dan memeriksa bagaimana kami mencapainya. Hal ini juga dapat menghindari alternatif-alternatif yang telah gagal dalam konteks yang sama. Titik awal ditingkatkan tanpa mengubah parameter model yang dilatih.
Saat merekonstruksi fungsi TH09 untuk menciptakan musuh, sesi GPT-6-Luna-max mengambil hipotesis dari kode sumber TH08 terkait. Kode sebelumnya menyarankan cara mengatur loop dan menangani kegagalan di dalamnya. Bukti TH09 sendiri memberikan detail khusus game tersebut. Pembangunan kembali dari sumber mengonfirmasi bahwa fungsi lengkapnya cocok.
"Model tidak mengetahui kekhasan kompiler" dan "model tidak dapat menggunakannya" adalah masalah yang berbeda. Pengambilan mungkin memecahkan masalah pertama, namun mengubah fakta tersebut menjadi kandidat yang berguna masih membutuhkan usaha. Dan jika kandidat kode sumber gagal, model harus memutuskan apa arti hasil tersebut untuk percobaan berikutnya. Mengetahui pola yang relevan hanyalah awal dari proses itu.
Oleh karena itu, saya akan menyertakan model AI serba guna yang lebih kecil dengan pengambilan yang baik dalam perbandingan apa pun. Memberikan perpustakaan pengalaman yang sama akan membantu kami mengidentifikasi apa saja yang ditambahkan oleh pelatihan: perolehan kandidat yang lebih baik, keputusan yang lebih baik setelah adanya masukan, atau keduanya.
Pelajari eksperimen bermanfaat berikutnya
Keputusan-keputusan setelah mendapat masukan adalah hal yang paling ingin saya pelajari. Dalam rekonstruksi agenik, model mengajukan penjelasan dan mengujinya terhadap program. Bahkan ketika kode sumber kandidat gagal, hasilnya dapat mempersempit kemungkinan yang tersisa dan menyarankan percobaan berikutnya yang lebih berguna.
Perhatikan kembali contoh hasil sementara. Sumber akhirnya menunjukkan pengaturan yang berhasil, namun rute ke sumber tersebut berisi lebih banyak informasi. Setiap eksperimen berikut membantu mengidentifikasi apa yang masih perlu diubah.
| Eksperimen | Apa yang diajarkan hasilnya kepada kita |
|---|---|
| Coba cara lain untuk menyalin hasilnya | Kode copynya berubah, tapi fungsinya tetap berbeda. |
| Gunakan nilai yang dikembalikan secara langsung | Penyalinan mengikuti pola aslinya, namun penyimpanan sementara tetap berbeda. |
| Jaga agar semua variabel sementara tetap valid pada waktu yang sama | Mereka mendapatkan penyimpanan terpisah, namun masih tumpang tindih dengan nilai yang digunakan nanti untuk pemeriksaan tabrakan. |
| Pisahkan nilai pemeriksaan tabrakan | Kompilasi ulang yang bersih dari sumber mengonfirmasi kecocokan yang lengkap. |
Eksperimen yang dipilih dari rekonstruksi fungsi serangan di atas, dikelompokkan berdasarkan apa yang diajarkannya kepada kita.
Catatan pelatihan yang menjaga urutan ini dapat mengajarkan lebih dari sekedar sumber akhir saja. Ini menghubungkan setiap perubahan yang diusulkan dengan hasil yang diamati dan keputusan berikutnya. Mempertahankan variasi yang tidak efektif juga penting: variasi tersebut akan memberi tahu agen selanjutnya hipotesis mana yang telah diuji dalam konteks tersebut.
Saya ingin model mempelajari cara menggunakan masukan. Hasil yang netral adalah alasan untuk mempertimbangkan kembali variasi; ketidakcocokan yang berubah mungkin menunjukkan penyebab lain. Ketika suntingan lokal tidak lagi bersifat informatif, agen harus dapat mengunjungi kembali representasi sumber atau memeriksa bukti lagi.
Belajar membuat pilihan tersebut membutuhkan otonomi. Terkadang langkah berikutnya yang berguna adalah memeriksa pemanggil lain daripada mengkompilasi hasil edit lainnya. Urutan penulisan ulang yang diperlukan akan menghilangkan pilihan tersebut, bersama dengan bagian dari perilaku yang kita ingin model pelajari.
Mengapa rekayasa balik menarik untuk pembelajaran penguatan
Rekonstruksi dengan lingkup yang jelas memberi lingkungan praktis untuk mempelajari pilihan ini. Setelah versi target dan kompiler ditetapkan, banyak eksperimen kode sumber memberi umpan balik yang cepat dan dapat diulang. Agen bisa mengompilasi kandidat, memeriksa perbedaan, lalu memilih langkah berikutnya.
Pembelajaran penguatan dapat melatih proses pengambilan keputusan melalui umpan balik yang diterimanya. Kandidat yang diterima melalui pemeriksaan tertentu memberi kita hasil yang konkrit, sementara rangkaian upaya memungkinkan kita mengamati berapa banyak usaha yang diperlukan untuk mencapainya.
Sudah ada penelitian yang mendukung arah ini. LLM4Decompile mempelajari model yang dikhususkan untuk dekompilasi. AutoDecompiler melatih penyempurnaan multi-putaran menggunakan compiler dan masukan eksekusi. Studi mereka fokus pada pemulihan fungsional. Untuk pekerjaan ini, saya akan menggunakannya sebagai titik awal untuk tugas terkait menemukan sumber yang cocok dengan keluaran kompiler historis.
Namun, untuk mencapai tugas yang terdefinisi dengan baik, pertama-tama kita perlu menetapkan sumber daya yang dimiliki suatu fungsi atau merancang cara baru untuk mengamati perilaku program saat berjalan. Di TH08, misalnya, perbedaan tabrakan mengarah kembali ke cara program asli menangani penghitungan floating-point. Sebelum agen dapat menguji koreksi yang berguna, agen harus menentukan apa yang diukur.
Hal ini menunjukkan adanya peran lain dari model yang berkemampuan luas: membantu membuat masalah dapat diperiksa. Setelah pemeriksaan tersebut dilakukan, kami dapat menyelidiki sejauh mana kebijakan penelusuran yang dipelajari dapat diterapkan.
Ketika pemeriksa salah
Saat suatu pemeriksaan dipakai untuk pelatihan, cakupannya menjadi bagian dari lingkungan belajar. Saya menyebut acuan atau alat pemeriksa itu oracle. Bahkan jawaban yang dapat diulang harus dipahami berdasarkan apa yang benar-benar diperiksanya.
TH08 menunjukkan seberapa banyak yang bisa disembunyikan di luar cakupan itu. Beberapa fungsi yang direkonstruksi memberikan perbandingan yang tepat dengan konstanta floating-point yang salah. Pembanding menyesuaikan alamat yang direlokasi sebelum memeriksa instruksi, namun pembanding memeriksa nilai di balik alamat tersebut hanya jika nilai tersebut telah dicatat secara eksplisit untuk verifikasi. Referensi literal lainnya bisa lolos tanpa diperiksa nilainya.
Untuk mengatasi kesenjangan ini, audit yang lebih luas menemukan konstanta yang salah pada fungsi yang telah lolos verifikasi. Dalam satu perhitungan, kode sumber yang direkonstruksi menambahkan 1.0f, sedangkan kode sumber asli menambahkan 32.0f.
Model yang diberi imbalan melalui pemeriksaan verifikasi lama dapat belajar menghasilkan rekonstruksi yang salah. Kami tidak melatih model RL menggunakan pemeriksa tersebut. Kegagalan yang kami amati ada pada pemeriksaan itu sendiri. Namun jika kita menggunakannya sebagai hadiah, titik buta yang sama akan menjadi bagian dari lingkungan belajar.
Tes fungsional dapat memiliki titik buta serupa. Penelitian yang menggunakan fuzzing diferensial pada dekompiler LLM menemukan perbedaan perilaku di luar pengujian yang disediakan. Oleh karena itu, kita perlu memahami tes kelulusan dalam kaitannya dengan kasus-kasus yang dilakukannya. Demikian pula, kecocokan instruksi harus dipahami dalam kaitannya dengan byte dan data yang diverifikasi.
Sebelum menggunakan salah satu jenis cek verifikasi sebagai hadiah, saya akan mengujinya dengan hasil yang sengaja salah. Saya juga akan memisahkan penerimaan akhir dari kode sumber yang dapat diedit oleh agen AI. Model harus lolos verifikasi dengan merekonstruksi program dengan benar. Jika tidak, hanya dengan menyalin array byte dari target dapat menipu sistem penilaian yang naif tanpa memulihkan kode sumber yang berguna.
Memperbaiki model yang belajar dan memperbaiki pemeriksanya merupakan bagian dari masalah penelitian yang sama. Semakin baik model mengoptimalkan umpan balik yang kita berikan, semakin penting memahami umpan balik itu sendiri.
Sebuah perbandingan yang layak untuk dijalankan
Dengan pemeriksaan tersebut, saya akan memulai perbandingan pada rangkaian tugas VC7.1 yang tetap. Pertama, saya akan menetapkan dasar untuk model AI tujuan umum yang kuat dan model yang lebih kecil. Menambahkan pengetahuan repositori ke model yang lebih kecil akan menunjukkan perubahan pengambilan apa. Dari sana, spesialisasi yang diawasi dan versi terlatih RL akan memungkinkan kita memeriksa apa saja yang ditambahkan dalam pelatihan.
Agar perbandingan tersebut informatif, setiap model akan menerima bukti dan alat target yang sama. Untuk perbandingan khusus pelatihan, saya juga akan mempertahankan model dasar dan pengetahuan yang tersedia. Uji coba berulang akan membantu membedakan strategi pencarian yang andal dari kandidat solusi yang berhasil secara kebetulan.
Saya kemudian akan memisahkan dua kondisi awal: merekonstruksi suatu fungsi dari instruksinya, dan menutup beberapa perbedaan terakhir dalam sumber yang dipertahankan. Model AI khusus mungkin sangat baik dalam tugas kedua, sementara model AI tujuan umum melakukan banyak pekerjaan yang diperlukan untuk mencapainya. Mengukurnya secara terpisah akan mengungkapkan pembagian kerja tersebut.
Kedua tugas memerlukan contoh uji yang tidak ada dalam data pelatihan maupun bahan retrieval. Game Touhou yang terkait berbagi kode engine. Mengecualikan satu game saja masih bisa menyisakan fungsi yang hampir identik dalam data pelatihan. Saya akan menyisihkan seluruh kelompok kode yang terkait, dan memastikan jawaban terverifikasinya tidak masuk ke data pelatihan ataupun pustaka retrieval.
Untuk contoh-contoh ini, hasilnya akan berupa kecocokan yang lengkap dan terverifikasi secara independen. Anggaran yang sama untuk proposal kandidat atau upaya kompilasi akan membantu membandingkan kualitas pencarian. Mengukur total waktu dan biaya, termasuk kompilasi, akan menunjukkan apakah kualitas tersebut menghasilkan alur kerja yang efisien. Biaya pelatihan harus diukur secara terpisah.
Kedua pengukuran itu penting. Proposal yang murah dapat menyebabkan alur kerja yang mahal jika menyebabkan lebih banyak kompilasi yang tidak memberikan informasi berguna. Sebaliknya, model yang lebih lambat mungkin lebih ekonomis jika model tersebut menemukan eksperimen yang berguna lebih cepat. Perbandingannya harus mencakup biaya-biaya ini.
Menghitung hasil yang diterima juga menjaga kemajuan sementara tetap dalam perspektif. Salah satu TH09 kandidat penyimpanan ulang tampak menjanjikan karena fungsi yang dikompilasi memiliki ukuran yang diharapkan, namun perbandingan penuh masih menemukan perbedaan besar. Perubahan dalam cara compiler menyusun instruksi juga dapat membuat kandidat tampak lebih dekat dengan target tanpa menyelesaikan masalah mendasarnya. Diagnostik semacam itu dapat memandu eksperimen berikutnya, namun saya akan memvalidasi imbalan apa pun karena "mendekati" dengan pemeriksaan penerimaan penuh.
Saya tertarik dengan pola hasil ini. Jika model AI khusus dapat berfungsi dengan baik dalam rangkaian kompiler yang sudah dikenal, apakah keunggulan tersebut dapat bertahan jika terjadi perubahan rantai alat? Dan ketika kedua model AI memiliki pengambilan yang baik, berapa banyak lagi yang bisa ditambahkan oleh pelatihan? Jawabannya akan membantu kita memutuskan model mana yang paling berguna.
Agen AI macam apa yang disarankan di sini?
Jika model-model tersebut terbukti membantu pada tahap-tahap yang berbeda, pengaturan yang berguna mungkin adalah agen luas yang memiliki akses ke model AI khusus. Setelah tugas menjadi pencarian kompiler yang familier, tugas tersebut dapat menanyakan kandidat pada model AI khusus. Jika hasilnya tidak masuk akal, agen yang lebih luas dapat kembali ke bukti target atau menyelidiki pengukuran itu sendiri.
Dalam pengaturan tersebut, spesialisasi menjadi alat yang dapat dipilih agen seiring berkembangnya penyelidikan. Agen mempunyai kebebasan untuk mengubah arah yang memungkinkan terobosan sebelumnya.
Hal ini tentu saja mengikuti pergeseran industri yang saya jelaskan di esai sebelumnya. Mampu menjalankan lebih banyak eksperimen mengubah cara kami mengatur pekerjaan. Hal ini juga memberi kita alasan untuk mempertanyakan keputusan mana yang memerlukan pertimbangan luas dan mana yang ditingkatkan melalui pengalaman berulang-ulang dengan bidang tertentu.
Untuk saat ini, model umum terkuat mendapat tempat dalam alur kerja saya karena menyelesaikan masalah yang sebelumnya belum terpecahkan. Keberhasilan itu membuat saya ingin mempelajari prosesnya: seberapa banyak bergantung pada keluasan kemampuan model, dan seberapa banyak bisa dikerjakan oleh model yang dilatih khusus untuk jenis rekonstruksi ini?
Repositori memberi kita cara untuk menguji pertanyaan tersebut. Saya ingin menggunakan data tersebut untuk membuat perbandingan dan melihat apa yang kita pelajari.
Bukti dan atribusi model
Catatan bukti terperinci memuat perbandingan yang dicatat dan konteks eksperimen.
Contoh-contoh ini menjelaskan perbandingan tingkat fungsi historis yang dicatat dalam penerapan tertaut. Pemeriksaan waktu proses keseluruhan permainan adalah pencapaian yang terpisah. Sumber dan catatan pencocokan ditinjau pada 13 Oktober 2026.
Label TH09 gpt-dots berarti GPT-6-Astra. Model yang terkait dengan gpt-web berubah seiring waktu, sehingga label saja tidak dapat mengidentifikasi model yang digunakan dalam proses tertentu. Nama model eksplisit dalam commit lain yang dikutip memberikan atribusi yang tercatat. Riwayat ini tidak mencakup pengukuran biaya atau upaya yang konsisten untuk setiap proses.
- TH09 masa hidup objek sementara: tinjauan konteks sebelumnya dan rekonstruksi lengkap yang diverifikasi melalui kompilasi ulang yang bersih dari sumber.
- TH09 Front callback: wilayah diagnostik yang tidak cocok, Astra grafik aliran kontrol baru dan pemeriksaan kompilasi ulang yang diterima.
- Pengetahuan compiler: TH095 penggunaan kembali perilaku identifier-bucket, TH04 kode sumber pemain dan urutan linker dan Luna rekonstruksi lengkap fungsi penciptaan musuh TH09.
- Pemeriksaan dan diagnostik: TH08 audit konstan floating-point, TH08 investigasi numerik dan TH09 rekonstruksi penyimpanan ulangan.
Perbandingan yang diusulkan antara model khusus dan pelatihan RL adalah eksperimen di masa depan. Sejarah proyek memotivasi mereka. Tidak ada model khusus terlatih yang dievaluasi untuk esai ini.