Takip et

Semantic Kernel’de Yapay Zeka Ajanları: ChatCompletionAgent, AgentGroupChat ve Orkestrasyon

Yapay zeka teknolojileri, günümüz yazılım dünyasında devrim niteliğinde değişimler yaratmaya devam ediyor.

Semantic Kernel’de Yapay Zeka Ajanları: ChatCompletionAgent, AgentGroupChat ve Orkestrasyon

Yapay zeka teknolojileri, günümüz yazılım dünyasında devrim niteliğinde değişimler yaratmaya devam ediyor. Özellikle büyük dil modellerinin (LLM’ler) yükselişiyle birlikte, bu modelleri daha akıllı ve otonom hale getiren “ajan” kavramı merkezi bir rol oynamaya başladı. Microsoft’un açık kaynaklı SDK’sı Semantic Kernel, bu ajanların geliştirilmesi, yönetilmesi ve birbirleriyle işbirliği yapmasının anahtar araçlarından biridir. Bu makalede, Semantic Kernel ekosistemindeki ChatCompletionAgent, AgentGroupChat gibi temel yapı taşlarını ve bu ajanların karmaşık görevleri yerine getirmek için nasıl orkestre edildiğini detaylı bir şekilde inceleyeceğiz.

Semantic Kernel’e Giriş ve Ajan Kavramı

Semantic Kernel, geliştiricilerin büyük dil modellerini (LLM’ler) kullanarak akıllı uygulamalar oluşturmasını sağlayan hafif bir SDK’dır. LLM’lerin doğal dil işleme yeteneklerini mevcut kod ve hizmetlerle entegre etmeyi kolaylaştırır. Bu entegrasyonun merkezinde ise “ajanlar” yer alır. Ajanlar, belirli hedeflere ulaşmak için LLM’leri, araçları ve harici servisleri kullanarak karar verebilen, plan yapabilen ve eylem gerçekleştirebilen otonom varlıklardır.

Semantic Kernel Nedir?

Semantic Kernel, LLM’leri sadece birer sohbet arayüzü olmaktan çıkarıp, onları programlanabilir bileşenlere dönüştüren bir çerçevedir. Geleneksel yazılım mühendisliği prensiplerini yapay zeka ile birleştirerek, geliştiricilerin LLM’leri fonksiyonlar (Semantic Functions ve Native Functions) aracılığıyla çağırmasına, bu fonksiyonları zincirlemesine ve böylece karmaşık iş akışları oluşturmasına olanak tanır. Python, C# ve Java dillerinde kullanılabilir olması, geniş bir geliştirici kitlesine hitap etmesini sağlar.

Yapay Zeka Ajanları Neden Önemli?

Geleneksel LLM uygulamalarında kullanıcı, her adımı manuel olarak yönlendirmek zorundaydı. Yapay zeka ajanları ise bu süreci otonom hale getirir. Bir hedefe ulaşmak için kendi başlarına plan yapabilir, gerekli araçları seçebilir, eylemleri gerçekleştirebilir ve sonuçları değerlendirebilirler. Bu, özellikle çok adımlı, karmaşık ve dinamik görevlerde insan müdahalesini azaltarak verimliliği artırır ve daha sofistike yapay zeka uygulamalarının önünü açar.

Semantic Kernel’deki Ajan Mimarisi

Semantic Kernel’deki ajan mimarisi, modüler ve genişletilebilir bir yapı sunar. Temel olarak, bir ajan bir LLM’i, bir dizi aracı (fonksiyonlar) ve bir hafızayı (konuşma geçmişi, bağlam) bir araya getirir. Bu ajanlar, belirli bir rol ve hedefe göre yapılandırılır. Semantic Kernel, tek bir ajandan oluşan basit sistemlerden, AgentGroupChat gibi çoklu ajanların işbirliği yaptığı karmaşık sistemlere kadar geniş bir yelpazede çözümler sunar.

ChatCompletionAgent: Temel Yapı Taşı

ChatCompletionAgent, Semantic Kernel’deki en temel ve yaygın kullanılan ajan türüdür. Adından da anlaşılacağı gibi, bir sohbet tamamlama modelini (genellikle bir LLM) temel alarak çalışır ve doğal dil girdilerini işleyerek yanıtlar üretir. Ancak sadece sohbet etmekle kalmaz, aynı zamanda tanımlanan araçları (fonksiyonları) kullanarak belirli eylemleri de gerçekleştirebilir.

ChatCompletionAgent’ın Rolü

