Tek bir LLM tüm görevleri mükemmel yapamaz. Multi-agent sistemler, uzman ajanların birbirini denetleyerek ve tamamlayarak çalışmasını sağlar. Semantic Kernel'in AgentGroupChat API'si bu orkestrasyonu .NET'te doğal biçimde ifade etmenize olanak tanır.
Temel Ajan Tanımı
// dotnet add package Microsoft.SemanticKernel.Agents.Core
// dotnet add package Microsoft.SemanticKernel.Agents.OpenAI
using Microsoft.SemanticKernel.Agents;
using Microsoft.SemanticKernel.Agents.Chat;
// Kod yazma ajanı
var kodYaziciAjan = new ChatCompletionAgent
{
Kernel = kernel,
Name = "KodYazici",
Instructions = """
Sen uzman bir C# geliştiricisisin.
Verilen göreve göre temiz, çalışır C# kodu yaz.
Sadece kodu ve kısa açıklamayı ver, başka şey ekleme.
"""
};
// Kod inceleme ajanı
var inceleyiciAjan = new ChatCompletionAgent
{
Kernel = kernel,
Name = "Inceleyici",
Instructions = """
Sen kıdemli bir code reviewer'sın.
Yazılan kodu incele: güvenlik, performans ve okunabilirlik açısından değerlendir.
Sorun varsa açıkça belirt. Sorun yoksa ONAYLANDI yaz.
"""
};
AgentGroupChat: Ajanlar Arası Konuşma
// Sonlanma stratejisi: "ONAYLANDI" içeren mesaj gelince dur
var sonlanmaStratejisi = KernelFunctionTerminationStrategy.Create(
kernel.CreateFunctionFromPrompt("""
Konuşma geçmişini incele.
Inceleyici ajanı "ONAYLANDI" yazdıysa "evet" döndür, değilse "hayır" döndür.
Konuşma geçmişi:
{{$history}}
"""),
resultParser: result => result.GetValue<string>()?.Contains("evet") ?? false,
historyVariableName: "history",
maximumIterations: 6);
// Seçim stratejisi: sırayla konuşsunlar
var secimStratejisi = new SequentialSelectionStrategy();
var grupKonusma = new AgentGroupChat(kodYaziciAjan, inceleyiciAjan)
{
ExecutionSettings = new AgentGroupChatSettings
{
TerminationStrategy = sonlanmaStratejisi,
SelectionStrategy = secimStratejisi
}
};
Orkestrasyonu Çalıştırma
grupKonusma.AddChatMessage(new ChatMessageContent(
AuthorRole.User,
"Bir IRepository<T> arayüzü ve generic implementasyonu yaz. CRUD operasyonları olsun."));
await foreach (var mesaj in grupKonusma.InvokeAsync())
{
Console.ForegroundColor = mesaj.AuthorName == "KodYazici"
? ConsoleColor.Cyan : ConsoleColor.Yellow;
Console.WriteLine($"\n[{mesaj.AuthorName}]:");
Console.WriteLine(mesaj.Content);
Console.ResetColor();
}
Console.WriteLine($"\nToplam tur: {grupKonusma.History.Count}");
Plugin Destekli Uzman Ajanlar
// Güvenlik tarayıcısı eklentisi
public class GuvenlikPlugin
{
[KernelFunction("xss_tara")]
[Description("Verilen kodu XSS açıkları için tarar")]
public string XssTara(string kod) =>
kod.Contains("innerHTML") || kod.Contains("document.write")
? "⚠ Potansiyel XSS riski tespit edildi"
: "✓ XSS açığı bulunamadı";
[KernelFunction("sql_injection_tara")]
[Description("SQL Injection açığı tarar")]
public string SqlTara(string kod) =>
kod.Contains("string.Format") && kod.Contains("SELECT")
? "⚠ Potansiyel SQL Injection riski"
: "✓ SQL Injection açığı bulunamadı";
}
// Güvenlik tarayıcı ajanı — plugin ile
var guvenlikAjani = new ChatCompletionAgent
{
Kernel = kernelWithPlugin,
Name = "GuvenlikTarayici",
Instructions = "Sen güvenlik uzmanısın. Kodu güvenlik açıkları için tara ve sonuçları raporla.",
Arguments = new KernelArguments(
new OpenAIPromptExecutionSettings
{
ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
})
};
// Üç ajanlı sistem: Yaz → İncele → Güvenlik Tara
var ucluSistem = new AgentGroupChat(kodYaziciAjan, inceleyiciAjan, guvenlikAjani)
{
ExecutionSettings = new AgentGroupChatSettings
{
TerminationStrategy = sonlanmaStratejisi,
SelectionStrategy = new SequentialSelectionStrategy()
}
};
Multi-agent sistemler, uzmanlaşmış ajanların birbirini denetleyerek yüksek kaliteli çıktılar üretmesini sağlar. Kod yaz-incele-güvenlik tara döngüsü, tek ajana kıyasla çok daha güvenilir sonuçlar üretir. AgentGroupChat'in sonlanma ve seçim stratejileri, orkestrasyon davranışını koddan bağımsız olarak kontrol etmenizi sağlar.