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.
Leave a Comment
Your comment will be published after admin approval.