ChatCompletionAgent, bir kullanıcının veya başka bir ajanın mesajlarını alır, bu mesajları ve mevcut bağlamı (hafıza) kullanarak bir LLM’e iletir. LLM’den gelen yanıtı işler ve gerektiğinde tanımlanmış araçları çağırır. Örneğin, bir hava durumu ajanı, “Bugün İstanbul’da hava nasıl?” sorusunu aldığında, hava durumu API’sini çağıran bir aracı tetikleyebilir ve bu aracın sonucunu kullanıcıya doğal dilde sunabilir.

Agent Tanımlama ve Yapılandırma

Bir ChatCompletionAgent oluşturmak, ona bir isim, bir açıklama ve kullanacağı bir sohbet servisi (LLM) atamakla başlar. Ayrıca, ajanın erişebileceği araçları (fonksiyonları) da tanımlamak gerekir. Bu araçlar, harici API’leri çağıran, veritabanı sorgulayan veya dahili hesaplamalar yapan fonksiyonlar olabilir.


from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
from semantic_kernel.kernel import Kernel

# Kernel'i başlat
kernel = Kernel()

# Sohbet servisini (LLM) ekle
service_id = "default"
kernel.add_service(
    OpenAIChatCompletion(
        service_id=service_id,
        ai_model_id="gpt-4o",
        api_key="YOUR_OPENAI_API_KEY"
    )
)

# Basit bir fonksiyon (araç) tanımlayalım
async def get_current_time() -> str:
    """Mevcut saati döndürür."""
    import datetime
    return datetime.datetime.now().strftime("%H:%M:%S")

# Ajanı oluştur ve aracı ekle
time_agent = ChatCompletionAgent(
    name="Zaman Ajanı",
    service_id=service_id,
    description="Mevcut zamanı söyleyebilen bir ajan.",
    kernel=kernel
)
time_agent.add_tool(get_current_time)

print(f"{time_agent.name} oluşturuldu.")

Fonksiyon Çağrıları ve Araç Entegrasyonu

ChatCompletionAgent'ın en güçlü özelliklerinden biri, LLM'in kendi başına çözemeyeceği görevler için harici araçları dinamik olarak çağırabilmesidir. LLM, kullanıcı isteğini analiz eder, hangi aracın gerekli olduğunu belirler ve bu aracı çağırarak elde edilen bilgiyi kullanarak yanıtını oluşturur. Bu süreç, "fonksiyon çağrısı" veya "araç kullanımı" olarak adlandırılır ve ajanın yeteneklerini önemli ölçüde genişletir.

AgentGroupChat: Ajanlar Arası İşbirliği

Tek bir ajanın yetenekleri belirli bir noktaya kadar yeterli olsa da, daha karmaşık ve çok yönlü görevler genellikle birden fazla uzmanlık alanını gerektirir. İşte bu noktada AgentGroupChat devreye girer. AgentGroupChat, birden fazla ChatCompletionAgent'ın bir araya gelerek, birbirleriyle sohbet ederek ve işbirliği yaparak ortak bir hedefe ulaşmasını sağlayan bir yapıdır.

Çoklu Ajan Yaklaşımı

Çoklu ajan sistemleri, her ajanın belirli bir rolü ve uzmanlığı olduğu bir insan ekibine benzer. Örneğin, bir yazılım geliştirme ekibinde bir "planlama ajanı", bir "kodlama ajanı" ve bir "test ajanı" bulunabilir. Bu ajanlar, görevi parçalara ayırır, kendi uzmanlık alanlarında çalışır ve birbirleriyle iletişim kurarak ilerler. Bu yaklaşım, karmaşık problemleri daha yönetilebilir parçalara ayırarak çözüm sürecini hızlandırır ve kalitesini artırır.

AgentGroupChat Nasıl Çalışır?

AgentGroupChat, bir sohbet odası gibi düşünülebilir. Ajanlar bu odada birbirlerine mesaj gönderir, sorular sorar, bilgi paylaşır ve görevleri delege eder. Her ajanın kendi hafızası, araçları ve kişiliği vardır. Grup sohbeti, belirli bir moderatör veya önceden tanımlanmış kurallar çerçevesinde ilerler. Bir ajan bir mesaj gönderdiğinde, diğer ajanlar bu mesajı değerlendirir ve uygun olan ajan yanıt verir veya bir eylem gerçekleştirir.


from semantic_kernel.agents import ChatCompletionAgent, AgentGroupChat
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
from semantic_kernel.kernel import Kernel

kernel = Kernel()
service_id = "default"
kernel.add_service(
    OpenAIChatCompletion(
        service_id=service_id,
        ai_model_id="gpt-4o",
        api_key="YOUR_OPENAI_API_KEY"
    )
)

