Ana sayfa → Teknik
Multi-Agent: Paralel Hız Değil, Bölünebilir İş
“Geçen ay reddedilen çekimleri tek tek incele, sebep dağılımını çıkar.” 34 kayıt, tek agent, 11 dakika. Dörde böldüm: 3 dakika. Sevindim. Sonra faturaya baktım: token 3,4 kat. Sonra çıktıya baktım: iki agent aynı özet dosyasına yazmış, biri diğerinin satırını ezmişti. Hızlanan şey iş değildi; sadece bekleme süresiydi.
- Paralellik işi değil, bölünebilir işi hızlandırır. Üç şart: parçalar bağımsız, her parçanın sonucu kısa özete sığıyor, birleştirme kuralı kodla yazılabiliyor. Biri eksikse multi-agent hız değil, kat kat token getirir.
- Ortak duruma yazan iki agent, ortak duruma yazan iki thread’dir. Aynı race condition, üstüne modelin belirsizliği. Bizde ikinci koşuda bir satır kayboldu ve iki gün kimse fark etmedi.
- Alt agent’ın context’i ayrıdır; kazancın yarısı budur. Her agent yalnızca kendi 8–9 kaydını görür. Gürültü azalır, pencere dolmaz. Bedeli: ayrıntı yukarı çıkmaz, yalnızca özet çıkar.
- Asıl iş birleştirmede. 4 özeti tek rapora çevirmek toplama işlemi değil: çakışan etiketler, farklı ifadeler, mükerrer kayıtlar. Birleştirmeyi de modele verirsen dört koşunun kazancını tek adımda kaybedersin.
- Agent’lar birbiriyle konuşmamalı. Yıldız topoloji: alt agent’lar sadece orchestrator’ı görür. Serbest sohbette tur sayısının üst sınırı yoktur; bizde ikisi 9 turda aynı yanlışta anlaştı.
- Önce tek agent’ı düzelt. 11 dakikanın 6 dakikası, aynı raporu üç kez çekmekten geliyordu. Bozuk işi paralelleştirmek, bozukluğu dört kopyalar.
Neyi paralelleştiriyoruz?
Önceki yazıda akışı kodda yazmıştık: zincir, yönlendirici, planlayıcı–işçi. Üçüncü desende plan uzadıkça süre uzuyor. “Geçen ayın reddedilen çekimleri” 34 kayıt demekti ve her kayıt için aynı iş yapılıyordu: kaydı çek, red sebebini oku, müşterinin önceki çekimlerine bak, bir etiket ver.
Bu iş paralelleştirmeye uygun görünüyor. Uygun olup olmadığını ölçen üç soru var:
| Soru | Bizde cevap | Cevap hayır olsaydı |
|---|---|---|
| Parçalar bağımsız mı? Biri diğerinin yazdığına dokunuyor mu? | Evet, bağımsız: her kayıt ayrı müşteri, hepsi salt okuma | Kilit gerekir; kilit gerekiyorsa paralellik kazanç değil bedeldir |
| Parçanın sonucu kısa bir özete sığıyor mu? | Evet: kayıt no, etiket, bir cümle gerekçe | Bütün ayrıntıyı yukarı taşımak gerekir; o zaman tek agent daha ucuz |
| Birleştirme kuralını kod olarak yazabiliyor musun? | Kısmen — asıl zorluk buradaydı | Birleştirme de bir model adımı olur; hata payı orada birikir |
Üçüncü soruya “kısmen” demem gerekiyordu ve ilk koşuda demedim. Bedelini birleştirme adımında ödedim.
Sahadan: 34 çekim, 4 agent, iki hata
İlk kurgu basitti: orchestrator 34 kaydı dörde böldü, dört alt agent aynı prompt ile çalıştı,
her biri kendi payını inceledi ve sonucu ozet.md dosyasına ekledi.
| Tek agent | 4 alt agent (ilk deneme) | |
|---|---|---|
| Duvar saati | 11 dk 04 sn | 3 dk 12 sn |
| Toplam token | 96 bin | 327 bin (3,4 kat) |
| Tool çağrısı | 71 | 84 (13’ü mükerrer: aynı müşteri, iki farklı agent) |
| Çıktı | 34 satır | 33 satır — biri ezilmiş |
| İki koşu aynı mı? | Yaklaşık | Hayır: sıra her koşuda değişiyor |
Token’ın 3,4 katına çıkması sürpriz değil: her alt agent kendi system prompt’unu, tool tanımlarını ve talimatını baştan taşıyor. 4 agent = 4 kez sabit giriş maliyeti. Buna razıydım. Razı olmadığım iki şey vardı.
Birinci hata: ortak dosyaya yazmak
ozet.md’ye dört agent aynı anda satır ekledi. İkisi aynı saniyede okudu, ikisi
de kendi satırını ekleyip yazdı; ikincisi birincisinin satırını sildi. Bu tam olarak
stok neden eksiye düşer yazısındaki olay — oku–değiştir–yaz.
Tek fark: orada iki thread vardı, burada iki model. Modelin akıllı olması bu yarışı çözmüyor;
çözen şey her agent’ın kendi çıktısını ayrı yere yazması ve birleştirmeyi kodun
yapması.
# YANLIS: dort agent ayni dosyaya
for parca in parcalar:
spawn(agent, prompt=parca, cikti="ozet.md") # yaris
# DOGRU: her agent kendi kaydini dondurur, birlestirme kodda
sonuclar = paralel_calistir(
[lambda p=p: alt_agent(p) for p in parcalar], es_zamanli=3
)
rapor = birlestir(sonuclar) # kod: sirala, tekille, sayi kontrol et
İkinci hata: mükerrer okuma
13 tool çağrısı mükerrerdi. Sebebi bölme kuralıydı: kayıtları sırayla dörde bölmüştüm, ama aynı müşterinin iki çekimi iki farklı agent’a düşmüştü. İkisi de o müşterinin geçmişini çekti. Çözüm bölme kuralını değiştirmekti: kayda göre değil, müşteriye göre böl. Aynı müşterinin bütün kayıtları tek agent’a gider. Bu worker sharding yazısındaki kuralın aynısı: parçalama anahtarı, işin doğal anahtarıdır.
Alt agent’ın context’i: kazancın yarısı
Multi-agent’ın konuşulmayan faydası hız değil, izolasyon. Tek agent 34 kaydı incelerken hepsi aynı pencerede birikir: 34 kaydın ayrıntısı, 71 tool cevabı, ara notlar. 20. kayda geldiğinde ilk kayıtların ayrıntısı ya kaymıştır ya da kararını bulandırıyordur. (Ayrı yazının konusu.)
Alt agent’ta pencere temiz: 8–9 kayıt, kendi tool cevapları, başka hiçbir şey. Kalite farkını ölçtük: elle etiketlediğim 34 kaydın karşılığında tek agent 27’sini doğru etiketledi, dörde bölünmüş hâli 31. Aynı model, aynı prompt; fark sadece önüne konan yığın.
Bedeli de burada: alt agent’ın gördüğü ayrıntı yukarı çıkmaz. Yalnızca özeti çıkar. Bu yüzden alt agent’ın çıktısı serbest metin değil, sabit alanlı bir kayıt olmalı:
{
"kayit_no": "WD-24817",
"etiket": "kyc_eksik", # kapali kume: 6 etiket + diger
"gerekce": "Adres belgesi 6 aydan eski.", # tek cumle, 200 karakter
"guven": "yuksek", # yuksek | dusuk
"bakilan_kayit": 3 # kac tool cagrisi yapildi
}
“Güven” alanı sonradan eklendi ve en çok işe yarayan alan oldu: düşük güvenli 5 kaydı birleştirme adımı ayırıp insana bıraktı. Modelden emin olmasını istemek yerine, emin olmadığını söyleyebileceği bir alan açmak daha ucuz.
Birleştirme: asıl iş burada
Dört özet geldi, rapor kendiliğinden oluşmuyor. Birleştirmede çıkan sorunlar:
- Sayı tutmuyor. 34 gönderildi, 33 geldi. Birleştirme adımının ilk işi sayım: gönderilen parça sayısı ile dönen kayıt sayısı eşit mi? Değilse rapor üretilmez, hata verilir.
- Aynı şeye iki ad. Bir agent
kyc_eksik, diğeribelge_eksikyazmıştı. Kapalı etiket kümesi bunu çözdü; küme açık olduğu sürece her agent kendi sözlüğünü uydurur. - Mükerrer kayıt. Aynı müşterinin iki çekimi iki agent’a düştüğünde iki kez raporlandı. Bölme kuralı düzelince bitti.
- Sıra. Paralel koşuda dönüş sırası rastgeledir. Rapor her koşuda farklı sıralanıyorsa iki raporu
diffile karşılaştıramazsın. Birleştirme adımı deterministik sıralar: kayıt numarasına göre.
Bunların hiçbiri model işi değil: sayım, eşleme, tekilleştirme, sıralama. Birleştirmeyi bir modele verdiğim ilk denemede 34 kaydın 2’si rapora hiç girmedi ve fark etmem iki gün sürdü. Kodun yaptığı birleştirmede aynı hata olursa program duruyor.
Topoloji: yıldız, zincir değil
İnternetteki çoğu multi-agent örneğinde agent’lar birbiriyle konuşuyor: “eleştirmen agent”, “yazar agent”, “yönetici agent”. Bir kez denedim. İki agent — biri kaydı etiketliyor, diğeri etiketi denetliyor — 9 tur boyunca birbirlerine yazdılar ve sonunda aynı yanlış etikette anlaştılar. Denetleyici, denetlediği şeyin gerekçesini okuyunca ikna oldu.
- Alt agent’lar yalnızca orchestrator’ı görür; birbirlerini görmez.
- Bir alt agent’ın çıktısına ihtiyaç duyan diğeri onu orchestrator’dan, sabit alanlı kayıt olarak alır.
- Tur sayısı üstten sınırlı: alt agent başına 3, koşu başına 8.
- Denetim gerekiyorsa denetleyici gerekçeyi görmez, sadece kaydı ve veriyi görür.
- İki agent ikna olana kadar konuşur; üst sınır yoktur.
- Maliyet önceden hesaplanamaz.
- Hangi cümlenin kararı değiştirdiği kaybolur.
- Denetleyici, gerekçeyi okuyup onaylamaya meyillidir; bağımsız değildir.
Önce tek agent’ı düzelt
En önemli madde en sonda çıktı: 11 dakikalık tek agent koşusunu inceledim. 6 dakikası aynı raporu üç kez çekmeye gidiyordu. Tekrar koruması ve doğru bir tool sözleşmesiyle tek agent 11 dakikadan 5 dakika 40 saniyeye indi — hiçbir paralellik olmadan, token artışı olmadan.
Sonra dörde böldüm: 3 dakika 12 saniye değil, 1 dakika 50 saniye. Yani paralelleştirmeden önceki düzeltme, paralelleştirmenin kendisinden daha çok kazandırdı ve bedavaydı. Sıra önemli: bozuk işi paralelleştirirsen bozukluğu dört kopyalarsın, faturası da dört katına çıkar.
| Aşama | Süre | Token | Doğru etiket (34 üzerinden) |
|---|---|---|---|
| Tek agent, ilk hâl | 11 dk 04 sn | 96 bin | 27 |
| Tek agent, tekrar koruması + tool düzeltmesi | 5 dk 40 sn | 71 bin | 29 |
| 4 alt agent, ortak dosya (ilk deneme) | 3 dk 12 sn | 327 bin | 31, bir satır kayıp |
| 4 alt agent, müşteriye göre bölme + kodla birleştirme | 1 dk 50 sn | 198 bin | 31 |
Son satırda token hâlâ tek agent’ın 2,8 katı. Buna değdi mi? Bu iş ayda bir çalışıyor ve raporu sabah toplantısına yetiştirmesi gerekiyor: değdi. Günde 400 kez çalışan bir iş olsaydı cevap “hayır” olurdu. Görev başı maliyet hesabı tam olarak bu soruyu cevaplamak için var.
Ne izlemeli?
- Paralellik verimi. Tek agent süresi ÷ (alt agent sayısı × paralel süre). 1’e yakınsa bölme iyi; 0,5’in altındaysa parçalar bağımsız değil.
- Mükerrer tool çağrısı oranı. Bölme anahtarının yanlış olduğunu söyleyen tek sayı. Bizde %18 → %0.
- Alt agent başına token. Biri diğerlerinin iki katıysa parça dengesizdir.
- Birleştirmede reddedilen kayıt sayısı. Sayım tutmazsa rapor üretilmez; bu sayı sıfırdan büyükse kök sebep alt agent sözleşmesindedir.
- Düşük güvenli kayıt oranı. İnsana düşen iş. Artıyorsa girdi zorlaşmıştır, model değil.
- Aynı girdiye aynı rapor. Deterministik sıralama sonrası
difftemiz olmalı.
Kontrol listesi
- Tek agent’ı düzelttim mi? Süresinin kaçı boşa gidiyor?
- Parçalar gerçekten bağımsız mı? Hangisi hangisinin yazdığına dokunuyor?
- Bölme anahtarı ne? Aynı varlık iki parçaya düşüyor mu?
- Alt agent’ın çıktısı sabit alanlı bir kayıt mı, serbest metin mi?
- Etiket kümesi kapalı mı? “Diğer” ve “emin değilim” var mı?
- Birleştirmeyi kod mu yapıyor? Sayım kontrolü var mı?
- Rapor deterministik sıralanıyor mu? İki koşunun
diff’i temiz mi? - Alt agent’lar birbirini görüyor mu? Görüyorsa neden?
- Eş zamanlılık sınırı kaç? Tool’ların arkasındaki veritabanı bunu kaldırıyor mu?
- Token bütçesi koşu başına mı, agent başına mı? İkisi de var mı?
- Bir alt agent düşerse koşu ne yapıyor: bekliyor mu, eksik rapor mu üretiyor?
Sonuç
Dört agent 11 dakikayı 3 dakikaya indirdi ve ben sevindim. Sevinmem gereken yer orası değildi: asıl kazanç, tek agent’ın boşa geçen 6 dakikasını bulduğumuzda geldi. Paralellik onun üstüne bindi ve iyi bir iş çıktı — ama sırayı ters kurmuş olsaydık, bozuk işi dört kopyalamış ve faturayı üçe katlamış olacaktık.
İki agent aynı dosyaya yazdığında öğrendiğim şey de yeni değildi: bu bir race condition ve modelin zekâsıyla çözülmüyor. Alt agent’lar kendi kayıtlarını döndürür, birleştirmeyi kod yapar, sayım tutmazsa program durur. Model burada yok; olmaması iyi.
Akılda kalacak cümle: multi-agent bir hız tekniği değil, bir bölme tekniğidir. İşi bölebiliyorsan agent sayısı bir mühendislik kararıdır. Bölemiyorsan, kaç agent eklersen ekle aynı işi birkaç kez yapıyorsundur.