iToverDose/Yazılım· 26 HAZIRAN 2026 · 20:05

C# Geliştiriciler için AI Asistanı Nasıl Oluşturulur: .NET ile Pratik Rehber

C# ve .NET tecrübesi olanlar için AI asistanı geliştirirken karşılaşılan gerçek zorluklar ve pratik çözümler. Hatalardan öğrenilenler ve kod örnekleriyle adım adım rehber.

DEV Community3 dk okuma0 Yorumlar

Bir .NET geliştiricisi olarak, sadece "AI asistanı yap" göreviyle karşılaştığınızda neler yaşayabilirsiniz? Hype dolu içerikler yerine, gerçek tecrübelerle ve kod odaklı bir rehber.

Günümüzde herkesin elinden düşürmediği AI asistanları, çoğu geliştiricinin uzmanlık alanı dışında kalan konular haline geldi. Peki, C# bilen ancak AI projelerine yabancı olan biri nasıl bir yol izlemeli? Bu hikaye, bir ekip olarak attığımız adımları, düştüğümüz tuzakları ve sonunda başardıklarımızı anlatıyor — sadece teorik bilgiler değil, pratiğe dönük önerilerle.

AI Asistanı Hedefi: Gerçek Zorluk Nedir?

Projemizde, çocukların etkileşimli 3D modellerle (kalp, hücre, volkan gibi) öğrenmesini sağlayan bir uygulama üzerinde çalışıyoruz. Bu uygulamaya eklediğimiz Cori adlı AI asistanı, ekranda gösterilen 3D model hakkında konuşabilen ve hareket ettirebilen bir özellik sunuyor. Örneğin:

  • Kullanıcı: "Kalp modelini sola döndür."
  • Cori: Kalp modeli sola döner.
  • Kullanıcı: "Bu odacık neden daha büyük?"
  • Cori: Odacığın büyüklüğü kalbin pompalama sistemini temsil ediyor. Bu odacık sol ventriküldür...

Buradaki asıl zorluk, AI’nın hem konuşabilmesi hem de hareket ettirebilmesi gerektiği. Üstelik bu işlemler, canlı 3D görüntüleyicide gerçek zamanlı olarak yapılmalı. Bu da bizi, AI modelinden gelen çıktının uygulamaya nasıl iletileceği sorusuna yönlendiriyor.

AI Dünyasına Giriş: Temel Terimler

AI projelerinde sıkça karşılaşılan terimleri anlamak, projeyi yönetmek için kritik önem taşıyor. İşte Cori’nin geliştirilmesi sırasında karşılaştığımız dört temel kavram:

  • LLM (Large Language Model): Metin girişi alır ve metin çıkışı üretir. Tek başına kullanışlı bir işlevselliği yoktur; bir sistemin parçası olarak çalışır.
  • Tokenlar: AI, yanıtı tek seferde vermez. Yanıt, küçük parçalar halinde (token) gönderilir. Bu token’ları akıcı bir şekilde aktarmak, yanıtın anında görünmesini sağlar.
  • Araç Çağırma (Function Calling): AI’ya, kendi fonksiyonlarınızı (örneğin Rotate ya da SearchContent) tanıtabilirsiniz. AI, yanıt oluştururken bu fonksiyonlardan birini çağırmak isteyebilir. Örneğin, "Kalp modelini sola döndür" komutunda AI, Rotate fonksiyonunu çağırır.
  • Agent: AI modeline bellek, araçlar ve özel talimatlar eklenerek yeniden kullanılabilir bir yapıya dönüştürülür. Microsoft’un Agent Framework’ünde bu yapı AIAgent türüyle temsil edilir.

Bu terimler, AI projelerinde kaybolmadan ilerlemenizi sağlayacak kadar basit ama etkili bir temel oluşturuyor.

Hata 1: Satıcı Bağımlılığından Kaçınmak

Projenin ilk aşamalarında yaptığımız en büyük hatalardan biri, AI hizmet sağlayıcısına doğrudan bağımlı hale gelmekti. Özellikle AI dünyasında, teknolojiler hızla değişiyor ve bir SDK’nın yerini başka bir SDK alabiliyor. Bu da projenin gelecekteki bakım maliyetini artırıyor.

Bu nedenle, soyutlama katmanları kullanmaya karar verdik. Uygulama kodunda genel arayüzler kullandık ve gerçek hizmet sağlayıcıyı (OpenAI, Deepgram vb.) bağımlılık ekleme (DI) yoluyla gizledik. Bu yaklaşım sayesinde, sistemdeki herhangi bir bileşeni değiştirmek kolaylaşıyor.