# Ajan 1: Matematik Uzmanı
math_agent = ChatCompletionAgent(
    name="Matematik Uzmanı",
    service_id=service_id,
    description="Matematiksel problemleri çözmede uzmanlaşmış bir ajan.",
    kernel=kernel
)

# Ajan 2: Genel Bilgi Ajanı
info_agent = ChatCompletionAgent(
    name="Bilgi Ajanı",
    service_id=service_id,
    description="Çeşitli konularda genel bilgi sağlayabilen bir ajan.",
    kernel=kernel
)

# Grup sohbetini oluştur
group_chat = AgentGroupChat(
    agents=[math_agent, info_agent],
    kernel=kernel,
    chat_history_limit=10 # Sohbet geçmişi sınırı
)

# Sohbeti başlat
async def run_group_chat():
    print("Grup Sohbeti Başladı...")
    result = await group_chat.send_user_message("Bana 25'in karekökünü söyle ve ardından Türkiye'nin başkentini belirt.")
    print("\nSohbet Sonucu:")
    for message in result.messages:
        print(f"[{message.sender.name}]: {message.content}")

# run_group_chat() # Gerçek bir senaryoda bu fonksiyon çağrılır

Konuşmacı Seçimi ve Akış Kontrolü

AgentGroupChat'in kritik bileşenlerinden biri, bir sonraki konuşmacıyı seçme mekanizmasıdır. Bu, genellikle bir "konuşmacı seçici" (speaker selector) tarafından yönetilir. Seçici, mevcut sohbet geçmişini ve ajanların rollerini dikkate alarak, verilen mesaja en uygun yanıtı verecek veya bir sonraki adımı atacak ajanı belirler. Bu dinamik seçim, sohbetin verimli ve hedefe yönelik ilerlemesini sağlar. Semantic Kernel, bu seçimi LLM'in kendi karar verme yeteneğine bırakabilir veya özel kurallar tanımlanmasına izin verebilir.

Orkestrasyon: Ajan Akışlarını Yönetme

Orkestrasyon, Semantic Kernel'de ajanların ve araçların belirli bir iş akışını takip ederek karmaşık görevleri yerine getirme sürecini yönetme sanatıdır. Tek bir ajanın veya bir grup ajanın belirli bir hedefe ulaşmak için hangi adımları atacağını, hangi araçları kullanacağını ve hangi sırayla ilerleyeceğini belirler. Bu, yapay zeka uygulamalarının öngörülebilir, güvenilir ve etkili olmasını sağlar.

Orkestrasyonun Önemi

Yapay zeka ajanları güçlüdür, ancak kontrolsüz bırakıldıklarında beklenmedik sonuçlar üretebilir veya verimsiz yollar izleyebilirler. Orkestrasyon, bu potansiyel kaosu düzenli bir iş akışına dönüştürür. Özellikle iş süreçlerinin otomasyonunda, veri analizinde veya karar destek sistemlerinde, her adımın doğru bir şekilde atıldığından ve hedefe ulaşıldığından emin olmak için orkestrasyon vazgeçilmezdir. Ayrıca, hataların izlenmesi, düzeltilmesi ve süreçlerin optimize edilmesi için de merkezi bir rol oynar.

Ajan Akışlarını Tasarlama

Ajan akışlarını tasarlarken, öncelikle görevin net bir şekilde tanımlanması gerekir. Görev, alt görevlere ayrılmalı ve her alt görev için hangi ajanın veya aracın en uygun olduğu belirlenmelidir. Akış şemaları veya durum makineleri gibi geleneksel yazılım mühendisliği araçları, bu tasarım sürecinde oldukça faydalıdır. Semantic Kernel, bu akışları programatik olarak tanımlama ve yönetme esnekliği sunar.

Orkestrasyon Akış Tasarım Adımları:

  1. Görevi Tanımla: Ajanın veya ajan grubunun ulaşması gereken nihai hedef nedir?
  2. Alt Görevlere Ayır: Büyük görevi daha küçük, yönetilebilir parçalara böl.
  3. Ajan/Araç Eşleştirme: Her alt görevi hangi ajanın veya aracın en iyi şekilde yerine getirebileceğini belirle.
  4. Akış Mantığı: Alt görevlerin hangi sırayla ve hangi koşullar altında çalışacağını tanımla (örneğin, bir görev tamamlanmadan diğerine geçilemez).
  5. Hata Yönetimi: Beklenmedik durumlar veya hatalar oluştuğunda ne yapılacağını belirle.
  6. Geri Bildirim Döngüsü: Akışın performansını izle ve sürekli iyileştirme için geri bildirim mekanizmaları oluştur.

