Kami Membina Penjaga Kod Autonomi dalam Masa Satu Hujung Minggu
Kami menyertai JacHacks dengan matlamat yang luar biasa.
Bina satu alat yang memantau repositori. Ia mesti mengesan perubahan dependensi yang mencurigakan. Ia mesti menjalankan dependensi tersebut dalam sandbox untuk membuktikan ia berniat jahat. Kemudian, ia mesti menulis pembetulan dan membuka pull request. Tiada manusia yang terlibat sehingga ke penghujungnya.
Kami menamakannya GhostWatch. Ia mendapat tempat ke-2 dalam trek agentic.
Inilah cara kami membinanya dan apa yang kami pelajari.
Masalahnya
Semakan kod standard mempunyai dua kelemahan utama:
- Alat sedia ada tidak dapat melihat radius impak (blast radius). Perubahan pada satu fungsi boleh merosakkan fail yang jauh darinya. Kebanyakan alat tidak melihat perkaitan tersebut.
- Serangan rantaian bekalan (supply chain attacks) memintas semakan. Penyerang boleh menolak versi yang telah dicemari terus ke dalam registry. Tiada pull request untuk disemak. Anda hanya akan mengetahuinya selepas kerosakan berlaku.
Penyelesaian Kami
Kami membina sistem dengan kesedaran spatial. Kami menggunakan Jac untuk memodelkan kod asas sebagai sebuah graf.
Dalam graf ini:
- Fail adalah nod.
- Import adalah edge.
Untuk mencari radius impak, kami tidak meneka. Kami melakukan "graph walk". Ini menjadikan logik keselamatan bersifat deterministik dan boleh dijelaskan.
Teknologi yang Digunakan
Kami menggunakan Jac berbanding Python mentah dan panggilan LLM secara manual. Ini mengubah cara kami bekerja:
- Kod asas adalah struktur data.
- Persistensi adalah terbina dalam. Graf repo kami kekal walaupun selepas sistem dimulakan semula tanpa memerlukan pangkalan data berasingan.
- Integrasi LLM adalah lancar. Kami menggunakan satu kata kunci untuk menukarkan fungsi kepada panggilan LLM yang mengembalikan objek bertipe (typed objects).
Bahagian yang Sukar
Ia tidak mudah. Kami menghadapi beberapa rintangan:
- Sintaks baharu: Jac menggunakan semicolon, kurungan, dan kata kunci khusus seperti "has" berbanding "self" dalam Python. Kami menghabiskan beberapa jam pertama untuk membaiki ralat parsing.
- Perangkap React: Saya cuba mengubah mutasi senarai secara terus (in place). Ini menghalang frontend daripada dikemas kini. Saya terpaksa beralih kepada penetapan semula senarai untuk mencetuskan re-render.
- Kekurangan dokumentasi: Penyediaan persekitaran mengambil masa lebih lama daripada yang dijangkakan kerana sesetengah dokumentasi kurang lengkap.
Mengapa ia penting
Kebanyakan sistem ejen memerlukan anda menguruskan keadaan (state), orkestrasi, dan penserialan secara manual. Dengan Jac, graf adalah satu binaan bahasa (language construct). Seni bina sistem sepadan dengan masalah yang kami selesaikan.
Projek ini tidak sempurna. Sandbox menggunakan subprocess tempatan dan bukannya cloud microVMs. Kami membiarkan jurang ini kelihatan kerana hasil kerja hackathon tidak sepatutnya penuh dengan kepalsuan.
Tonton demo: https://www.youtube.com/watch?v=ZN0UVnNUpRs
Semak kod: https://github.com/ayushmk7/GhostWatch
Sumber: https://dev.to/ayushmk/we-built-an-autonomous-code-guardian-in-a-weekend-heres-what-happened-4982
Komuniti pembelajaran pilihan: https://t.me/GyaanSetuAi
