Persediaan Pengkodan AI Anda ialah Alat yang Rumit. Pangkalan Kod Anda adalah Kompleks.
Alatan pengkodan AI baharu menjanjikan ejen yang lebih boleh dipercayai. Anda melihat rangka kerja untuk kemahiran, kuasa luar biasa (superpowers), dan pembangunan berasaskan spesifikasi (spec-driven development). Alatan ini berfungsi. Ia membantu ejen mengikut proses dan bukannya meneka.
Namun, terdapat satu perangkap. Orang ramai menyangka persediaan yang lebih baik untuk satu tugasan akan mewujudkan sistem yang koheren. Ia tidak begitu.
Untuk memahami mengapa, gunakan rangka kerja Cynefin. Ia membahagikan masalah kepada dua jenis: Rumit (Complicated) dan Kompleks (Complex).
Masalah Rumit (Complicated Problems) Masalah ini mempunyai jawapan yang boleh diketahui. Anda menggunakan analisis dan kemahiran untuk mencarinya. Contohnya termasuk melakukan refactoring pada modul atau menulis fungsi pengesahan (validation function). Sebaik sahaja anda menemui jawapannya, anda boleh mengulanginya. Kebanyakan alatan pengkodan AI berada dalam kategori ini. Ia memberi tumpuan kepada unit kerja. Ia menjadikan tugasan boleh diulang dan boleh disahkan.
Masalah Kompleks (Complex Problems) Masalah ini tidak mempunyai jawapan yang boleh diramal. Sistem ini merupakan rangkaian bahagian-bahagian yang saling berkaitan. Hasilnya hanya akan kelihatan selepas anda bertindak. Adakah empat puluh perubahan yang digabungkan (merged) akan merosakkan seni bina dalam masa enam bulan? Adakah Ejen A akan bercanggah dengan Ejen B? Anda tidak boleh mencari jawapan ini dengan hanya melihat satu fail. Ia muncul daripada cara bahagian-bahagian tersebut berinteraksi.
Ketidakpadanan berlaku apabila anda mengharapkan alatan Rumit untuk menyelesaikan masalah Kompleks.
Sesuatu alatan mungkin membolehkan ejen menulis fungsi yang sempurna. Tetapi jika satu tugasan menggunakan userId dan satu lagi menggunakan user_id, sistem akan rosak. Kedua-dua tugasan tersebut adalah "betul" secara berasingan. Kegagalan tersebut bersifat muncul (emergent). Ia wujud dalam interaksi, bukan pada unit tersebut.
Malah tetingkap konteks (context windows) yang besar sekalipun tidak dapat menyelesaikan masalah ini. Tetingkap yang lebih besar membantu anda melihat lebih banyak, tetapi melihat tidak sama dengan membuat deduksi. Anda boleh membaca keseluruhan pangkalan kod dan masih tidak tahu sama ada ia akan mengalami kebuntuan (deadlock) di bawah beban pengeluaran (production load). Itu adalah sifat masa larian (runtime property).
Cara mengendalikan kedua-duanya:
- Untuk lapisan Rumit: Gunakan kemahiran, spesifikasi (specs), dan TDD. Ini menjadikan output individu ejen lebih teliti.
- Untuk lapisan Kompleks: Gunakan probe-sense-respond. Anda tidak boleh meramal apa yang akan rosak. Anda mesti menggabungkan (merge), meluncurkan (deploy), dan memerhati. Gunakan ujian integrasi dan kebolehperhatian (observability) untuk mengesan apa yang berlaku apabila bahagian-bahagian tersebut digabungkan.
Jangan terpedaya dengan janji bahawa spesifikasi yang lebih baik akan menjadikan sistem anda stabil. Spesifikasi menjadikan unit boleh dipercayai. Ia tidak menjadikan sistem koheren.
Padankan kaedah anda dengan domain. Gunakan alatan untuk menyempurnakan unit. Gunakan eksperimen untuk memahami sistem.
Komuniti pembelajaran pilihan: https://t.me/GyaanSetuAi
