Hızla ilgili değil. Birkaç ajanı farklı bakış açılarıyla aynı karar üzerinde tartıştırmak ve her birinden daha iyi bir sonuca ulaşmakla ilgili. Orkestratör, uzmanlar ve birleştirme için tam kodla birlikte.
Bir modelden bir kararı değerlendirmesini istediğinizde, genellikle ortalama ve ihtiyatlı bir bakış açısı sunar. Kabul etme, yumuşatma, denge bulma eğilimindedir. Sorun da budur: önemli bir karar tek bir ortalama bakış açısıyla değerlendirilemez, farklı yönlerden saldırıya uğramalıdır.
Bir ajan sürüsü bunu yapısal olarak çözer. Her biri belirli bir role ve önyargıya sahip birkaç uzman yaratırsınız: biri sadece parayı düşünür, bir diğeri sadece teknik riski, üçüncüsü sadece kullanıcıyı. Aynı kararı bağımsız olarak analiz eder, farklı sonuçlara ulaşır ve ardından bu sonuçların bir uzlaşmasını zorlarsınız. Buradaki değer hız değil, anlaşmazlığın yapıya inşa edilmiş olmasıdır. Tek bir ajan kendi kendisiyle grup düşüncesine yönelirken, bir rol sürüsü bunu yapmaz.
Bu makale, böyle bir sürünün nasıl oluşturulacağını kodla birlikte gösteriyor. Üç bölümü ele alıyoruz: rolleri atayan orkestratör, bağımsız olarak analiz eden uzmanlar ve bunları tek bir sonuçta uzlaştıran birleştirme.
Mimari: Orkestratör, Uzmanlar, Birleştirme
Analiz için bir sürü üç bileşenden oluşur.
Orkestratör, görevi alır ve hangi uzman rollerinin gerekli olduğuna karar verir. Bir ürün lansmanını değerlendirmek için bunlar bir yatırımcı, bir mühendis, bir ürün uzmanı, bir güvenlik görevlisi olabilir. Orkestratör kendisi analiz yapmaz, rolleri dağıtır.
Uzmanlar paralel ve bağımsız olarak çalışır. Her biri aynı kararı kendi merceğinden görür. Kritik bir şekilde, birbirlerinin sonuçlarını görmezler, aksi takdirde uyum başlar. Bağımsızlık, farklı bakış açıları üreten şeydir.
Birleştirme, uzmanların sonuçlarını toplar ve uzlaştırır: nerede anlaştıkları, nerede çeliştikleri, tüm açılardan nihai kararın ne olduğu. Bu, ortalama almak değil, anlaşmazlığı bir sinyal olarak tutan bir sentezdir.

