Belirti ve yanlış teşhis
Bir sürü olayı nadiren zamanlama problemi olarak etiketlenmiş halde gelir. Muhakeme problemi olarak gelir. Bir ajan döngüye girer, iki ajan birbiriyle çelişir, üç ajan hafifçe farklı prompt'lardan aynı artefaktı üretir ve postmortem modele doğru kayar: planlayıcı fazla belirsizdi, alt ajan talimatlarını yanlış anladı, eleştirmen yeterince eleştirel değildi.
Trace incelemesi genellikle farklı bir hikâye anlatır. Döngü bir kuyruğun aşağısındadır. Tek bir tool call — yavaş bir arama, rate limit'e takılan bir API, felsefi davranmaya karar vermiş bir veritabanı — çağıranın timeout süresinden uzun sürer. Çağıran retry yapar. Retry, aynı iş biriminin yeniden sahiplenilmesi değil de yeni bir görev olduğu için tekrar fan-out yapar. Aynı upstream sonucu bekleyen kardeş ajanlar da artık timeout'a düşer ve onlar da retry yapar. Her retry aynı context'i taşır, dolayısıyla olayın token maliyeti süperdoğrusal büyürken gerçek iş hiç büyümez.
Bu trace'lerdeki muhakeme kalitesi çoğu zaman yeterlidir. Ajanlar makul ara çıktı üretmektedir; sadece bunu birkaç kez, yanlış sırayla, bayat varsayımlara karşı üretmektedirler. Eksik olan daha iyi bir planlayıcı değildir. Eksik olan, yükü atabilen veya erteleyebilen bir mekanizmadır.
Bu ayrım önemlidir çünkü iki teşhis zıt düzeltmeleri ima eder. Sorun muhakemeyse düzeltme prompt çalışması ve model seçimidir. Sorun kuyruklamaysa düzeltme mimaridir: admission control, backpressure, idempotency ve kendi sınırlarını bilen bir zamanlayıcı.
İlk tasarım kararı olarak admission control
Bir görev grafiğindeki her fan-out kenarı iki beyan edilmiş sayıya ihtiyaç duyar: maksimum genişlik ve maksimum derinlik. Genişlik, aynı anda kaç çocuğun uçuşta olabileceğidir. Derinlik, grafiğin bir sonuç döndürmesi gerekmeden önce kaç nesil delegasyona izin verildiğidir. Her ikisi de tasarım zamanı sabitleridir, grafik spesifikasyonunda beyan edilir, üretimde faturayı izleyerek keşfedilmez.
Kullanışlı bir admission kuralı birleştiricidir: bir görev yalnızca hem bir worker slotu hem de bir bütçe dilimi mevcut olduğunda kabul edilir. Worker slotları eşzamanlılığı sınırlar. Bütçe dilimleri maliyeti ve duvar saati maruziyetini sınırlar. İkisinden biri tükendiyse görev başlatılmaz. Bir deadline ile kuyruğa alınır veya kaydedilmiş bir gerekçeyle düşürülür.

Düşürmek meşru bir sonuçtur. İşi reddedemeyen bir dağıtıcı dağıtıcı değildir; bir hunidir. Sessiz sınırsız genişleme arıza modudur ve tam da sistemde hiçbir şeyin hayır deme izni olmadığı için sessizdir.
Somut bir mekanizma: orkestratörün durumunu bir konuşma yerine bir defter olarak temsil edin. Kabul edilen her görev bir lease tutar — (task_id, worker_slot, budget_slice, deadline). Lease tamamlanmada, açık arızada veya süre bitiminde serbest bırakılır. Zamanlayıcının her tick'teki işi, kuyruktaki görevleri boş lease'lerle eşleştirmektir. Bu gösterişsizdir ve oyunun tamamı budur.
Ajanlar arasında backpressure
Alt ajanlar işi emip geç başarısız olmak yerine "şimdi değil" sinyali verebilmelidir. Geç başarısızlık pahalıdır: iş zaten context, token ve zaman tüketmiştir ve arıza, ebeveynin ucuza kurtarmak için gereken bilgiyi kaybettiği bir noktada ortaya çıkar.
İki mekanizma erken reddi güvenli kılar.
Birincisi, visibility timeout'lu paylaşılan bir kuyruk. Bir görev, sınırlı bir süre boyunca tam olarak bir worker tarafından sahiplenilir. Worker bu süre içinde tamamlamaz veya yenilemezse sahiplik sona erer ve görev yeniden görünür hale gelir. Bu, iki ajanın aynı iş birimini sahiplenmesini önler; birbiriyle çelişiyor gibi görünen sürülerdeki yinelenen çıktının en yaygın kaynağı budur. Aynı fikirde değillerdir; ikisi de aynı işi yapmaktadır.
İkincisi, yan etkisi olan her işlemde idempotency anahtarları. Bir retry orijinal denemeyle aynı anahtarı taşıdığında, downstream sistem iki kez yürütmek yerine tekilleştirebilir. Backpressure'ın agresif olabilmesini sağlayan budur. Idempotency olmadan agresif ret ve retry tehlikelidir, çünkü bir retry çift yazabilir. Idempotency ile işi reddetmek ucuz ve güvenlidir ve sistem yükü emip çökmek yerine erken atmaya göre ayarlanabilir.
Ödünleşim gerçektir: idempotency, grafikteki her tool'dan ve her harici servisten işbirliği gerektirir ve bazıları bunu sağlamayacaktır. Sağlamadıkları yerde dağıtıcı ya o tool'a erişimi serileştirmeli ya da at-most-once semantiğini kabul edip boşlukları açıkça ele almalıdır. Sorun yokmuş gibi davranmak, bir sürünün yalnızca yük altında ortaya çıkan bir hata sınıfı ed
Görev türü başına dört ölçüm teşhis alanının çoğunu kapsar:

