Blog

  • UMAI Bilisim
  • 27.07.2026
  • Teknoloji, Semantic Kernel, AI, Agent
  • 0 Comentario(s)

Yerel Yapay Zekâ Agent Geliştirmeye Başlangıç - 2

Semantic Kernel ile Tool Calling ve Gerçek Uygulama Entegrasyonu

İlk makalemizde Ollama üzerinde çalışan yerel bir LLM'i Microsoft Semantic Kernel ile ayağa kaldırmış ve ilk sohbetimizi gerçekleştirmiştik.

Bu bölümde ise artık modeli yalnızca sohbet eden bir yapı olmaktan çıkarıp, uygulamamızın gerçek fonksiyonlarını kullanabilen bir asistana dönüştürüyoruz.


Semantic Kernel'in Oluşturulması

var kernelBuilder = Kernel.CreateBuilder();

kernelBuilder.AddOllamaChatCompletion(
    modelId: OllamaModels.Llama31_8B,
    endpoint: new Uri("http://192.168.5.200:11434"));

kernelBuilder.Plugins.AddFromType<ProductsPlugin>();

var kernel = kernelBuilder.Build();

ProductsPlugin Kernel içerisine eklenerek LLM'in uygulama fonksiyonlarını çağırabilmesi sağlanır.


Plugin Mimarisi

[KernelFunction("get_products")]
[Description("Gets a list of products and names")]
public async Task<List<ProductModel>> GetProductsAsync()
{
    return products
        .Select(p => new ProductModel
        {
            Id = p.Id,
            Name = p.Name
        })
        .ToList();
}

KernelFunction attribute'ü sayesinde bu metot artık LLM tarafından görülebilir.


Parametre Alan Tool

[KernelFunction("get_detail")]
public async Task<ProductModel?> GetDetailAsync(int id)
{
    return products.FirstOrDefault(x => x.Id == id);
}

Model yalnızca fonksiyonu değil, doğru parametreyi de kendisi belirler.


System Prompt

var chatMessages = new ChatHistory();

chatMessages.AddSystemMessage("""
Sen UMAI Bilişim'in yapay zeka ürün asistanısın.
Adın Cemile.

Kurallar:
- Her zaman Türkçe cevap ver.
- Gerektiğinde plugin kullan.
- Emin olmadığın bilgileri uydurma.
- Kullanıcıya samimiyetle cevap ver.
""");

Semantic Kernel'da System Prompt doğrudan Kernel'e değil, ChatHistory içerisine eklenmektedir.

Production Notu

Bu örnekte System Prompt kod içerisindedir.

Gerçek projelerde ise;

  • Veritabanından
  • JSON dosyasından
  • Yönetim panelinden
  • Tenant ayarlarından

dinamik olarak yüklenebilir.


Chat History

Konuşmalar ChatHistory içerisinde tutulmaktadır.

Şimdilik bu yapı In-Memory çalışmaktadır.

Serinin ilerleyen bölümlerinde bunu PostgreSQL üzerinde kalıcı hale getireceğiz.


Tool Calling Ayarları

executionSettings: new OpenAIPromptExecutionSettings()
{
    ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions,
    FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
}

Bu iki ayar sayesinde model;

  • Hangi Tool'un kullanılacağına karar verir.
  • Tool'u otomatik çalıştırır.

Streaming

await foreach (var content in completion)
{
    Console.Write(content.Content);
    fullMessage += content.Content;
}

Bu yöntem kullanıcıya gerçek zamanlı cevap deneyimi sunar.


In-Memory Veri

private readonly List<ProductModel> products = new()
{
    new ProductModel
    {
        Id = 1,
        Name = "Masa Lambası",
        Price = 300,
        InStock = 21
    }
};

Örneğin anlaşılır olması için ürünler bellek üzerinde tutulmaktadır.

Aynı Plugin daha sonra PostgreSQL, SQL Server, REST API veya ERP sistemlerinden veri okuyabilir.

Semantic Kernel açısından hiçbir mimari değişiklik gerekmez.


Tool Calling Destekleyen Modeller

Bu mimarinin çalışabilmesi için kullanılan modelin Tool Calling desteğine sahip olması gerekir.

Örneğin;

  • Llama 3.1
  • Llama 3.2
  • Qwen 2.5
  • Qwen 3 / 3.5

Sonuç

Bu örnek küçük görünse de kurumsal AI uygulamalarının temelini oluşturmaktadır.

Bugün ürün sorguluyoruz.

Yarın aynı yapı ile ERP, CRM, Muhasebe, Logo, Mikro, SAP veya IoT sistemlerini Plugin haline getirerek aynı mimariyi büyütebiliriz.

Serinin sonraki bölümünde Chat History'yi PostgreSQL üzerinde kalıcı hale getirerek Memory mimarisini oluşturacağız.

Dejar un Comentario

Tu comentario se publicara tras la aprobacion del administrador.

3 + 9 = ?