Adım 1: Temel İstemci
Modele basit bir istemci ile başlayın. OpenAI uyumlu bir mesaj formatı kullanıyorum, çoğu sağlayıcı ve yerel Ollama ile çalışır.
1import requests2import json3from concurrent.futures import ThreadPoolExecutor45API = "http://localhost:11434/api/chat" # Ollama veya bir sağlayıcı uç noktası6MODEL = "qwen2.5:32b"78def ask(system, user, temperature=0.7):9 resp = requests.post(API, json={10 "model": MODEL,11 "messages": [12 {"role": "system", "content": system},13 {"role": "user", "content": user},14 ],15 "temperature": temperature,16 "stream": False,17 }, timeout=120)18 resp.raise_for_status()19 return resp.json()["message"]["content"]
Adım 2: Orkestratör Rolleri Atar
Orkestratör görevi alır ve hangi uzmanların gerekli olduğuna karar verir. Rolleri önceden sabit kodlamayın, modelin belirli görev için onları seçmesine izin verin, bu sürüyü genel hale getirir. Ayrıştırmak için katı JSON isteyin.
1ORCHESTRATOR_SYSTEM = """Analitik bir sürünün orkestratörüsün.2Görev için, karar hakkında maksimum düzeyde FARKLI3ve çelişkili görüşler verecek 3-5 uzman rolü tanımla. Roller çıkarlarında4çelişmeli, birbirini tamamlamamalı.56Her rol için şunları ver: ad, odak (neye takıntılı olduğu), önyargı (neye7eğilimli olduğu, neyi abartma eğiliminde olduğu).89Sadece bir JSON dizisi ile yanıtla, açıklama yok:10[{"name": "...", "focus": "...", "bias": "..."}, ...]11"""1213def plan_roles(task):14 raw = ask(ORCHESTRATOR_SYSTEM, f"Analiz edilecek görev:\n{task}",15 temperature=0.9) # rol çeşitliliği için daha yüksek sıcaklık16 # JSON'u ayıkla, model etrafına metin eklemiş olabilir17 start, end = raw.find("["), raw.rfind("]") + 118 return json.loads(raw[start:end])
Sıcaklığı burada bilerek yüksek tutuyoruz: bariz olmayan, çeşitli roller istiyoruz. İstemdeki "roller çelişmelidir" gereksinimi anahtardır, onsuz model neredeyse aynı üç rol verir ve sürünün tüm amacı kaybolur.
Adım 3: Uzmanlar Paralel ve Bağımsız Olarak Analiz Eder
Her uzman kendi rolünü ve aynı kararı alır. Kritik bir şekilde: paralel çalışırlar ve birbirlerinin sonuçlarını görmezler. Buradaki paralellik sadece hız için değildir, bağımsızlığı garanti eder, bir uzman fiziksel olarak başka birinin görüşüne uyum sağlayamaz.
1EXPERT_SYSTEM = """Rolü {name} olan bir uzmansın.2Odağın: {focus}.3Önyargın: {bias}. Bununla savaşma, bu senin analize değer katan şeyin.45Kararı KESİNLİKLE kendi konumundan analiz et. Dengeli olma,6diğer bakış açılarını hesaba katmaya çalışma, bunu diğer uzmanlar yapacak.7Senin işin kendi açını sınıra kadar zorlamak.89Şunları ver:10- kendi konumundan bir karar (destekliyor / karşı / koşullu)11- kendi açından özellikle 2-3 ana argüman12- senin konumundan en görünür olan ve diğerlerinin kaçıracağı 1 risk13Kısa ve sert, gereksiz süsleme yok."""1415def run_expert(role, task):16 system = EXPERT_SYSTEM.format(**role)17 opinion = ask(system, f"Analiz edilecek karar:\n{task}", temperature=0.7)18 return {"role": role["name"], "opinion": opinion}1920def run_swarm(roles, task):21 # paralel başlatma: bağımsızlık artı hız22 with ThreadPoolExecutor(max_workers=len(roles)) as pool:23 futures = [pool.submit(run_expert, role, task) for role in roles]24 return [f.result() for f in futures]
Uzman istemine dikkat edin: açıkça dengeli olmasını yasaklıyoruz. Bu sezgisel değildir, ama tüm mesele budur. Her uzman tüm tarafları hesaba katmaya çalışırsa, birbirinin aynısı beş ihtiyatlı görüş elde edersiniz. Her birini kendi açısını sınıra kadar zorlamaya zorlayarak, birleştirmenin daha sonra uzlaştıracağı gerçek bir spektrum elde edersiniz.
Adım 4: Birleştirme Sonuçları Uzlaştırır
Şimdi birkaç keskin, tek taraflı görüşümüz var. Birleştirme bunları tek bir kararda toplar, ancak ortalama alarak değil. Uzmanların nerede anlaştığına (güçlü bir sinyal), nerede çeliştiğine (bir karar gerektiren bir risk bölgesi) ve neyin neye ağır bastığına bakar.
1MERGE_SYSTEM = """Analitik bir sürünün sentezleyicisisin. Sana2tek bir karar hakkında farklı önyargılara sahip birkaç uzmanın görüşleri veriliyor.34İşin ORTALAMA ALMAK DEĞİL. İşin:51. Anlaşma: uzmanların farklı konumlarına rağmen üzerinde anlaştıkları şey.6 Bu en güvenilir sinyaldir, vurgula.72. Çatışma: uzmanların doğrudan çeliştiği yer. Bunu yumuşatma,8 çatışmayı açıkça adlandır ve her bir tarafın maliyetinin ne olduğunu söyle.93. Kör noktalar: sadece bir uzmanın adlandırdığı ama önemli olan bir risk.104. Her şeyi kapsayan nihai karar: destekliyor / karşı / koşullu ve hangi11 koşullar altında değiştiği.1213Yoğun yaz. Anlaşmazlığı bilgi olarak tut, gizleme."""1415def merge_opinions(task, opinions):16 block = "\n\n".join(17 f"### Uzman: {o['role']}\n{o['opinion']}" for o in opinions18 )19 user = f"Karar:\n{task}\n\nUzman görüşleri:\n{block}"20 return ask(MERGE_SYSTEM, user, temperature=0.4) # ayık sentez için daha düşük sıcaklık
Birleştirmede sıcaklığı düşürüyoruz: uzmanlar çeşitli olmalıysa (yüksek T), sentezleyici ayık ve tutarlı olmalıdır (düşük T). Buradaki anahtar talimat "ortalama alma, anlaşmazlığı bilgi olarak tut"tur. Normal bir birleştirme her şeyi lapa haline getirir, "bir yandan, diğer yandan." İyi bir birleştirme açıkça şunu söyler: işte herkes hemfikir ve işte bir çatışma var ve maliyeti bu kadar.
Adım 4.5: Sahte Anlaşmaya Karşı Bir Şeytanın Avukatı
Sessiz bir tehlike vardır: bazen uzmanlar karar iyi olduğu için değil, herkes atalet nedeniyle aynı yöne baktığı için anlaşır. Bu sahte anlaşmadır ve açık çatışmadan daha tehlikelidir, çünkü güven gibi görünür.
Buna karşı özel bir ajan ekliyoruz: şeytanın avukatı. Tek işi fikir birliğine saldırmaktır. Tüm uzmanların görüşlerini görür ve hepsinin aynı anda neden yanılıyor olabileceğini bulmakla yükümlüdür. Sürü oybirliğiyle "destekliyor" oyu verdiyse, avukat bunun bir felaket olduğu bir senaryo arar.
1DEVIL_SYSTEM = """Analitik bir sürüde şeytanın avukatısın. Sana2uzmanların görüşleri veriliyor. Tek işin: onların anlaşmasına saldırmak.34Uzmanlar bir konuda uzlaştıysa, neden HEPSİNİN AYNI ANDA yanılıyor olabileceğini5bul. Ortak bir kör nokta ara: herkesin kontrol etmeden kabul ettiği bir varsayım,6kimsenin can sıkıcı olduğu için düşünmediği bir senaryo.78Kibar olma. Değerin, grubun duymak istemediğini söylemendir.9Şunları ver:10- uzmanların en tehlikeli ortak varsayımı hangisi11- sürünün oybirliğiyle aldığı kararın ölümcül şekilde yanlış çıktığı bir senaryo12- grubun dikkatlice kaçındığı bir soru13Anlaşma yoksa ve uzmanlar gerçekten anlaşamıyorsa, bunu açıkça söyle14ve en keskin çözülmemiş çatışmayı işaret et."""1516def run_devil(task, opinions):17 block = "\n\n".join(18 f"### {o['role']}\n{o['opinion']}" for o in opinions19 )20 user = f"Karar:\n{task}\n\nSürü görüşleri:\n{block}"21 return ask(DEVIL_SYSTEM, user, temperature=0.8)
Avukat, uzmanlardan sonra ama birleştirmeden önce çalışır ve saldırısı, görüşlerin yanı sıra senteze gider. Amaç, oybirliğiyle alınmış bir sürünün bile bir çatlak aramakla yükümlü en az bir ajana sahip olmasıdır. Bu ucuzdur (tek bir çağrı) ve yapısal olarak grup düşüncesini kırar: fikir birliği artık sadece olmak zorunda değil, bir saldırıdan sağ çıkmak zorundadır.
Adım 4.6: Çatışmayı Keskinleştirmek İçin Bir Tartışma Turu
İlk uzman geçişi bağımsızdır ve çeşitlilik için doğrudur. Ancak görüşler toplandıktan sonra, bir tartışma turu yapabilirsiniz: her uzmana diğerlerinin görüşlerinin bir özetini gösterin ve itiraz etmesine izin verin. Bu, çatışmaları keskinleştirir, zayıf argümanlar elenir, güçlü olanlar sağlamlaşır.
1DEBATE_SYSTEM = """Analizin ikinci turunda {name} uzmanısın.2Orijinal konumun:3{own_opinion}45Şimdi diğer uzmanların görüşlerini görüyorsun. Baskıya boyun eğme, ama6güçlü argümanları da görmezden gelme. Şunları ver:7- başka birinin argümanının konumuna gerçekten dokunduğu yer, dürüstçe kabul et8- çizgini koruduğun ve itirazlarının neden zayıf olduğu yer9- tartışmadan sonra kararını değiştirip değiştirmediğin ve değiştirdiysen nasıl10Kısa. Bu ilk görüşün tekrarı değil, rakiplere bir tepkidir."""1112def debate_round(roles, task, opinions):13 others_map = {}14 for o in opinions:15 others = "\n\n".join(16 f"### {x['role']}\n{x['opinion']}" for x in opinions if x is not o17 )18 others_map[o["role"]] = others1920 def rebut(o):21 system = DEBATE_SYSTEM.format(name=o["role"], own_opinion=o["opinion"])22 user = (f"Karar:\n{task}\n\n"23 f"Rakiplerin görüşleri:\n{others_map[o['role']]}")24 return {"role": o["role"], "opinion": ask(system, user, temperature=0.6)}2526 with ThreadPoolExecutor(max_workers=len(opinions)) as pool:27 return list(pool.map(rebut, opinions))
Tartışma turu da paraleldir: her uzman diğerlerine aynı anda tepki verir, yine gerçek zamanlı uyum olmadan. Tartışmadan sonra görüşler genellikle daha keskindir: hangi pozisyonların ateş altında ayakta kaldığını ve hangilerinin çöktüğünü görebilirsiniz. Nihai birleştirmeye giren bu sertleşmiş görüşlerdir.
Adım 5: Hepsini Bir Araya Getirmek
1def analyze(task, debate=True):2 print("Orkestratör rolleri seçiyor...")3 roles = plan_roles(task)4 for r in roles:5 print(f" - {r['name']}: {r['focus']}")67 print(f"\n{len(roles)} uzman paralel olarak başlatılıyor...")8 opinions = run_swarm(roles, task)9 for o in opinions:10 print(f"\n[{o['role']}]\n{o['opinion']}")1112 # isteğe bağlı tartışma turu: uzmanlar birbirine yanıt verir13 if debate:14 print("\nTartışma turu, uzmanlar birbirine itiraz ediyor...")15 opinions = debate_round(roles, task, opinions)1617 # şeytanın avukatı sürünün anlaşmasına saldırır18 print("\nŞeytanın avukatı anlaşmada bir çatlak arıyor...")19 devil = run_devil(task, opinions)20 print(f"\n[Şeytanın avukatı]\n{devil}")2122 # birleştirme, sonuçları ve avukatın saldırısını uzlaştırır23 print("\nBirleştirme sonuçları uzlaştırıyor...")24 opinions_plus = opinions + [{"role": "Şeytanın avukatı", "opinion": devil}]25 verdict = merge_opinions(task, opinions_plus)26 print(f"\n=== NİHAİ KARAR ===\n{verdict}")27 return verdict2829if __name__ == "__main__":30 analyze(31 "Ücretsiz katmanı kaldırıp ürünü 14 günlük deneme süresiyle "32 "tamamen ücretli yapmak istiyoruz. Bunu yapmalı mıyız?"33 )
Bunu çalıştırdığınızda, tüm boru hattını göreceksiniz: orkestratör rolleri seçer, uzmanlar gerçeği kendi açılarından keser, tartışma turunda birbirleriyle tartışır, avukat anlaşmalarına saldırır ve birleştirme, saldırı da dahil olmak üzere her şeyi kapsayan bir karar verir. Aynı soruya tek bir ajan "kitlenize bağlı" gibi belirsiz bir cevap verirken, sürü, çatışmaların açık olduğu ve fikir birliğinin stres testinden geçirildiği yapılandırılmış bir döküm verir.
Bu Sürüyü Çalıştıran Şey Nedir?
Üç şey, kullanışlı bir sürüyü ajanlardan oluşan bir tiyatrodan ayırır.
Roller çelişmeli, tamamlamamalı. Uzmanlarınız "bir pazarlamacı, bir SMM uzmanı, bir içerik yöneticisi" ise, çıkarları çakıştığı için neredeyse aynı cevapları vereceklerdir. Gerçek değer, çıkarlar çatıştığında ortaya çıkar: büyüme vs sürdürülebilirlik, hız vs kalite, şimdi para vs sonra güven. Çıkar çatışması, kararı açan şeydir.
Uzmanlar birbirini görmemeli. Bir uzman diğerinin görüşünü görür görmez uyum başlar, ayarlama yapar. Bağımsızlık bir uygulama detayı değil, bir çalışma koşuludur. Paralel başlatma bunu bedavaya verir.
Birleştirme ortalama almaz, çatışmayı korur. Kötü bir sentez, beş keskin görüşü tek bir dişsiz özete dönüştürür. İyi bir sentez, çatışmayı görünür bırakır, çünkü çatışma en değerli bilgidir: kararın gerçekten riskli olduğu yeri gösterir, herkesin kafa salladığı yeri değil.
Nerede Genişletmeli
Bu iskelet bariz yönlerde genişletilebilir. Bir tartışma turu ekleyebilirsiniz: ilk birleştirmeden sonra, uzmanlara özeti gösterin ve itiraz etmelerine izin verin, bu çatışmaları keskinleştirir. Argümanları tartmak için uzmanların üzerine daha güçlü bir modelde bir yargıç koyabilirsiniz. Rolleri, yinelenen bir karar türü için kalıcı hale getirebilirsiniz, böylece her seferinde oluşturmazsınız.
Ancak temel prensip aynı kalır: farklı mercekler, bağımsız analiz, anlaşmazlığa saygı duyan bir sentez. Bir sürü, analiz için kullanışlıdır çünkü çok sayıda ajan vardır değil, farklı bakar ve birbirlerinin ortak bir paydaya kaymasına izin vermezler. Şu anda kendi kafanızda çevirdiğiniz bir kararı alın ve böyle bir sürüden geçirin. Daha önce tutmadığınız açıları göreceksiniz.