.NET dünyasında bu soyutlama için kullanabileceğiniz araçlardan biri `Microsoft.Extensions.AI` paketidir. Bu paket, AI hizmetlerine erişimi standartlaştırarak, farklı sağlayıcılar arasında geçiş yapmayı kolaylaştırıyor:

  • IChatClient: Sağlayıcıdan bağımsız sohbet ve LLM erişimi
  • IEmbeddingGenerator: Vektör veya semantik arama için gömme oluşturma
  • ITextToSpeechClient: Metinden konuşmaya dönüştürme
  • Microsoft.Extensions.VectorData: Vektör deposu soyutlamaları

Örneğin, OpenAI’yi IChatClient arayüzü arkasına gizlemek için aşağıdaki gibi bir kayıt işlemi yapılabilir:

builder.Services.AddKeyedSingleton<IChatClient>("CoriAI", (sp, _) =>
    sp.GetRequiredService<OpenAIClient>()
       .GetChatClient("gpt-4o-mini")
       .AsIChatClient()
       .AsBuilder()
       .UseFunctionInvocation()
       .Build());

Bu kayıt işlemiyle, IChatClient arayüzünü kullanan tüm kodlar OpenAI’ye doğrudan bağımlı kalmaz. İleride başka bir sağlayıcıya geçmek istediğinizde, sadece bu kayıt işlemini değiştirmeniz yeterli olacaktır.

Semantic Kernel’a Dair Küçük Bir Uyarı

İlk versiyonumuzu geliştirirken, Semantic Kernel adlı framework’ü kullanmıştık. Ancak Microsoft’un Agent Framework’ü yayınlanıp Semantic Kernel’ün geleceği belirsizleşince, projemizin geleceği tehlikeye girdi. Framework’ü doğrudan kullanmak yerine soyutlama katmanlarına odaklanmamız, ileride yaşayacağımız büyük bir yeniden yazma sürecini önledi.

Bu deneyim, soyutlama katmanlarının önemini bir kez daha kanıtladı. Gelecekteki değişikliklere karşı dayanıklı bir sistem kurmak için, soyutlama katmanlarına yatırım yapmak kritik bir adımdır.

Gerçek Zorluk: Çıktıların Uygulamaya Aktarılması

AI modelinden gelen çıktının uygulama tarafından nasıl işleneceği, Cori’nin en kritik bileşenlerinden biriydi. Cori’nin ürettiği çıktılar iki farklı türdeydi:

  • Semantik çıktı: Metin, araç çağrıları ve durum bilgisi
  • Sesli çıktı: Mikrofondan gelen ses verileri ve sentezlenmiş ses

Bu çıktıları gerçek zamanlı olarak uygulamaya aktarmak için, SignalR gibi teknolojilerden yararlanabilirdik. Ancak, uygulamamızın mimarisinde SignalR’in kullanılması, sistemdeki diğer bileşenlerle entegrasyonu zorlaştırabilirdi. Bu nedenle, çıktıları aktarmak için daha esnek bir yol bulmamız gerekiyordu.

Sonuç: Pratikteki Öğretiler ve Geleceğe Bakış

Cori’nin geliştirilmesi sırasında yaşadığımız deneyimler, AI projelerine başlamak isteyen .NET geliştiricileri için önemli dersler içeriyor. Özellikle, soyutlama katmanlarına yatırım yapmak ve sisteminizin gelecekteki değişikliklere karşı dayanıklı olmasını sağlamak, uzun vadede büyük fayda sağlıyor.

AI dünyası sürekli değişiyor ve yeni teknolojiler ortaya çıkıyor. Bu nedenle, projenizin esnek ve bakımı kolay olmasını sağlamak, başarının anahtarıdır. Cori’nin hikayesi, sadece AI asistanı geliştirmenin değil, aynı zamanda .NET dünyasında yenilikçi projeler yapmanın da bir yolunu gösteriyor.

Gelecekte, AI teknolojilerinin daha da erişilebilir hale gelmesiyle birlikte, .NET geliştiricilerinin AI projelerinde daha fazla rol alması kaçınılmaz. Bu rehberin, sizin de benzer projeler geliştirmenize ilham vermesini umuyorum.

Yapay zeka özeti

C# ve .NET kullanarak AI asistanı geliştirmenin gerçek zorlukları ve pratik çözümleri. Soyutlama katmanları, SignalR entegrasyonu ve kod örnekleriyle adım adım rehber.

Yorumlar

00
YORUM BIRAK
ID #PHHJ50

0 / 1200 KARAKTER

İnsan doğrulaması

3 + 8 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.