.NET uygulamalarına yapay zekâ eklemek isteyen geliştiricilerin karşılaştığı ilk sorun, her sağlayıcının kendi SDK'sı ve kendi kavramlarıyla gelmesiydi. Bugün OpenAI kullanan bir uygulamayı yarın şirket içinde çalışan bir modele geçirmek, kodun büyük kısmını değiştirmek anlamına geliyordu. Microsoft.Extensions.AI bu sorunu .NET ekosisteminin alışık olduğu yöntemle çözüyor: ortak arayüzler, bağımlılık enjeksiyonu ve ara katmanlar (middleware). Bu yazıda kütüphanenin temel kavramlarını ve pratik kullanımını anlatıyoruz.
Temel soyutlamalar
- IChatClient: Bir dil modeline mesaj gönderip cevap almanın ortak arayüzü. Akışlı (streaming) cevapları da destekler.
- IEmbeddingGenerator: Metinlerden embedding vektörleri üretmenin ortak arayüzü; anlamsal arama ve RAG için.
- ChatMessage, ChatOptions: Mesajlar, roller, sıcaklık, maksimum token gibi ayarlar için ortak tipler.
- AIFunction: Modelin çağırabileceği C# fonksiyonlarını tanımlamak için.
OpenAI, Azure OpenAI, Ollama ve diğer sağlayıcılar için bu arayüzleri uygulayan paketler mevcut. Uygulama kodunuz yalnızca IChatClient'ı bilir; hangi sağlayıcının kullanılacağı yapılandırmada belirlenir.
ASP.NET Core'da kayıt
// Program.cs (sağlayıcı paketine göre değişir)
builder.Services.AddChatClient(sp =>
CreateProviderClient(builder.Configuration)) // OpenAI, Azure, Ollama...
.UseLogging()
.UseFunctionInvocation();
Buradaki zincir, ASP.NET Core middleware mantığına benzer: Her çağrı loglanır, model bir fonksiyon çağırmak isterse otomatik olarak çalıştırılır. Önbellekleme ve OpenTelemetry ile izleme de benzer şekilde eklenebilir. Sağlayıcıya özgü istemci oluşturma kodu için kullandığınız paketin güncel dokümantasyonunu esas alın.
Basit kullanım
public class OzetServisi(IChatClient chat)
{
public async Task<string> OzetleAsync(string metin)
{
var cevap = await chat.GetResponseAsync(
[
new(ChatRole.System, "Metni Türkçe, en fazla 3 cümleyle özetle. Metinde olmayan bilgi ekleme."),
new(ChatRole.User, metin)
]);
return cevap.Text;
}
}
Servis, bağımlılık enjeksiyonu ile IChatClient alır; test sırasında sahte bir istemci verilebilir.
Araç (fonksiyon) çağırma
Modelin uygulamanızdaki bir fonksiyonu çağırmasına izin vermek, onu bir sohbet botundan iş yapan bir asistana dönüştürür. Örneğin "12345 numaralı siparişim nerede?" sorusuna model, sipariş durumunu sorgulayan bir fonksiyonu çağırarak cevap verebilir. Dikkat edilecekler:
- Fonksiyonlar yalnızca okuma yapsın; yazma ve silme işlemleri için ayrı onay adımı olsun.
- Fonksiyon içinde kullanıcının yetkisini kontrol edin; modelin gönderdiği parametreye körü körüne güvenmeyin.
- Dönen veriyi küçük tutun; gereksiz alanlar maliyeti ve hata riskini artırır. Bkz. context engineering.
Yapılandırılmış çıktı
Kütüphane, modelden belirli bir C# tipine uygun cevap istemeyi kolaylaştırır. Bu özellik; fatura alanlarını çıkarmak, destek talebini sınıflandırmak veya yorum analizi yapmak gibi işlerde, cevabı metin olarak ayrıştırma ihtiyacını ortadan kaldırır.
Ajanlar: Microsoft Agent Framework
Daha karmaşık, çok adımlı ve birden fazla ajanın birlikte çalıştığı senaryolar için Microsoft, Semantic Kernel ve AutoGen deneyimini birleştiren Microsoft Agent Framework'ü geliştirdi. Bu çerçeve de temelde Microsoft.Extensions.AI soyutlamalarını kullanır. Basit bir özetleme veya sınıflandırma için doğrudan IChatClient yeterlidir; çok adımlı iş akışları için ajan çerçevesini değerlendirin. Ajanların şirket sistemlerine bağlanması için MCP de önemli bir seçenek.
Üretim için kontrol listesi
- API anahtarlarını kodda değil, gizli yapılandırmada saklayın.
- Zaman aşımı, yeniden deneme ve hız sınırı politikaları tanımlayın.
- Token kullanımını ve maliyeti loglayın. Bkz. yapay zekâ maliyeti.
- Kişisel verileri modele göndermeden önce maskeleyin; KVKK etkisini değerlendirin.
- Sabit bir test setiyle model veya istem değişikliklerinin etkisini ölçün.
Sık sorulan sorular
Semantic Kernel kullanıyorum, değiştirmeli miyim?
Zorunlu değil. Yeni projelerde Microsoft.Extensions.AI'yı temel almak ve ajan ihtiyacı için Microsoft Agent Framework'ü değerlendirmek, ekosistemin gittiği yönle uyumlu bir tercih.
Şirket içinde çalışan bir modelle kullanılabilir mi?
Evet. Ollama gibi yerel model sunucuları için istemci uygulamaları mevcut. Bkz. küçük dil modelleri.
WinForms veya WPF uygulamasında da kullanılabilir mi?
Evet. Kütüphane web'e özgü değildir; masaüstü ve konsol uygulamalarında da aynı arayüzlerle kullanılır.
Sonuç
Microsoft.Extensions.AI, .NET'te yapay zekâ entegrasyonunu sağlayıcıdan bağımsız, test edilebilir ve izlenebilir hale getiriyor. Mevcut .NET uygulamanıza yapay zekâ özellikleri eklemek için bizimle iletişime geçebilirsiniz.