Geri Bildirim ve İteratif İyileştirme

Orkestrasyon sadece ilk akışı tasarlamakla kalmaz, aynı zamanda bu akışı sürekli olarak izlemeyi, değerlendirmeyi ve iyileştirmeyi de içerir. Ajanların performansını, karar verme süreçlerini ve araç kullanımlarını kaydederek, zayıf noktaları tespit edebilir ve akışı optimize edebilirsiniz. Kullanıcı geri bildirimleri, LLM'in prompt'larının ayarlanması veya yeni araçların eklenmesi gibi yöntemlerle ajanların daha akıllı ve etkili hale getirilmesi sağlanır.

Orkestrasyon Stratejileri

Farklı orkestrasyon stratejileri mevcuttur:

  • Zincirleme (Chaining): Ajanlar veya araçlar belirli bir sırayla art arda çalışır. Birinin çıktısı diğerinin girdisi olur.
  • Paralel İşleme (Parallel Processing): Bağımsız alt görevler aynı anda birden fazla ajan tarafından işlenir.
  • Koşullu Yönlendirme (Conditional Routing): Bir ajanın çıktısına veya belirli koşullara göre akışın farklı yollara ayrılması.
  • Döngüler (Loops): Belirli bir koşul karşılanana kadar bir dizi adımın tekrar edilmesi.

Gerçek Dünya Uygulamaları ve Senaryolar

Semantic Kernel'deki ajanlar ve orkestrasyon yetenekleri, çok çeşitli gerçek dünya uygulamalarında kullanılabilir. İşte bazı örnekler:

Müşteri Hizmetleri Botları

Gelişmiş müşteri hizmetleri botları, ChatCompletionAgent'ları kullanarak kullanıcı sorularını anlayabilir, AgentGroupChat ile farklı uzmanlık alanlarına sahip ajanları (örneğin, sipariş takibi, teknik destek, faturalama) bir araya getirebilir. Orkestrasyon, botun doğru ajana yönlendirme yapmasını, gerekli bilgileri toplamasını ve karmaşık sorunları çözmesini sağlar. Örneğin, bir ajan sipariş geçmişini sorgularken, diğeri iade politikasını açıklayabilir.

Veri Analizi ve Raporlama Ajanları

Bir veri analizi ajanı, kullanıcıdan bir rapor talebi aldığında, veritabanı sorgulama araçlarını kullanarak verileri çekebilir, ardından bir analiz ajanı bu verileri işleyebilir ve bir raporlama ajanı sonuçları görselleştirebilir veya özetleyebilir. Bu süreçlerin tamamı, orkestrasyon ile otomatikleştirilebilir. Kullanıcı, sadece doğal dilde bir talep sunar ve tam bir rapor alır.

Yazılım Geliştirme Asistanları

Yazılım geliştirme süreçlerinde, bir "gereksinim analizi ajanı" kullanıcıdan istekleri toplayabilir, bir "kodlama ajanı" bu gereksinimlere göre kod yazabilir ve bir "test ajanı" yazılan kodu test edebilir. AgentGroupChat bu ajanların işbirliğini sağlayarak, yazılım geliştirme döngüsünü hızlandırır ve geliştiricilere önemli ölçüde yardımcı olur.

Eğitim ve Öğrenme Platformları

Eğitim platformlarında kişiselleştirilmiş öğrenme deneyimleri sunmak için ajanlar kullanılabilir. Bir "öğretmen ajanı" ders içeriğini sunarken, bir "mentor ajanı" öğrencinin sorularını yanıtlayabilir ve bir "değerlendirme ajanı" öğrencinin ilerlemesini takip edebilir. Orkestrasyon, öğrencinin öğrenme yolculuğunu dinamik olarak uyarlayarak en verimli eğitimi sağlar.

En İyi Uygulamalar ve Dikkat Edilmesi Gerekenler

Semantic Kernel'de ajan tabanlı sistemler geliştirirken dikkate alınması gereken bazı önemli noktalar ve en iyi uygulamalar şunlardır:

Ajan Rollerini Net Tanımlama

Her ajanın belirli bir rolü, sorumlulukları ve yetenekleri olmalıdır. Rollerin net bir şekilde tanımlanması, ajanlar arasındaki çakışmaları önler ve her ajanın kendi uzmanlık alanında en iyi performansı göstermesini sağlar. Açık ve kısa açıklamalar, LLM'in ajanın amacını daha iyi anlamasına yardımcı olur.

Güvenlik ve Gizlilik

