AutoGen Nedir? Derinlemesine Teorik İnceleyelim…
Merhaba,
Bu içeriğimizde Microsoft tarafından yapay zekâ tabanlı kompleks uygulamaların geliştirilmesini kolaylaştırmak amacıyla sunulmuş bir framework olan AutoGen‘i a’dan z’ye inceleyecek ve tüm yeteneklerini nedensellik çerçevesinde kavramaya çalışıyor olacağız. Evet, heyecanlı ve uzun soluklu bir inceleme olacağı için hiç vakit kaybetmeksizin buyurun başlayalım…
AutoGen Nedir? Ne Amaca Hizmet Etmektedir?
AutoGen; Microsoft tarafından yapay zekâ tabanlı uygulamaların geliştirilmesini kolaylaştırmak amacıyla open source olarak sunulan bir framework’dür. Bu framework temelde, birden fazla yapay zekâ ajanının doğal dil üzerinden etkileşerek karmaşık görevleri birlikte çözebildiği bir ortam sunmakta ve böylece çoklu yapay zekâ ajanlarının (multi-agent LLM systems) bir arada çalıştırılmasını sağlayarak daha karmaşık ve dinamik uygulamaların oluşturulmasına imkan tanımaktadır.
AutoGen Nedir?
AutoGen, özellikle LLM’lerin birlikte işbirliği yapabildiği sistemlerin inşasına odaklanarak, tek bir modelin yaptığı işi birden fazla agent/ajan arasında paylaştırabilmektedir. Farklı uzmanlık alanlarına sahip ajanlar tanımlayabilmekte, bunlar arasında görev paylaşımı ve diyalog gerçekleştirilmesini sağlayabilmekte ve geri bildirim döngüleri oluşturabilmektedir. Böylece modellerin kendi başlarına çözmekte zorlandığı karmaşık görevler, bir orkestrasyon mekanizması sayesinde daha başarılı bir şekilde çözüme kavuşturulabilmektedir.
Nitekim araştırmalar, bir LLM’in cevabındaki hataları başka bir LLM’in ya da insanın işaret etmesi durumunda, modelin performansının önemli ölçüde arttığını göstermektedir. AutoGen işte bu etkileşimli geri bildirim döngüsünü otonom şekilde gerçekleştirmeyi hedeflemektedir.
AutoGen’in Amacı Nedir?
AutoGen, geleneksel tek ajanlı ‘soru-cevap’ modellerini aşarak, birden fazla yapay zekâ bileşeninin senkronize şekilde çalıştığı agentic iş akışlarını hedeflemektedir. Haliyle bu amaç doğrultusunda AutoGen’in gayesini aşağıdaki dört maddeyle özetleyebiliriz;
- Çoklu Ajan Senaryolarını Kolaylaştırmak
Kullanıcıların, birden fazla yapay zekâ ajanını bir sistem içinde kolayca tanımlayıp istediği senaryoları oluşturmasını sağlayabilir. - Otomasyon ve Hata Giderme
Ajanlar birbirlerinin çıktıları üzerine yorum yaparak hataları düzeltebilir ve daha yüksek doğruluk sağlayabilir. - İnsan – Ajan İşbirliği Sağlama
İnsanlar ile yapay zekâ ajanlarının birlikte çalışmasına imkan tanıyabilir. Yani insan, sistemin parçası gibi rol alabilir. - Geliştirici Dostu API Sunmak
Özelleştirilmiş ajanlar yaratmayı kolaylaştıran bir yapı sunabilir.
AutoGen Bileşenleri Nelerdir?
AutoGen’in temel bileşenleri arasında görev odaklı yapılandırılabilen ajanlar, bu ajanların etkileşimlerini yöneten konuşma döngüsü, dil modeli entegrasyonu, gerektiğinde kod çalıştırma yeteneği, esnek yapılandırma seçenekleri ve işbirliğine dayalı stratejiler yer almaktadır. Şimdi gelin bu bileşenleri tek tek hususi olarak irdelemeye odaklanalım…
- Agent (Temsilciler)
AutoGen sistemi bir multi-agent communication framework olarak tasarlandığı için sitemin tüm işleyişi aslında ajanların birbirleriyle mesaj alışverişi yapması üzerine kuruludur. Bu yüzden ajanlar AutoGen’in merkezinde yer alan ana bileşenlerdir ve özel oluşturulabildikleri gibi farklı görevler için önceden tanımlanmış rolleri ve yetenekleri kapsayanAssistantAgent,UserProxyAgent,ConversableAgent,GroupChatManagervs. gibi ön tanımlı olarak varlık gösteren ajanlarda mevcuttur. Bu belirttiklerimiz yaygın olarak kullanıldığı için bunların görevlerini izah etmekte fayda görmekteyim;- AssistantAgent
LLM destekli bir yardımcıdır ve kod yazma, analiz yapma, görev çözme gibi işleri üstlenmektedir. Çoğunlukla bilgi üretir ve kullanıcıya yardımcı olur. - UserProxyAgent
İnsan kullanıcısını temsil etmektedir. Yani bir başka deyişle insan kullanıcı gibi davranış sergilemektedir. Kullanıcının verdiği girdileri alır, diğer ajanlarla etkileşime geçer. Ve bazen kullanıcı onayı gerektiren durumlarda araya girerek sürece müdahale edilebilirlik kazandırır. - ConversableAgent
Tüm ajanlar
ConversableAgent(sohbet edilebilir ajan) base class’ından türetilir. Bu base classKonuşabilmekte ve yeni mesaj alıp verebilmektedir. Özellikle bu ajanlar kendi aralarında konuşarak problem çözebilmekte, bilgi alışverişi yapabilmekte veya belirli görevleri yerine getirebilmektedir.
- GroupChatManager
Birden çok ajan arasında diyalog ve koordinasyonu sağlamakta ve yönetmektedir. Özellikle kompleks görevlerde birden fazla ajanın kendi aralarında uygun veriyle konuşmasını sağlamaktadır.AutoGen’in en güçlü yönlerinden biri, birden fazla ajanın tek bir oturumda grup sohbeti (group chat) halinde çalışabilmesidir. GroupChat yapısı, belirli ajanları bir araya toplayarak ortak bir bağlamda mesajlaşmalarını sağlar. Aşağıdaki gibi SequentialGroupChat ve GroupChat olmak iki temel grup sohbeti modeli bulur;
- SequentialGroupChat (Sıralı Grup Sohbeti)
Ajanların sabit bir sırayla yani sırasıyla konuştukları deterministik iş akışları sağlar. - GroupChat (Dinamik Grup Sohbeti)
Hangi ajanın ne zaman konuşacağına dinamik olarak karar verilen daha esnek bir yaklaşım sağlar.
Ayrıca GroupChatManager, çoklu ajan etkileşimini koordine eden bileşen olmasından dolayı genellikle insan girdisi gerektirmeden arka planda çalışmaktadır ve grup sohbeti sayesinde, tek bir görevi alt görevlere bölüp farklı uzman ajanlara paylaştırarak sonuçları birleştirebilir.
- SequentialGroupChat (Sıralı Grup Sohbeti)
- Diğer Ajan Tipleri
AutoGen kütüphanesi, .NET ekosisteminde belirli platform ve kullanım durumları için de aşağıdaki gibi hazır ajan sınıfları sunmaktadır.- OpenAIChatAgent
OpenAI’ın chat model API’lerini kullanmamızı sağlayan bir ajan sınıfıdır. - SemanticKernelAgent
Semantic Kernel ile entegre çalışabilen bir ajandır. - LMStudioAgent
Local LM Studio aracıyla bağlanıp local modelleri kullanabilen ajandır.
- OpenAIChatAgent
- AssistantAgent
- Conversation / Message System
Ajanlar arasında geçen mesajlar bir ChatHistory veya GroupChat nesnesinde tutulmakta ve bu sayede diyalog geçmişi korunarak, hatırlama ve bağlam yönetimi yapılabilmektedir. - Code Executor
Bazı senaryolarda LLM’lerin ürettiği kodları çalıştırmak gerekebilmektedir. AutoGen, güvenli bir ortamda bu kodların yürütülmesini sağlayan bir code execution backend içermektedir. - LLM Interfaces
AutoGen, OpenAI API ve Azure OpenAI LLM arayüzlerini doğrudan desteklemektedir. Lakin HuggingFace, OpenRouter gibi platformlarla yahut Ollama gibi lokal LLM sunucularıyla kolayca entegre edilebilmektedir. - Function Calling ve Tooling
AutoGen, ajanların dış fonksiyonları çağırabilmesini sağlamakta ve böylece veri çekme, hesaplama yapma ve API çağrısı gibi görevleri birer tool olarak ajanlara kazandırabilmektedir. Bu özellik, Semantic Kernel’daki plugin desteğine benzerlik göstermektedir. - Multi-Agent Workflow (Workflow Engine)
Multi-Agent Workflow, birden fazla ajanın belirli rolleri üstlenerek iş birliği yaptığı, sırayla ya da paralel bir şekilde çalıştığı bir görev yürütme mimarisidir. AutoGen’de bu özellik, birden çok yapay zekâ ajanının, birlikte konuşarak bir problemi çözeceği anlamına gelmektedir.Her ajan, belirli bir rol, amaç ve yetenek seti ile oluşturulmakta, haliyle bu rollere dayalı çalışma neticesinde iş akışı, bu rollerin doğal bir diyaloğu eşliğinde ilerlemesiyle gerçekleşmektedir.
Misal olarak aşağıdaki gibi bir örnek verilebilir;
- UserProxyAgent : Giriş noktasıdır. Kullanıcıdan gelen talebi iletir.
- PlannerAgent : Görevi alt adımlara böler.
- ExecutorAgent : Kod yazar veya çalıştırır.
- ReviewerAgent : Üretilen içeriği gözden geçirir.
- CriticAgent : Eleştirel analiz yapar.
- GroupChatManager : Tüm süreci koordine eder.
Multi-Agent Workflow’da ajanlar arası iletişim bir sohbet misali aşağıdaki gibi işler;
- UserProxyAgent : ‘Bana veri görselleştirme yapan bir Python kodu yaz’
- PlannerAgent : ‘Bunun için 3 adıma ihtiyacımız var: veri okuma, analiz, görselleştirme
- ExecutorAgent : ‘Kod kısmını ben yazayım’
- ReviewerAgent : ‘Kodda eksik grafik tanımı var, düzeltelim’
- ExecutorAgent : Güncellenmiş kodu gönderir
- UserProxyAgent : Sonucu kullanıcıya sunar
Dikkat ederseniz, insanlar yerine ajanlar -insanmış gibi- kendi aralarında konuşmaktadır. Tabi tüm bu konuşmalar
GroupChatveyaGroupChatManagerüzerinden yürütülmektedir.Multi-Agent Workflow özelliği sayesinde yeni roller kolayca eklenebileceği için modüler olan ve baştan sona kendi başına çalışabilecek otonom sistemler yaratabilir ve ayrıca bu sistemleri farklı domain’ler için uzman ajanlar yaratarak genişletebilir bir altyapıda şekillendirebilir ve böylece gerçek dünya görevleri için çok daha yakın modelleme ortaya koyabiliriz.
- Logging ve Debugging Araçları
Her mesaj, çıktı ve işlem izlenebilir şekilde kaydedilir. Bu özellik, özellikle otonom sistemlerin denetlenmesi ve test edilmesi açısından çok değerlidir.
AutoGen Mimarisinin Çalışma Mekanizması Nasıldır?
AutoGen’in .NET sürümünde, tüm ajanlar ortak bir arayüz/interface olan IAgent‘ı uygulamaktadırlar ve ajanlar arasındaki haberleşme mesajlaşma mekanizmasına dayanmaktadır. Geliştirici istediği taktirde ajanlar arasındaki sürece (örneğin, yanıt gelmeden önce ya da sonra) dahil olup müdahale edebilmektedir. Tabi bunun için bir genişletici mekanizma lazımdır. Haliyle bu mekanizma AutoGen’de middleware olarak nitelendirilmektedir. Evet, bir ajana middleware ile özel davranışlar eklenebilmektedir.
AutoGen mimarisinin çalışma mekanizmasını özetlemek gerekirse; geliştirici, projesine uygun ajan tiplerini oluşturur ve gerekiyorsa bunlara middleware’ler veya tool’lar ile özel davranışlar ekleyerek donatır. Ardından ajan(lar) bir görev mesajı alır almaz LLM üzerinden yanıt üretmeye başlar. Geleneksel tekli ajan durumunda cevap doğrudan kullanıcıya döner, lakin çoklu ajan durumunda ise bir ajanın ürettiği yanıt, diğer ajanın girdisi olacak şekilde ajanlar arası mesajlaşma birkaç tur devam edebilir. Bu etkileşim, belirlenen tur sayısına veya “görev tamamlandı” sinyaline ulaşıncaya dek sürebilir.
AutoGen, bu süreçte her mesaj alışverişini bir olay olarak ele alıp, sürecin asenkron ve ölçeklenebilir biçimde çalışabilmesini sağlar. Misal olarak; bir grup sohbetinde ajanlar tek tek sırayla çalışabileceği gibi uygun senaryolarda birden fazla ajanın paralel çalışması da mümkün olabilir. Evet, AutoGen’in tasarımı bu tarz kurumsal ölçekli iş yüklerini de kaldırabilecek esneklik ve güçtedir.
AutoGen’in Semantic Kernel’dan Farkı Nedir?
Bu güne kadar Semantic Kernel aracılığıyla .NET ekosisteminde yapay zekâ entegrasyonları üzerinde çalışmalar yürütmüştük. Haliyle AutoGen ile SK arasındaki farkı tam olarak masaya yatırmakta fayda görmekteyim. AutoGen, neyi farklı kılmakta ve SK’nın çözemediği hangi probleme çözüm getirmektedir? hadi değerlendirelim…
Öncelikle şunu vurgulayalım ki; SK, AutoGen’e göre daha programlama odaklı bir yaklaşımdır ve geliştirici istediği akışı kodla kurmaktadır. AutoGen ise daha ajan odaklıdır ve ajanlar kendi aralarında diyaloglarla planlar yapmaktadır. Buradan yola çıkarak, SK’nın LLM entegrasyonu için araç seti sunduğunu fakat nihai olarak yapılacak işleri geliştiriciden kodlamasını beklediğini amma velakin AutoGen’in ise üst seviye bir çalışma zamanı orkestratörü olduğunu ve birden fazla LLM kullanarak ne yapılacağını dilsel etkileşim yoluyla ajanlar ile saptayıp, yaptığını söyleyebiliriz. Bu yüzden AutoGen, SK’ya kıyasla daha az kodla daha karmaşık etkileşimler kurabilmektedir. Nitekim AutoGen, gerektiği taktirde SK’yı bir araç olarak kullanabilecek bir yapıya da sahiptir (bknz : AutoGen.SemanticKernel) Ee buradan da anlıyoruz ki; AutoGen’in, SK’nın çeşitli AI servislerine bağlanabilmesi, hafıza yönetimi vs. gibi güçlü olduğu yönleri içinde değerlendirebilmesi, esasında rakipten ziyade gerektiği taktirde birbirlerini tamamlayan çözümler olduğuna işarettir. Bu karşılaştırmada söylenebilecek tek husus şudur ki; SK’nın özellikle .NET geliştiricilerine özel olarak aşina gelen bir kod-yazılım yaklaşımı sunduğu, AutoGen’in ise Python dünyasından gelen Agentic AI yaklaşımını .NET’e taşıdığıdır. Bu nedenle AutoGen konsepti, geleneksel .NET uygulama geliştirmeye kıyasla daha deneysel ve araştırma odaklı görülebilmektedir.
Şimdi yukarıdaki soruların cevaplarını vermek için iki yapıyı hem teknolojik hem de amaçsal olarak mukayese edersek farklarını net bir şekilde vurgulamış olacağımızı düşünüyorum.
Teknolojik olarak;
AutoGen, ajan tabanlıdır; SK ise fonksiyon tabanlı. Yani AutoGen LLM ajanları arası etkileşime odaklıyken, SK ise LLM’ler ile geleneksel yazılımlar arasındaki entegrasyona odaklıdır.
Amaçsal olarak;
AutoGen, ajanlar arası işbirliği ve görev otomasyonunu amaç edinirken, SK ise LLM çağrılarını klasik programlara entegre etmeyi ve bu programlarla iletişim kurulabilir hale getirmeyi ya da bir başka deyişle geleneksel yazılımlara yapay zekâ niteliği kazandırmayı amaçlamaktadır.
Bu minvalde AutoGen çok ajanlı sistemleri, ajanlar arası tartışmayı, istişareyi ve işbirliğini hedeflerken, SK ise uygulamaya AI modellerinin yeteneklerini kazandırmayı ve hafıza yönetimini hedeflemektedir.
Şimdi her iki teknolojiyi sundukları hizmetler çerçevesinde aşağıdaki tabloda kıyaslarsak eğer;
| AutoGen Ne Sunmaktadır? | SK Ne Sunmaktadır? |
|---|---|
|
|
Ne Zaman Hangisi?
| Senaryo Örneği | Tavsiye Edilen |
|---|---|
| Birden fazla yapay zekâ ajanı arasında fikir alışverişi gerektiren görevler. | AutoGen |
| LLM’in bir API’yi çağırması, veri çekmesi, iş akışında bir adım olarak görev alması | Semantic Kernel |
| Planlama, komut zinciri çalıştırma | Semantic Kernel |
| Takım gibi çalışan “eleştirmen, kodlayıcı, testçi” gibi ajanlardan oluşan sistem | AutoGen |
| AI destekli uygulamaya fonksiyonel hafıza ve bağlam kazandırmak | Semantic Kernel |
| Bir görev, tek bir modelin yeterli olmadığı; fikir üretme, karar verme, değerlendirme ve yürütme gibi çok aşamalı süreçler içeriyor. | AutoGen |
| Modelin çıktısı, başka bir ajan veya kullanıcı tarafından kontrol edilip, iyileştirme isteniyor. | AutoGen |
| İnsan sistemin içinde aktif rol alıyor. Bazı kararları bizzat veriyor ama diğerlerini LLM’lere bırakıyor. | AutoGen |
| Belirli roller üstlenen yapay zekâ ajanlarının bir konuda tartışma yürütmesi, analiz yapması. | AutoGen |
| Birkaç adımdan oluşan ve insan müdahalesi olmadan tamamlanması istenen görev zincirleri | AutoGen |
AutoGen İle Ne Tarz Agent’lar Oluşturabiliriz?
AutoGen ile oluşturulabilecek ajanlar neredeyse sınırsız çeşitliliğe sahiptir diyebiliriz. Çünkü, her ajan aslında belirli bir rolü, uzmanlığı ve iletişim biçimini temsil etmektedir. AutoGen’in en büyük gücü de burada yatmakta, her ajanı bir takım üyesi gibi özelleştirebilmekte, görevler atayabilmekte ve onları konuşturabilmektedir.
Haliyle tahmini bir bakışla, AutoGen ile oluşturulabilecek ajan türlerini kategorize etmeye çalışırsak eğer şöyle ana başlıklardan oluşan bir özette bulunabiliriz;
- Tekli Sohbet Ajanları
LLM destekli kullanıcı taleplerini yanıtlayan klasik ChatGPT benzeri asistan ajanları oluşturulabilir. - Uzmanlık Temelli Ajanlar
Her biri tekil bir göreve odaklanmış belirli bir konuda uzmanlaşmış ajanlar oluşturulabilir. - İletişim ve Eleştiri Ajanları
Kendi aralarında iletişim kuran, birbirlerinin çıktıları üzerinde çalışan, yorum yapan, geliştiren ve onaylayan ajanlar oluşturulabilir. - Koordinatör ve Planlayıcı Ajanlar
Diğer ajanlar arasında görev dağılımı yapan, yönlendiren ve karar veren koordinatör ve planlayıcı ajanlar oluşturulabilir. - Kullanıcı Temsili Ajanlar
İnsan kullanıcısını temsil eden, gerçek kullanıcıdan bilgi alabilen ve insan gibi davranan ajanlar oluşturulabilir. - Veri ve Bilgi Ajanları
Bilgiye dayalı, belgelere erişebilen, analiz eden ve cevap üreten ajanlar oluşturulabilir.
Function Call Nedir?
Function call, dil modelinin bir fonksiyonu çağırmak istediğini belirtmesini ve bu fonksiyonun dış sistem tarafından çalıştırılmasını sağlayan arayüz gibi bir mekanizma ya da çok ajanlı sistemlerin bir parçasıdır. AutoGen, OpenAI gibi LLM servislerinin sağladığı function call yeteneğinden faydalanarak ajanların ihtiyaç duydukları anda proje içindeki belirli fonksiyonları(tools) çağırmasına imkan tanımaktadır. Bu mekanizma, FunctionCallMiddleware adı averilen bir middleware ile gerçekleştirilir.
AI modeli, belirli bir kullanıcı komutunu aldıktan sonra bu komuta uygun bir fonksiyon tanımı eşleşirse gerekli parametrelerle birlikte bu fonksiyonu çağırmak istediğini belirtir ve dış uygulama bu çağrıyı gerçekleştirir ve sonucu AI modele iletir. AI model ise bu sonucu bağlama göre yorumlayarak son kullanıcıya anlamlı bir çıktı sunar.
Function call özelliğinin temel amacı, LLM’in dış dünya ile etkileşimini sağlamaktır.
Buna örnek vermemiz gerekirse eğer;
Model :
function_call : scheduleMeeting(time="09:00", date="tomorrow")Arkaplanda Google Calendar API çağrılır ve toplantı eklenir. Netice olarak model şu yanıtı verir :
“Toplantınız yarın sabah 9:00’a başarıyla eklenmiştir.”
8 Kritik Soru & 8 Kritik Cevap
Soru 1 | Neden ajan tabanlı yaklaşımlar fonksiyon tabanlı yaklaşımların ötesine geçiyor?
Fonksiyonel yapılar tekil görevleri yerine getirmek için idealdir. Lakin ajan tabanlı sistemler, karar alabilen, fikir yürütebilen, kendi aralarında iletişim kurarak yeni çözümler doğurabilen yapılar oluştururlar. Bu da LLM’leri yalnızca bir “araç” olmaktan çıkarıp, kümülatif düşünebilen zekâ varlıkları haline getirirler.
Soru 2 | AutoGen ile zincirleme düşünme (chain-of-thought) nasıl daha ileri taşınıyor?
Soru 3 | Bir görevin AutoGen ile çözülmesi, çözüm kalitesini nasıl etkiler?
Soru 4 | AutoGen sayesinde ortaya koyulan yapıyı Microservice mimarisi gibi düşünebilir miyiz?
Soru 5 | Ajanlar arası çatışma veya görüş ayrılığı olması avantaj mı, dezavantaj mı?
Soru 6 | 5 yıl içinde AutoGen gibi sistemlerin ulaşabileceği nokta ne olabilir?
StratejiAgent.run() gibi çağrılar ile tüm fikir yürütme hedef ajana devredilebilecek ve AutoGen tarzı sistemler ile şirket içi danışmanlık, R&D simülasyonu, pazarlama stratejisi, yazılım geliştirme vs. gibi alanlarda insanlar arası etkileşimlerin yerini kısmen alacaktır.
Ayrıca (yine muhtemelen) özerk ve kendi görev ağını kuran “self-growing agent networks” kavramı da yükselişe geçecektir.
Soru 7 | Birden fazla uzmanlığa sahip ajan, kolektif olarak hata yapmaktan nasıl korunabilir?
Soru 8 | Bir soruya birden fazla ajan ile cevap vermek çoğu zaman yersiz bir maliyet doğurmaz mı?
▒ Birden fazla ajan demek, genellikle birden fazla LLM çağrısı demektir. Özellikle her ajan birkaç kez düşünüyorsa veya birbirleriyle etkileşime giriyorsa, bu durum ciddi bir token ve latency maliyeti doğurabilir. Dolayısıyla, basit bir soruya 3-4 ajanla yanıt aramak, gereksiz kaynak tüketimi anlamına gelecektir.
▒Haliyle basit bilgi alınan, doğrusal görevlerin işlendiği (örneğin; ‘bir PDF özetinin çıkarılması’ ya da ‘bir SQL sorgusunun yazılması’ vs. gibi) ve tartışma gerektirmeyen tek bir uzmanlık alanının söz konusu olduğu görevlerde birden fazla ajan yersizdir.
▒Birden fazla ajanın söz konusu olacağı çalışmalarda ajan sayısı minimal tutulmalı, her ajan sürece kesinlikle bir katma değer katıyor olmalı ve rolü de net olmalıdır.
AutoGen’de Built-in Message Nedir?
AutoGen’deki ajanlar, görevleri yerine getirirken birbirleriyle structured message objects aracılığıyla iletişim kurmaktadırlar. Bu mesajlar, hem iletişimsel kontrol sağlarlar hem de ajanın hangi adımı uygulayacağını belirlerler.
Başlıca built-in message türleri aşağıdaki gibidir;
- TextMessage
AutoGen’deki en yaygın ve temel mesaj türüdür. Ajanın konuştuğu, öneri sunduğu, fikir beyan ettiği mesajlardır. Herhangi bir görevde bir ajan fikir sunduğunda, çözüm önerdiğinde, açıklama yaptığında veya sadece sohbet ettiğinde bu mesaj tipi kullanılır.Ne zaman kullanılır? : Kod üretiminde, öneri sunmada, normal diyaloglarda
- ImageMessage
Ajanlar arası görsel içerik taşıyan mesaj türüdür. Özellikle multi-modal LLM’lerle kullanılmak üzere tasarlanmıştır.Ne zaman kullanılır? : Arayüz tasarımlarında, görsel analizlerde, görüntüye dayalı görevlerde
- MultiModalMessage
Birden fazla medya türünü (örneğin metin + görsel) aynı anda taşıyan mesaj türüdür. LLM’lere bağlamsal ve zenginleştirilmiş içerik sağlamak için kullanılır.Ne zaman kullanılır? : Görsel destekli açıklamalar, özet + görsel gösterimi, eğitim içerikleri, interaktif diyaloglar
- ToolCallMessage
LLM’in bir tool/function çağrısı yapmak istediği mesajlardır. Bu, function calling özelliğinin AutoGen’e entegre şeklidir ve model bir iş yapmak istediği ama bunun dış bir tool tarafından yapılması gerektiği durumalarda kullanılmaktadır.Ne zaman kullanılır? : API çağrısı durumlarında, dış fonksiyon tetiklenmesi gerektiğinde
- ToolCallResultMessage
ToolCallMessage‘a karşılık gelen cevabı temsil etmektedir. Yani tool/function çalıştırılmış, sonucu elde edilmiş ve bu türde geri bildirilmiştir.Ne zaman kullanılır? : Tool çağrısı sonrası bilgi geri verme durumlarında, karar verme için veri sağlama durumlarında, ajanların süreç devamında karar vermesi durumlarında
- ToolCallAggregateMessage
Birden fazla ToolCallResultMessage‘ın toplu çıktısına karşılık gelmektedir. Yani birden fazla tool çağrısı aynı anda yapılmış ve sonuçlar tek bir mesajla topluca dönülmek istenmiştir. İşte bu durumda da bu mesaj türünden istifade edilmektedir.Ne zaman kullanılır? : Çoklu tool çağrısı sonucunun yönetim süreçlerinde, birden fazla veri kaynağını tek seferde işlemede, ajanın toplu veri üzerinden analiz yapabilmesi gerektiği durumlarda
- MessageEnvelope<T>
Tüm mesajları taşıyan ve sarmalayan üst yapıdır. Generic yapısı sayesinde herhangi bir mesaj sınıfını taşıyabilir ve böylece sistemin tüm mesajları standart bir şekilde izlenmesini ve yönlendirmesini sağlar.Ne zaman kullanılır? : Mesajların sistemsel izlenmesi gerektiğinde; denetleme, loglama, debugging süreçlerinde, ajanlar arası güvenli ve kontrollü mesajlaşmada
AutoGen’in Muadilleri Var mı?
Elbette piyasada AutoGen’in muadili olabilecek, farklı yaklaşımlar ve özelliklerle eşlik edebilecek başka araçlarda mevcuttur. Misal olarak; DeepSeek.ai tarafından geliştirilen ve tamamen yazılım üretimi için optimize edilmiş olan MetaGPT‘yi örnek verebiliriz. Ya da görselleştirilmiş senaryo yahut simülasyon oluşturmanın gerektiği durumlarda tercih edilebilecek olan AgentVerse‘de örnek olarak sunulabilir. Ancak şu bilinmelidir ki; AutoGen, LLM tabanlı ajan sistemleri arasında özgün bir yaklaşım getirmekte ve alanında yenilikçi bir mimari sunmaktadır.
AutoGen’in Sağladığı Avantajlar ve Dezavantajlar Nelerdir?
Bir geliştirici açısından, normalde parçalara bölünüp elle orkestre etmek zorunda kalınacağı bir süreci, ajanların konuşmasıyla otomatik hale getirmek ciddi bir kolaylık olsa gerek. İşte AutoGen, bu tarz çok adımlı ve kompleks görevleri insan müdahalesi olmaksızın çözmeye olanak tanımaktadır. Tabi sağladığı bu kolaylığı teknik açıdan değerlendirdiğimizde, AutoGen’in sunduğu modüler ajan mimarisi sayesinde yoğunluklarına göre ajanlar ölçeklendirilebilmekte ve ihtiyaç dahilinde sisteme yeni bir ajan (yani yetenek) eklenmesi oldukça kolaylaştırılmaktadır. Bunların dışında .NET ekosisteminde AutoGen ile geliştirici deneyimi oldukça rahatlatılmakta ve hazır kütüphaneler ile yüksek seviyeli API’ler sayesinde az kod yazarak çok iş yapılabilmektedir.
AutoGen, bir görevi aldıktan sonra alt adımlara bölme, uygun ajanlara dağıtma ve çıktıları birleştirme işlerini büyük ölçüde kendisi gerçekleştirmektedir. Bu durum, özellikle karmaşık ve çok aşamalı görevlerin çözümünde ciddi bir avantaj sağlamaktadır. Ha, her ne kadar LLM’lerin kararına bırakılan dinamik iş akışları olsa da istenildiği taktirde geliştirici tarafından kontrol edilebilen deterministik akışları da desteklemektedir. Yani istenirse ajanların etkileşimi sıkı bir senaryo doğrultusunda kısıtlanarak yapılacak işin gereksinimine uygun daha özgün bir davranış ortamı sağlanabilir. Haliyle bu ikili opsiyon sayesinde hem güvenilirlik hem de yaratıcılık gerektiren durumlarda aksiyon alınabilir.
AutoGen, çeşitli LLM servislerini ve ek araçları destekleyecek şekilde tasarlanmıştır. Birçok AI modellerini kontrol edebilmekte ve yukarıdaki satırlarda ele aldığımız gibi function call, code executing vs. gibi kabiliyetlerle sürece eşlik edebilmektedir.
Ancak bu güçlü yönlerinin yanında AutoGen’in bazı sınırlamaları ve zorlukları da mevcuttur. Ne gibi? diye sorarsanız biliyorsunuz ki, özellikle birden fazla ajanın olduğu sistemlerde durum(context) yönetimi önem arz etmektedir ve her ajanın sohbet geçmişini, diğer ajanların paylaştığı bilgileri ve genel görev ilerleyişini tutarlı şekilde idame etmek gerekir. Dolayısıyla geliştiricilerin, ajanların paylaştığı ortak bellek veya her bir ajanın kendi belleği konusunda, sorumlulukları üstlenerek özgün ve anlık stratejiler geliştirmesi gerekebilmektedir. Ee hocam, AutoGen her şeyi yapıyor bunu mu yapmıyor! dediğinizi duyar gibiyim… Elbette ki AutoGen temel seviyede mesaj geçmişini takip edebilmekte lakin çok sayıda ajanın ve uzun diyalogların söz konusu olduğu durumlarda ister istemez yetersiz kalabilmektedir.
Bir başka dezavantajlı durum, multi-agent sistemlerin doğal olarak daha fazla hesaplama gereğinden ve bellek tüketiminden kaynaklı tek ajanlı sistemlere nazaran maliyetli olması durumudur. Bundan kaynaklı AutoGen’de optimizasyon önem kazanmakta, özellikle sisteme gereksiz ajan eklenmemesine, yanıtları mümkün olduğunca kısa tutmaya ve paralel işlemleri iyi yönetmeye dikkat edilmelidir. Ayrıca bir ajanın yanıt vermemesi ya da LLM çağrısının başarısız olması gibi hata durumlarını yönetmek multi-agent yapılarda daha karmaşık olabilmektedir. Evet, AutoGen tek tek ajan bazında hata yakalama imkanı sunsa da özellikle ajanlar arası koordineli bir hata düzeltme stratejisini geliştirici tasarlamak mecburiyetindedir. Ee bu da ekstra efor demektir.
Bunların dışında AutoGen ajanları, özellikle araç kullanma ve kod çalıştırma yeteneklerine sahip olduklarında, kötü niyetli çıktılara karşı güvenlik riski söz konusu olabilmektedir. Misal olarak; bir ajan, istemeden zararlı bir komut üretip kod yürüten ajana bunu iletebilir ve böylece her şeyi mahvedecek bir süreci ister istemez kendince tetikleyebilir. İşte böyle bir duruma karşın sınırlandırmalar ve yetkilendirmeler önem kazanmakta ve hatta kişisel veriler, şirket içi bilgiler vs. gibi hassas verilere erişebilen ajanlar sürekli ve yoğun bir şekilde sıkı denetim altında olmalıdırlar.
Nihai olarak;
AutoGen’in, çoklu yapay zekâ ajanlarının bir arada çalışarak karmaşık görevlerin çözülmesi için geliştirilmiş modüler, esnek ve geleceğe dönük bir framework olduğunu gözlemlemiş oluyoruz. İçeriğimiz süresince AutoGen’in, ajanlar arasında yapılandırılmış mesajlar ile iletişim kurulmasını sağlayan, her ajanın belirli bir rol üstlenebilmesine ve gerektiği taktirde dış API’lerle kolayca etkileşime girilebilmesine imkan tanıyan ve klasik LLM çağrılarından ziyade birden çok uzman görüşe sahip ajanı bir araya getirerek, bunların geri bildirim döngüleriyle çıktılarını iyileştirebilen, insan ile makineyi aynı etkileşim çemberine dahil edebilen ve görsel, metinsel, fonksiyonel veri gibi çoklu mesaj türlerini destekleyebilen bir yapay zekâ organizasyonu olduğunu teorik olarak deneyimlemiş ve temellendirmiş bulunuyoruz. Ee hoca! hani pratik dokunuş! diyorsanız eğer merak etmeyin. İçeriği haddinden fazla şişirmemek ve özellikle sizlerin konsantrasyonunu toparlayabilmek için bir sonraki makalenin odağını AutoGen’in pratik kısımlarına yoğunlaştıracak ve AutoGen for .NET ile gerekli kritikleri gerçekleştiriyor olacağız. Haliyle bu süre zarfında sizler bu içeriği okuyup sindirirken, bende diğer içeriği klavyeye alıyor olacağım…
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…