- Kuyruk derinliği — ne kadar işin beklediği, zaman içinde örneklenmiş.
- Bekleme süresi — admission gecikmesi, kuyruğa alınmadan lease verilmesine kadar.
- Sahiplikten tamamlanmaya süre — yürütme gecikmesi, bekleme süresinden ayrılmış ki ikisi ayrı ayrı atfedilebilsin.
- Retry amplifikasyon faktörü — toplam denemeler bölü farklı iş birimleri.
Amplifikasyon faktörü tek başına en kullanışlı sinyaldir. Bire yakın durduğunda sistem her iş parçasını kabaca bir kez yapmaktadır. Yükseldiğinde sürü kapasitesini zaten sahip olduğu sonuçları yeniden türetmeye harcamaktadır ve hiçbir prompt iyileştirmesi bunu düşürmez.
Bir koşu, mesaj listesi olarak değil, admission'lardan oluşan bir zaman çizelgesi olarak yeniden kurulabilmelidir — görev kuyruğa alındı, lease verildi, lease yenilendi, lease süresi doldu, görev tamamlandı, görev dead-letter'a düştü. Mesaj logları ajanların ne söylediğini anlatır. Admission zaman çizelgeleri sistemin ne yaptığını anlatır ve bir olayı açıklayan yalnızca ikincisidir.
Ajan sayısına değil, amplifikasyon faktörüne alarm kurun. Ajan sayısı, sağlıklı bir patlama sırasında da kademeli bir arıza sırasında da düzgün biçimde yükselen bir gösteriş metriğidir. Amplifikasyon faktörü ikisini ayırt eder.
Bir tasarım kuralı
Orkestratörü üç bileşenli bir dağıtıcı olarak ele alın: bir zamanlayıcı, bir bütçe defteri ve bir dead-letter yolu. Zamanlayıcı admission'a sahiptir. Defter maliyet ve eşzamanlılık muhasebesine sahiptir. Dead-letter yolu, retry'larını tüketen her şeye sahiptir; böylece arızalar sessizce sonsuza dek yeniden kuyruğa alınmak yerine görünür ve incelenebilir olur.
Planlayıcı çıktısı, serbest biçimli delegasyon değil, beyan edilmiş genişlik ve derinliklere sahip bir görev grafiği olmalıdır. "Pazarı araştır ve bulguları sentezle" gibi düz yazı üreten bir planlayıcı bir grafik değil bir dilek üretmiştir. Sınırlı fan-out, açık bağımlılıklar ve düğüm başına bütçe tavanları olan düğümler üreten bir planlayıcı, bir dağıtıcının yürütebileceği ve bir bütçe defterinin uygulayabileceği bir şey üretmiştir.
Sürüyü diyaloğunun zarafetiyle değil, yük altındaki throughput ve tamamlanma ile ölçün. Diyalog kalitesi, demolar'da başarıyla korelasyon gösteren ve üretimde ondan kopan bir vekildir. Sabit bir eşzamanlılık bütçesi altında throughput, sabit bir deadline'da tamamlanma oranı ve amplifikasyon faktörü, sistemin gerçek trafikle temasında hayatta kalıp kalmayacağını öngören sayılardır.
Rahatsız edici çıkarım şudur: vasat muhakemeye ve mükemmel zamanlamaya sahip bir sürü, mükemmel muhakemeye ve admission control'süz bir sürüden daha iyi performans gösterir, çünkü ikincisi kapasitesini zaten yaptığı işi yeniden yapmaya harcar. Zamanlama sistemin ilgi çekici olmayan parçası değildir. İlgi çekici parçanın çalışmasına izin verilip verilmeyeceğini belirleyen parçadır.
