Başında kimse olmadan büyük bir proje planlarsanız ne olur? Çoğu yazılım yığını tek bir orkestratör varsayar. Bir süreç durumu tutar, işleri sıraya koyar ve görevleri dağıtır. Eğer bu koordinatör yeniden başlarsa, tüm iş akışı aksar. Yeni bir proje bu varsayımı tamamen tersine çeviriyor. Bir yapay zeka ajanları sürüsünün, "Japonya'ya iki haftalık bir gezi planla" gibi bir hedefi, hiçbir düğümün herhangi bir anda planın tamamına sahip olmasına gerek kalmadan, nasıl tam bir görev ağacına ayrıştırabileceğini gösteriyor.
Lidersiz Bir Sistem Neden İnşa Edilir?
Merkezi planlayıcılar üzerinde mantık yürütmek kolaydır. Bir sunucuya istek gönderirsiniz, sunucu işi böler ve çalışanlar geri bildirim verir. Sorun şudur ki; sunucu bilişsel ve fiziksel bir darboğaz haline gelir. Gerçeğin tek sahibi odur.
Dağıtık bir kurulumda ise gerçek, ağın "gossip" (dedikodu) protokolü aracılığıyla üzerinde uzlaştığı paylaşılan bir görsele dönüşür. Bu özel Python uygulaması iki farklı kavramı birbirine bağlar. Birincisi, tekrarlamalı bir iyileştirme döngüsüdür: bir ajan bir öneri yazar, bir diğeri bunu puanlar ve üçüncüsü ise onu cilalar. İkincisi ise libp2p üzerine inşa edilmiş, ajanların bir kayıt defteri veya yük dengeleyici olmadan birbirlerini otomatik olarak bulmalarını sağlayan uçtan uca (peer-to-peer) bir ağ katmanıdır. Sonuç; akortçuluk yapan kimsenin olmadığı, eşlerin ortaya çıktığı, öneride bulunduğu, oy kullandığı ve görevleri yürüttüğü bir kümedir.
Dört Rol
Sistem, her katılımcıya dört kişilikten birini atar. Dört fiziksel makineye ihtiyacınız yoktur. Bunlar tek bir dizüstü bilgisayarda bir arada bulunabilir veya bir ev ağına yayılabilir. Roller şunlardır:
Ayrıştırıcı (Decomposer). Bu ajan en üst düzey hedefi alır ve bunu alt hedeflere bölmeyi önerir. Sistem birden fazla ayrıştırıcıyı paralel olarak çalıştırdığı için, aynı Japonya gezisi için üç farklı yöntem elde edebilirsiniz. Biri yolculuğu coğrafi olarak bölebilir: Tokyo, Kyoto, Osaka. Bir diğeri aktiviteye göre bölebilir: ulaşım, konaklama, yemek, gezi. Bir üçüncüsü ise günlere göre sıralayabilir. Ağ, bunların hepsini değerlendirir.
Puanlayıcı (Scorer). Bu ajanlar editör kurulu gibi hareket eder. Önerilen bir bölünmeyi inceler ve puanlar. Bir puan; alt hedeflerin yeterince somut, örtüşmeyen ve topluca kapsayıcı olup olmadığını yansıtır. Daha da önemlisi, bir puanlayıcı, bir önerinin kabul edilmek için yeterince iyi olup olmadığına karar verir. Onun onayı olmadan, bir bölünme belirsizlikte kalır.
Yürütücü (Executor). Ağaç, üzerinde işlem yapılabilecek kadar küçük yaprak düğümlere ulaştığında, yürütücüler bunları kapmak için yarışır. Merkezi bir kuyruktan izin beklemezler. Bunun yerine, bir görevi kimin üstleneceğini belirlemek için bir zaman damgası (timestamp) protokolü kullanırlar. Kazanan, işi yerel bir LLM çağrısı ile çalıştırır ve sonucu yayınlar.
Gözlemci (Observer). Bu, her ağın ihtiyaç duyduğu o kenarda duran sessiz gözlemcidir. Gossip akışını sessizce dinler, konuşmalardan plan ağacını yeniden inşa eder ve okunabilir bir anlık görüntü yazdırır. Hiç konuşmadığı için önemli bir noktayı kanıtlar: sisteme geç katılan biri, sadece duyduklarından yola çıkarak tüm planı çözebilir.
Gerçeklik Kaynağı Olarak Gossip
libp2p katmanı keşif ve mesajlaşma işlemlerini yönetir. Ajanlar, protokolün yerleşik eş keşfi (peer discovery) özelliği sayesinde birbirlerini bulur ve ardından paylaşılan bir konuya mesaj yayınlarlar. Kayıtlı bir veri tabanı veya kanonik planı tutan bir Redis önbelleği yoktur.
Her eş, plan ağacının kendi kopyasını tutar ve duyduğu gossip bilgilerine göre bunu günceller. Bir ayrıştırıcı bir öneri yayınladığında, diğer tüm düğümler bunu alır, formatı doğrular ve dalı kendi yerel ağacına ekler. Puanlayıcılar oy kullandığında, sayım da aynı şekilde yayılır. Eğer iki yürütücü aynı görev için çelişkili iddialarda bulunursa, zaman damgası protokolü çakışmayı çözer. Ağ, daha önceki iddiayı kabul eder ve geç kalanı eler.
Zamanla ağaç, orijinal hedeften başlayarak kabul edilen alt hedefler katmanları üzerinden aşağı doğru büyür ve sonunda küçük, yönetilebilir görevlere ulaşır. Bu süreç, bir blockchain'in konsensüse varmasına benzer; tek fark, payload'un bir coin defteri yerine bir seyahat programı veya bir yazılım spesifikasyonu olmasıdır.
Oylama ve Yürütme Yarışı
Demokrasi pahalıdır ve bu sistem bunun bedelini gecikme (latency) ile öder. Bir bölünme, ancak yeterli sayıda puanlayıcı onayladığında kazanır. Bu eşik, kümeyi nasıl yapılandırdığınıza bağlı olarak basit bir çoğunluk veya daha sıkı bir kuorum olabilir. Ayrıştırıcılar önermeye devam eder, bu nedenle ağ genellikle aynı anda birkaç rakip ağacı değerlendirir. Sonunda biri gerekli oylara ulaşır ve alt hedefleri taslak aşamasından kabul edilmiş aşamasına geçer.
Executorlar koordinasyona bir katman daha ekler. Görevler gossip kanalında herkese açık olduğu için, birden fazla executor aynı cazip yaprak düğümü (leaf node) kapmaya çalışabilir. Zaman damgası protokolü bir eşitlik bozucu (tiebreaker) görevi görür. Her talep monotonik bir zaman damgası taşır ve ağ, en erken olanı kabul eder. Kaybeden taraf sadece bir sonraki mevcut göreve geçer. Bu yöntem kaba bir yöntemdir ancak bir veritabanında satır kilitleyen merkezi bir zamanlayıcıya (scheduler) olan ihtiyacı ortadan kaldırır.
Tasarım Gereği Dayanıklılık
Mimari, işler bozulduğunda gerçek değerini kanıtlar. Eğer bir decomposer, alt hedeflerin yarısını önerdikten sonra çökerse, hayatta kalan decomposer'lar bölünme (split) teklif etmeye devam eder. Plan, bir yeniden başlatılma (respawn) beklerken duraksamaz. Eğer bir scorer ağdan ayrılırsa, küme boyutlandırmasını uygun şekilde yaptıysanız, kalan seçmenler (voters) hala kuorum (quorum) sağlayabilir.
Asıl kazanç, geç katılımlarda görülür. Sürecin ortasında başlayan yeni bir agent'ın bir snapshot'a veya...
