Yapay Zeka ve Makine Öğrenmesi Backend Entegrasyonu: .NET ile Akıllı Uygulamalar İnşa Etmek
Yapay zeka (AI) ve makine öğrenmesi (ML), artık yalnızca veri bilimcilerin tekelinde değil. Modern backend geliştiricileri, uygulamalarına akıllı özellikler entegre etmek için güçlü araçlara ve kütüphanelere sahip. .NET ekosistemi, bu alanda önemli bir dönüşüm geçiriyor. Artık bir .NET geliştiricisi, Python bilmeden kendi ML modellerini eğitebilir, büyük dil modellerini (LLM) uygulamalarına entegre edebilir ve karmaşık AI iş akışları oluşturabilir. Bu yazıda, .NET'te AI/ML entegrasyonunun temel yapı taşlarını, araçlarını ve en iyi pratiklerini detaylıca ele alacağız.
1. ML.NET: .NET Geliştiricileri İçin Yerel Makine Öğrenmesi
ML.NET, .NET geliştiricilerinin mevcut .NET becerilerini kullanarak özel makine öğrenmesi modelleri geliştirmesini sağlayan açık kaynaklı, cross-platform bir framework'tür. ML.NET, on yılı aşkın süredir Microsoft içinde (Windows, Azure, SQL, Bing) yaygın olarak kullanılmıştır.
A. ML.NET ile Model Eğitimi ve Kullanımı
ML.NET, sınıflandırma, regresyon, anomali tespiti, kümeleme ve tavsiye sistemleri gibi yaygın ML görevlerini destekler. Model eğitimi iki şekilde yapılabilir:
-
Kod Tabanlı (Code-First): Geliştiriciler, C# kodlarıyla veri yükleme, dönüştürme, eğitim ve değerlendirme pipeline'ları oluşturur.
-
Model Builder (UI Tabanlı): Visual Studio uzantısı olan Model Builder, görsel bir arayüzle veri seti seçimi, model eğitimi ve performans değerlendirmesi yapılmasını sağlar.
B. ONNX ve Diğer Framework'lerle Entegrasyon
ML.NET, TensorFlow ve ONNX gibi diğer popüler ML framework'leriyle entegre çalışabilir. Örneğin, Python'da eğitilmiş bir modeli ONNX formatında dışa aktararak, ML.NET üzerinden .OnnxScoringEstimator ile kullanabilirsiniz. ML.NET'in GenAI paketleri ile Phi-3, LLaMA, Mistral gibi modelleri TorchSharp backend ile yerel olarak çalıştırmak da mümkündür.
csharp
// ML.NET ile ONNX modeli yükleme ve tahmin yapma
using Microsoft.ML;
using Microsoft.ML.Transforms.Onnx;
var mlContext = new MLContext();
var pipeline = mlContext.Transforms
.ApplyOnnxModel(modelFile: "model.onnx");
var model = pipeline.Fit(emptyDataView);
var predictionEngine = mlContext.Model.CreatePredictionEngine<InputData, OutputData>(model);
var result = predictionEngine.Predict(new InputData { ... });
C. Yerel LLM Çıkarımı (Inference)
.NET 2026 itibarıyla, yerel LLM çıkarımı ekosistemi önemli ölçüde olgunlaşmıştır. ML.NET'in GenAI paketleri, Phi-3, LLaMA ve Mistral gibi modelleri doğrudan .NET uygulamalarında çalıştırmanıza olanak tanır. Bu sayede, bulut bağımlılığı olmadan, gizlilik ve güvenlik odaklı uygulamalar geliştirebilirsiniz.
2. Microsoft.Extensions.AI: Sağlayıcıdan Bağımsız AI Soyutlama Katmanı
Microsoft.Extensions.AI, .NET uygulamalarının farklı AI hizmetleriyle (OpenAI, Azure OpenAI, Ollama vb.) etkileşim kurmasını sağlayan birleşik bir arayüz (abstraction) katmanıdır. Bu kütüphane, uygulamanızı belirli bir AI sağlayıcısına bağımlı kılmadan geliştirme yapmanıza olanak tanır.
Temel Bileşenler:
-
IChatClient: Tüm LLM istemcilerinin uygulaması gereken temel arayüzdür. -
IEmbeddingGenerator: Metin gömme (embedding) işlemleri için kullanılır. -
Sağlayıcılar: OpenAI, Azure OpenAI, Ollama, HuggingFace vb.
csharp
// Microsoft.Extensions.AI ile sağlayıcıdan bağımsız chat client kullanımı
using Microsoft.Extensions.AI;
using Microsoft.Extensions.AI.OpenAI;
// Azure OpenAI veya OpenAI ile çalışabilir
IChatClient client = new OpenAIChatClient(
endpoint: new Uri("https://your-endpoint.openai.azure.com/"),
apiKey: "your-api-key",
modelId: "gpt-4"
);
var response = await client.GetResponseAsync("Merhaba, nasılsın?");
Console.WriteLine(response.Message);
3. Semantic Kernel: LLM Orkestrasyonu ve AI Ajanları
Semantic Kernel, geliştiricilerin AI ajanları ve çoklu-ajan sistemleri oluşturmasını, orkestre etmesini ve dağıtmasını sağlayan model-agnostik bir SDK'dır. OpenAI, Azure OpenAI, Hugging Face ve daha fazlasını destekler.
Temel Yetenekler:
-
Plugins (Eklentiler): Mevcut kodunuzu (API çağrıları, veritabanı işlemleri vb.) AI'ın kullanabileceği fonksiyonlar olarak tanımlamanızı sağlar.
-
Planners (Planlayıcılar): Karmaşık bir hedefi, mevcut plugin'leri kullanarak otomatik olarak adımlara böler ve çalıştırır.
-
Memories (Bellek): Vektör veritabanları ile entegre çalışarak uzun süreli bağlam sağlar.
csharp
// Semantic Kernel ile basit bir plugin tanımlama ve kullanma
using Microsoft.SemanticKernel;
var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion("gpt-4", endpoint, apiKey);
var kernel = builder.Build();
// Email plugin'i tanımla (örnek)
kernel.ImportPluginFromType<EmailPlugin>();
var result = await kernel.InvokeAsync("SendEmail", new() { ["to"] = "user@example.com", ["body"] = "Hello!" });
4. Azure AI ile Bulut Tabanlı AI Hizmetleri
Azure, .NET geliştiricileri için en zengin AI hizmetleri portföyünü sunar. Azure AI hizmetleri, özel model eğitimi gerektirmeyen, hazır AI yetenekleridir.
A. Azure OpenAI
Azure OpenAI hizmeti, GPT-4, GPT-3.5, Codex ve DALL-E gibi güçlü modellere güvenli, kurumsal düzeyde erişim sağlar. .NET uygulamaları, Microsoft.Extensions.AI.OpenAI paketi ile kolayca entegre olabilir.
B. Azure AI Search (Bilgi Getirme)
Azure AI Search, RAG (Retrieval-Augmented Generation) uygulamaları için vazgeçilmez bir bileşendir. Belgeleri indeksler, vektör gömme (vector embedding) işlemlerini destekler ve anlamsal arama (semantic search) yetenekleri sunar.
C. Azure AI Services (Bilişsel Hizmetler)
Görüntü işleme, metin analizi (duygu analizi, anahtar kelime çıkarma), konuşma metin dönüştürme gibi hazır AI yetenekleri sunar.
5. RAG (Retrieval-Augmented Generation) Mimarisi
RAG, büyük dil modellerinin (LLM) eğitim verilerinde bulunmayan özel verilerle çalışmasını sağlayan bir tekniktir. Temel adımlar:
-
Veri Hazırlama: Belgeler (PDF, Word, HTML) okunur, temizlenir ve anlamlı parçalara (chunk) bölünür.
-
Gömme (Embedding) Oluşturma: Her parça, bir gömme modeli (ör.
text-embedding-ada-002) kullanılarak vektör (sayı dizisi) haline dönüştürülür. -
Vektör Veritabanına Kaydetme: Oluşturulan vektörler, bir vektör veritabanında (ör. Qdrant, Azure AI Search, SQL Server vektör özelliği) indekslenir.
-
Sorgu ve Getirme: Kullanıcı sorusu da bir vektöre dönüştürülür ve vektör veritabanında en benzer parçalar aranır.
-
Bağlam Oluşturma: Bulunan ilgili parçalar, kullanıcı sorusuyla birleştirilerek LLM'e gönderilir.
-
Yanıt Üretme: LLM, verilen bağlama dayanarak doğru ve güncel bir yanıt üretir.
.NET'te RAG Pipeline'ı:
csharp
// RAG pipeline özeti (Semantic Kernel ile)
// 1. Veriyi yükle ve chunk'lara böl
var chunks = await LoadAndChunkDocumentsAsync();
// 2. Embedding oluştur
var embeddings = await embeddingGenerator.GenerateAsync(chunks);
// 3. Vektör veritabanına kaydet
await vectorStore.UpsertAsync(chunks, embeddings);
// 4. Sorgu işleme
var queryEmbedding = await embeddingGenerator.GenerateAsync(userQuery);
var relevantChunks = await vectorStore.SearchAsync(queryEmbedding);
// 5. LLM'e bağlam ile gönder
var context = string.Join("\n", relevantChunks);
var answer = await chatClient.GetResponseAsync($"{context}\n\nSoru: {userQuery}");
6. Vektör Veritabanları ve Gömme (Embedding) Yönetimi
Vektör veritabanları, RAG mimarisinin bel kemiğidir. Gömme (embedding) işlemleri, metin, görüntü veya ses gibi verileri anlamsal olarak temsil eden vektörler oluşturur.
Popüler Vektör Veritabanları ve .NET:
-
Qdrant: .NET istemcisi mevcuttur.
-
Azure AI Search: Vektör indeksleme ve arama desteği sunar.
-
SQL Server: Vektör özelliği (önizleme) ile vektör araması destekler.
csharp
// Vektör veritabanına kaydetme ve arama (kavramsal)
public interface IVectorStore
{
Task UpsertAsync(IEnumerable<DocumentChunk> chunks, IEnumerable<float[]> embeddings);
Task<IEnumerable<DocumentChunk>> SearchAsync(float[] queryEmbedding, int topK = 5);
}
7. Gerçek Dünya Senaryoları ve En İyi Pratikler
A. Kullanım Senaryoları:
-
Akıllı Müşteri Desteği: RAG ile dokümanlar üzerinden soru-cevap botları.
-
İçerik Özetleme ve Oluşturma: LLM'lerle rapor, e-posta veya ürün açıklaması üretme.
-
Duygu Analizi ve Sınıflandırma: Müşteri geri bildirimlerini analiz etme.
-
Tavsiye Sistemleri: Kullanıcı davranışlarına göre öneriler sunma.
-
Görüntü Tanıma ve Nesne Tespiti: Azure AI Görüntü İşleme ile.
B. En İyi Pratikler:
-
Sağlayıcıdan Bağımsız Geliştirme:
Microsoft.Extensions.AIkullanarak farklı LLM sağlayıcıları arasında geçiş yapabilme esnekliği kazanın. -
Güvenlik ve Kimlik Doğrulama: Production ortamında, geliştirme kolaylığı sağlayan
DefaultAzureCredentialyerineManagedIdentityCredentialgibi özel kimlik doğrulama yöntemleri tercih edin. -
Performans ve Maliyet Optimizasyonu: Tokenizer kullanarak token tüketimini ve maliyeti yönetin. Gereksiz API çağrılarından kaçının.
-
Önbellekleme (Caching): Sık yapılan sorgu sonuçlarını önbelleğe alarak gecikmeyi ve maliyeti azaltın.
-
Modüler Mimarı: AI bileşenlerini (embedding, arama, LLM çağrısı) ayrı servisler olarak tasarlayarak test edilebilirliği ve bakımı kolaylaştırın.
Sonuç:
.NET ekosistemi, yapay zeka ve makine öğrenmesi entegrasyonu için güçlü ve çeşitli bir araç seti sunmaktadır. ML.NET ile özel modeller eğitmekten, Microsoft.Extensions.AI ile sağlayıcıdan bağımsız LLM entegrasyonu yapmaya, Semantic Kernel ile karmaşık AI ajanları orkestre etmeye ve Azure AI hizmetleri ile bulutun gücünden yararlanmaya kadar birçok seçenek mevcuttur.
Başarılı bir AI entegrasyonu için doğru aracı seçmek, sağlam bir mimari tasarlamak ve güvenlik, performans ile maliyet optimizasyonunu göz önünde bulundurmak esastır. .NET'in AI alanındaki bu hızlı gelişimi, backend geliştiricilerinin uygulamalarına daha önce hayal bile edilemeyen akıllı yetenekler kazandırmasını mümkün kılmaktadır.