Ajanlar, hassas verilere erişim sağlayabilen veya harici sistemlerle etkileşime girebilen araçlar kullanabilir. Bu nedenle, güvenlik ve gizlilik en üst düzeyde tutulmalıdır. Araçlara verilen izinler minimumda tutulmalı (least privilege principle), veri şifreleme kullanılmalı ve hassas bilgilerin LLM'e doğrudan ifşa edilmesinden kaçınılmalıdır. Gerekirse, veri maskeleme veya anonimleştirme teknikleri uygulanmalıdır.

Performans Optimizasyonu

LLM çağrıları maliyetli ve zaman alıcı olabilir. Performansı optimize etmek için, gereksiz LLM çağrılarından kaçınılmalı, önbellekleme (caching) stratejileri kullanılmalı ve akışlar mümkün olduğunca verimli tasarlanmalıdır. Ayrıca, daha küçük ve daha spesifik LLM'ler veya açık kaynaklı modeller, maliyet ve hız açısından avantaj sağlayabilir.

Hata Yönetimi ve Dayanıklılık

Ajanlar, harici API'lerin başarısız olması, LLM'in hatalı yanıtlar vermesi veya beklenmedik kullanıcı girdileri gibi çeşitli hata durumlarıyla karşılaşabilir. Sağlam bir hata yönetimi stratejisi geliştirmek çok önemlidir. Hataların yakalanması, uygun mesajlarla kullanıcıya bildirilmesi ve gerekirse akışın güvenli bir şekilde sonlandırılması veya alternatif yolların denenmesi sağlanmalıdır. Yeniden deneme (retry) mekanizmaları da faydalı olabilir.

Sonuç

Semantic Kernel, ChatCompletionAgent ile tekil ajan yeteneklerinden, AgentGroupChat ile işbirliğine dayalı çoklu ajan sistemlerine ve karmaşık görevleri yöneten güçlü orkestrasyon mekanizmalarına kadar geniş bir yelpazede yapay zeka ajanları geliştirmek için kapsamlı bir çerçeve sunar. Bu yapı taşları sayesinde geliştiriciler, LLM'lerin potansiyelini tam anlamıyla kullanarak daha akıllı, otonom ve etkileşimli uygulamalar oluşturabilirler. Yapay zeka ajanlarının geleceği, şüphesiz ki bu tür çerçevelerle şekillenecek ve günlük hayatımızdaki birçok süreci daha verimli ve akıllı hale getirecektir. Semantic Kernel, bu heyecan verici geleceğin kapılarını aralayan önemli bir anahtardır.

SSS (Sık Sorulan Sorular)

Semantic Kernel ajanları ne işe yarar?

Semantic Kernel ajanları, büyük dil modellerini (LLM'ler) kullanarak belirli hedeflere ulaşmak için karar verebilen, plan yapabilen ve eylem gerçekleştirebilen otonom yazılım varlıklarıdır. Kullanıcı isteklerini anlar, araçları çağırır ve karmaşık görevleri otomatikleştirirler.

ChatCompletionAgent ile AgentGroupChat arasındaki fark nedir?

ChatCompletionAgent, tek bir LLM'i temel alan ve belirli araçları kullanarak görevleri yerine getiren temel bir ajandır. AgentGroupChat ise birden fazla ChatCompletionAgent'ın bir araya gelerek birbirleriyle iletişim kurduğu ve işbirliği yaptığı daha karmaşık bir yapıdır. Grup sohbeti, çoklu uzmanlık gerektiren görevler için idealdir.

Orkestrasyon neden önemlidir?

Orkestrasyon, yapay zeka ajanlarının belirli bir iş akışını takip ederek karmaşık görevleri düzenli ve öngörülebilir bir şekilde yerine getirmesini sağlar. Ajanların hangi adımları atacağını, hangi araçları kullanacağını ve hangi sırayla ilerleyeceğini yöneterek, sistemlerin güvenilirliğini ve etkinliğini artırır.

Semantic Kernel ajanları güvenli mi?

Semantic Kernel, güvenlik mekanizmaları sunsa da, ajanın güvenliği büyük ölçüde geliştiricinin uygulamasına bağlıdır. Araçlara verilen izinlerin kısıtlanması, hassas verilerin korunması, veri şifrelemesi ve sağlam hata yönetimi gibi en iyi uygulamaların takip edilmesiyle ajan sistemlerinin güvenliği artırılabilir.

Semantic Kernel ajanları hangi dillerde geliştirilebilir?

Semantic Kernel, Python, C# ve Java dillerinde SDK'lar sunar. Bu dillerden herhangi birini kullanarak Semantic Kernel ajanlarını geliştirebilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık