.NET’te Microsoft.Extensions.AI Kütüphanesiyle LLM Kullanımı
Merhaba,
Malumunuz bir önceki Semantic Kernel Nedir? (DeepSeek R1 Eşliğinde .NET Açısından Derinlemesine Değerlendirelim) başlıklı içeriğimizde .NET uygulamalarında AI desteğini oldukça hızlı ve pratik bir şekilde yapılandırabileceğimiz bir araç seti olan Semantic Kernel kütüphanesini incelemiş ve konuya dair teorik ve teknik bir zemin oluşturabilecek içeriği klavyeye almıştık. Bu içeriğimizde ise Semantic Kernel SDK’ini daha da extend edecek olan Microsoft.Extensions.AI kütüphanesini ve bu kütüphane üzerinden .NET uygulamalarındaki LLM’lere dair gösterebileceğimiz davranışları ele alıyor olacağız. O halde buyurun başlayalım…
Microsoft.Extensions.AI Kütüphanesi Nedir?
Microsoft.Extensions.AI; .NET uygulamalarında LLM’lerin karmaşıklığını uygulamadan soyutlayarak çalıştırmak ve yönetmek için Semantic Kernel üzerine inşa edilerek geliştirilmiş bir kütüphanedir. Bu kütüphane sayesinde LLM destekli uygulama geliştiricileri, uygulama koduna radikal müdahalelerde bulunmaksızın Ollama, Azure veya OpenAI gibi LLM sağlayıcıları arasında rahatlıkla geçişler yapabilmekte ve bir yandan da tüm bu süreçteki yapılandırma maliyetlerini minimize edebilmektedir.
Bir başka deyişle, Microsoft.Extensions.AI, belirli bir LLM sağlayıcısına özgü API’ler sunmak yerine, farklı sağlayıcıların ortak temel kavramlara bağlı olarak uygulanabileceği soyutlamalar sunarak geliştiricilerin yapay zeka servisleriyle sorunsuz entegrasyon yapabilmesini sağlamaktadır.
Microsoft.Extensions.AI ile pratikte, .NET uygulamalarına AI/ML modellerini geliştirici dostu API imkanı sayesinde basit ve oldukça anlaşılır bir şekilde kolayca entegre edebilir ve verimli çalışmalar için optimizasyon imkanı sağlayabiliriz. Bu doğrultuda; metin ve duygu analizi, dil çevirisi gibi NLP görevlerini yapabileceğimiz gibi nesne tanıma, yüz tanıma ya da görüntü sınıflandırma gibi görüntü işleme süreçlerini de rahatlıkla yürütebiliriz. Ayrıca tahminleme görevleri veya öneri sistemleri de oluşturarak uygulamalarımızın kalitesini destekleyecek çalışmalar gerçekleştirebiliriz.
Microsoft.Extensions.AI Kütüphanesinin Semantic Kernel’dan Farkı Nedir?
Her ikisi de .NET ekosisteminde yapay zeka (AI) ve makine öğrenimi (ML) ile çalışmak için kullanılan güzide araçlardır 🙂 Lakin bu iki aracın amaçları ve kullanım alanları farklıdır. Şöyle ki;
| Microsoft.Extensions.AI | Semantic Kernel |
|---|---|
.NET uygulamaları için standart yapay zeka soyutlamaları sağlayan bir kütüphanedir. OpenAI, Azure AI Inference, Ollama vs. gibi farklı AI servislerine erişimi standart bir arayüzle yönetmeyi hedeflemektedir. Bu açıdan değerlendirdiğimizde daha çok altyapı seviyesinde bir kütüphane olduğunu söyleyebilir ve AI servislerine doğrudan entegrasyonu kolaylaştırdığını düşünebiliriz.
|
Yapay zeka modellerini programlama mantığıyla birleştirmeye odaklanan bir AI orkestrasyon aracı olduğunu düşünebiliriz. Planlama, bellek yönetimi ve bağlamsal iş akışları(contextual workflows) gibi ek yetenekler eşliğinde, AI modellerini klasik kodlama paradigmalarıyla birleştirmeyi kolaylaştırır.
|
Anlayacağınız; Microsoft.Extensions.AI, .NET uygulamalarına yapay zeka servislerinin uygulama tarafından yapılandırılmasını kolaylaştırmakta ve bunun için bir context yönetimi ve dependency injection yapısı gibi entegrasyon kolaylığı sağlamaktadır. Semantic Kernel ise AI modellerini programatik olarak kullanmayı kolaylaştırarak kod seviyesinde yapay zeka ile uygulamanın gereksinimlerine göre etkileşim sağlamakta ve kullanıcı deneyimiyle ilişkili süreçlere yapay zekanın niteliklerini entegre etmemize imkan tanımaktadır. |
|
Yani kısaca hangi durumlarda hangisini kullanmalıyız hoca la? diye sorduğunuzu duyar gibiyim… Bu sual için kafanızda şöyle bir şema oturtmanız gayet yeterli ve net bir özet olacaktır: Eğer sadece OpenAI, Azure AI vb. AI servislerine erişimi kolaylaştırmak istiyorsan Microsoft.Extensions.AI kütüphanesini, yok eğer AI modellerini iş akışlarına entegre ederek, bağlamsal bellek yönetiminden istifade etmek, planlama yapmak ve uygulamanın gereksinimleri doğrultusunda ilgili AI modelinin davranışını/kapsamını şekillendirmek ve yönlendirmek istiyorsan Semantic Kernel’ı seçebilirsin.
Ollama Nedir?
Ollama, LLM’leri local ortamda çalıştırmayı basitleştiren open source bir platformdur. OpenAI gibi cloud tabanlı çözümlerden farklı olarak DeepSeek, Llama vs. gibi çeşitli açık kaynak modelleri local ortamda ya da dockerize ederek çalıştırabilmekte ve böylece cloud servislerine bağlı kalmaksızın ya da internet bağlantısı gerektirmeksizin AI ile ilgili denemeler yapılmasını kolaylaştırmaktadır.
Dolayısıyla bu içeriğimizde Ollama üzerinden DeepSeek-R1 modelini dockerize edecek ve gerekli pratiksel dokunuşları Microsoft.Extensions.AI kütüphanesi eşliğinde gerçekleştireceğiz. Bunun için aşağıdaki talimatların çalıştırılması yeterlidir;
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama docker exec -it ollama /bin/bash ollama run deepseek-r1
Basit Seviyede Microsoft.Extensions.AI İle Chat Completion
Evet, artık basit seviyede Microsoft.Extensions.AI ile bir chat completion çalışmasına imza atabiliriz. Bunun için bir .NET projesi oluşturalım ve ilgili projeye aşağıdaki kütüphaneleri yükleyerek çalışmalara hazır kıta bir altyapı oluşturalım;
Ardından aşağıdaki gibi asgari bir kurulumla chat completion’ı tamamlayalım;
var builder = Host.CreateApplicationBuilder();
builder.Services.AddChatClient(new OllamaChatClient(new Uri("http://localhost:11434"), "deepseek-r1"));
var app = builder.Build();
var chatClient = app.Services.GetRequiredService<IChatClient>();
var chatCompletion = await chatClient.GetResponseAsync("1 + 1 = ?");
Console.WriteLine(chatCompletion.Message.Text);
Görüldüğü üzere burada pek gösterişli olduğunu iddia edemeyeceğimiz dependency injection dokunuşu eşliğinde basit bir sual üzerinden örneklemde bulunuyoruz. Burada tek dikkatinize değeyecek olan husus, Microsoft.Extensions.AI kütüphanesinin herhangi bir ekstradan API çağrısı gerektirmeksizin hedef AI modeline erişimi sağlayıp, basitçe kullanılabilir kılmasıdır diyebiliriz.
Şimdi bu örneği biraz daha geliştirerek geçmiş bağlam üzerinden bir chat çalışmasına da örnek sunmuş olalım;
var builder = Host.CreateApplicationBuilder();
builder.Services.AddChatClient(new OllamaChatClient(new Uri("http://localhost:11434"), "deepseek-r1"));
var app = builder.Build();
var chatClient = app.Services.GetRequiredService<IChatClient>();
var chatHistory = new List<ChatMessage>();
while (true)
{
Console.Write("Söyle : ");
var prompt = Console.ReadLine();
chatHistory.Add(new ChatMessage(ChatRole.User, prompt));
Console.Write("Cevap : ");
var chatResponse = string.Empty;
await foreach (var response in chatClient.GetStreamingResponseAsync(chatHistory))
{
Console.Write(response.Text);
chatResponse += response.Text;
}
chatHistory.Add(new ChatMessage(ChatRole.Assistant, chatResponse));
Console.WriteLine();
}
Console.Read();
Burada dikkat ederseniz eğer history çalışması için Semantic Kernel’da ki gibi ChatHistory nesnesinden ziyade ChatMessage nesnesi kullanılmakta ve bu nesne türünden bir koleksiyon üzerinde uygulamadaki tüm mesajlar toplanmaktadır. Tabi bunu yaparken de mesajın türüne özel ChatRole verilmektedir. ChatRole, Semantic Kernel ile ilgili önceki içeriğimizde(bknz : Semantic Kernel) ele aldığımız mesaj türleriyle birebir aynı karşılığa sahip olan System, User ve Assistant değerlerini ifade etmektedir. Bu mesaj türlerinin açıklamalarını ilgili yazıdan aşağıda alıntılayarak devam edelim;
- System Messages
Modelin davranışını yönlendirmek için kullanılan mesajlardır. Yani modelin bir rol oynamasını ve belirli kurallar çerçevesinde çalışmasını sağlamak için kullanılırlar. Haliyle bu mesajlar genellikle kullanıcılardan alınmaz ya da gösterilmezler!- User Messages
Kullanıcıların yazdığı mesajlardır. Model, bu mesajlara karşın yanıt üretmekten sorumludur.- Assistant Messages
Yapay zeka modelinin verdiği yanıtlardır.
Ayrıca yine dikkat ederseniz, GetStreamingResponseAsync metodu sayesinde response’u stream olarak edinebilmekteyiz. Harika değil mi? 😉 Evet, bunu Semantic Kernel’da da gerçekleştirebiliyoruz ve web socket ya da SignalR gibi bir teknolojiyle bu stream’e eşlik edip, özellikle web uygulamalarında Chat GPT’de olduğu gibi AI modeliyle akışkan bir şekilde kullanıcı deneyimi açısından gayet kullanışlı ve üst düzey çalışmaları gerçekleştirebiliyoruz.
Nihai olarak;
Microsoft.Extensions.AI kütüphanesi ile esasında Semantic Kernel’ın yaptığı birçok işi gerçekleştirebilmekte ve hatta uygulama gereksinimlerinin detaylarına kadar AI dokunuşları sergileyebilmekteyiz. LLM’leri .NET uygulamalarına entegre ederken hızlı ve basit bir şekilde netice elde etmek isteniyorsa Microsoft.Extensions.AI kütüphanesi de güzel alternatiflerden birisidir diyebiliriz.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…
Not : Örnek çalışmaya aşağıdaki github adresinden erişebilirsiniz.
https://github.com/gncyyldz/MicrosoftExtensionsAI.Example

Selamlar,emeğinize sağlık. Bir back end uygulamasına chati entegre ederek client ile habeleşmek için kısaca bir yol öneriniz olur mı ?
Merhaba,
Bir sonraki içeriğimizde bu konuyu salt olarak ele alıyor olacağız. Ayrıca youtube ile içeriği destekleyeceğiz 🙂 Pek yakında…