Apa yang berlaku apabila anda merancang projek besar tanpa sesiapa yang mengetuainya? Kebanyakan timbunan perisian (software stacks) mengandaikan adanya satu pengatur (orchestrator) tunggal. Satu proses memegang keadaan (state), menyusun giliran kerja (queues), dan mengagihkan tugasan. Jika penyelaras itu dimulakan semula, keseluruhan aliran kerja akan terganggu. Projek baharu ini mengubah andaian tersebut sepenuhnya. Ia menunjukkan bagaimana sekumpulan ejen AI boleh mencerakinkan matlamat seperti "rancang perjalanan dua minggu ke Jepun" kepada pokok tugasan yang lengkap tanpa memerlukan mana-mana nod tunggal memegang pelan lengkap pada bila-bila masa.
Mengapa Membina Sistem Tanpa Pemimpin?
Perancang berpusat mudah untuk difahami logiknya. Anda menghantar permintaan ke pelayan, ia membahagikan kerja, dan pekerja melaporkan semula. Masalahnya ialah pelayan tersebut menjadi hambatan (bottleneck) kognitif dan fizikal. Ia memiliki kebenaran mutlak.
Dalam tetapan teragih, kebenaran berubah menjadi gambaran dikongsi yang disepakati oleh rangkaian melalui protokol khabar angin (gossip). Implementasi Python khusus ini menggabungkan dua konsep yang berbeza. Pertama ialah gelung penambahbaikan berulang: satu ejen menulis cadangan, ejen lain memberikannya skor, dan ejen ketiga memperhalusnya. Kedua ialah lapisan rangkaian rakan-ke-rakan (peer-to-peer) yang dibina di atas libp2p, yang membolehkan ejen menemui satu sama lain secara automatik tanpa pendaftar atau pengimbang beban (load balancer). Hasilnya ialah satu kluster di mana rakan-rakan muncul, mencadangkan, mengundi, dan melaksanakan tanpa sesiapa pun bertindak sebagai konduktor orkestra.
Empat Peranan
Sistem ini menetapkan salah satu daripada empat personaliti kepada setiap peserta. Anda tidak memerlukan empat mesin fizikal. Ia boleh wujud bersama dalam satu komputer riba atau tersebar di seluruh rangkaian rumah. Peranan tersebut adalah:
Decomposer (Pencerakin). Ejen ini menerima matlamat peringkat tertinggi dan mencadangkan pembahagian kepada submatlamat. Oleh kerana sistem menjalankan beberapa pencerakin secara selari, anda mungkin mendapat tiga cara berbeza untuk perjalanan ke Jepun yang sama. Satu mungkin membahagikan perjalanan mengikut geografi: Tokyo, Kyoto, Osaka. Satu lagi mungkin membahagikan mengikut aktiviti: transit, penginapan, makan, melawat tempat menarik. Yang ketiga mungkin menyusun mengikut hari. Rangkaian akan mempertimbangkan kesemuanya.
Scorer (Pemberi Skor). Ejen-ejen ini bertindak sebagai lembaga editorial. Mereka memeriksa pembahagian yang dicadangkan dan menilainya. Skor mencerminkan sama ada submatlamat tersebut cukup konkrit, tidak bertindih, dan lengkap secara kolektif. Lebih penting lagi, pemberi skor memutuskan sama ada sesuatu cadangan cukup baik untuk diterima. Tanpa restunya, pembahagian tersebut akan kekal dalam keadaan tergantung.
Executor (Pelaksana). Sebaik sahaja pokok mencapai nod daun yang cukup kecil untuk dilaksanakan, pelaksana akan berlumba-lumba untuk menuntutnya. Mereka tidak menunggu kebenaran daripada barisan pusat. Sebaliknya, mereka menggunakan protokol cap masa (timestamp) untuk menentukan siapa yang mendapat hak ke atas sesuatu tugasan. Pemenang akan menjalankan tugasan tersebut melalui panggilan LLM tempatan dan menyiarkan hasilnya.
Observer (Pemerhati). Ini adalah pemerhati pasif yang diperlukan oleh setiap rangkaian. Ia mendengar khabar angin secara senyap, membina semula pokok pelan daripada perbualan tersebut, dan mencetak ringkasan yang boleh dibaca. Oleh kerana ia tidak pernah bercakap, ia membuktikan satu perkara penting: sesiapa sahaja yang menyertai lewat boleh memahami keseluruhan pelan hanya dengan terdengar perbualan tersebut.
Gossip sebagai Sumber Kebenaran
Lapisan libp2p mengendalikan penemuan dan pemesejan. Ejen-ejen menemui satu sama lain melalui penemuan rakan terbina dalam protokol tersebut, kemudian menyiarkan mesej ke topik kongsi. Tiada pangkalan data rekod, tiada cache Redis yang memegang pelan kanonikal.
Setiap rakan menyimpan salinan pokok pelan sendiri dan mengemas kininya berdasarkan khabar angin yang didengarinya. Apabila seorang pencerakin menyiarkan cadangan, setiap nod lain akan menerimanya, mengesahkan format, dan menambah cabang tersebut ke dalam pokok tempatannya. Apabila pemberi skor membuang undi, pengiraan undi tersebar dengan cara yang sama. Jika dua pelaksana menerbitkan tuntutan yang bercanggah terhadap tugasan yang sama, protokol cap masa akan menyelesaikan pertembungan tersebut. Rangkaian akan menetapkan tuntutan yang lebih awal dan membuang tuntutan yang lewat.
Lama-kelamaan, pokok tersebut berkembang ke bawah daripada matlamat asal melalui lapisan submatlamat yang diterima sehingga ia mencapai tugasan bersaiz kecil. Proses ini menyerupai rantaian blok (blockchain) yang mencapai konsensus, cuma muatannya adalah jadual perjalanan atau spesifikasi perisian dan bukannya lejar syiling.
Pengundian dan Perlumbaan untuk Melaksanakan
Demokrasi itu mahal, dan sistem ini membayar harganya melalui kependaman (latency). Pembahagian hanya menang jika cukup pemberi skor bersetuju. Ambang tersebut boleh jadi majoriti mudah atau kuorum yang lebih ketat, bergantung kepada cara anda mengkonfigurasi kluster tersebut. Pencerakin tidak berhenti mencadangkan, jadi rangkaian sering menilai beberapa pokok yang bersaing secara serentak. Akhirnya, satu pokok akan mencapai undian yang diperlukan dan submatlamatnya akan beralih daripada draf kepada diterima.
Executor menambah satu lagi lapisan penyelarasan. Oleh kerana tugasan adalah awam pada saluran gossip, beberapa executor mungkin cuba mengambil leaf node yang sama yang menarik. Protokol cap masa bertindak sebagai pemutus seri. Setiap tuntutan membawa cap masa monotonik, dan rangkaian akan mengutamakan yang terawal. Pihak yang kalah hanya perlu beralih ke tugasan seterusnya yang tersedia. Ini adalah kaedah yang ringkas, tetapi ia mengelakkan keperluan untuk penjadual berpusat (centralized scheduler) mengunci baris dalam pangkalan data.
Ketahanan melalui Reka Bentuk
Seni bina ini membuktikan keberkesanannya apabila berlaku kegagalan. Jika satu decomposer terhenti (crash) selepas mencadangkan separuh daripada submatlamat, decomposer yang masih aktif akan terus menawarkan pecahan (splits). Pelan tersebut tidak terhenti sementara menunggu proses 'respawn'. Jika satu scorer terputus daripada rangkaian, pengundi yang berbaki masih boleh mencapai kuorum selagi anda menetapkan saiz kluster dengan sewajarnya.
Keuntungan sebenar adalah penyertaan lewat (late joins). Ejen baharu yang bermula di pertengahan jalan tidak memerlukan snapshot atau...
