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.