Yapay Zekâyla Konuşarak Dil Öğrenme Platformu
Kullanıcıların yapay zekâyla yazılı ve sesli konuşma pratiği yapıp ilerlemesini takip edebildiği bir dil öğrenme platformunun backend altyapısı: .NET 8 ile katmanlı bir API, SignalR ile gerçek zamanlı sohbet ve tamamen sunucu tarafında yönetilen OpenAI entegrasyonu.
- Rol
- Backend Developer
- Stack
- .NET 8 · ASP.NET Core Web API · PostgreSQL · EF Core · SignalR · OpenAI API
Bilen ama konuşamayan öğrenci
Dil öğrenen çoğu kişinin hikayesi benzer: kelimeleri ezberlemiş, dil bilgisi kurallarını öğrenmiş, okuduğunu anlıyor. Ama iş konuşmaya geldiğinde takılıyor. Çünkü konuşmak ancak konuşarak gelişen bir beceri ve pratik yapacak birini her an bulmak kolay değil.
SesliDil bu boşluğu kapatmak için tasarlandı: kullanıcının günün herhangi bir saatinde yapay zekâyla konuşabildiği, cevabını anında aldığı ve gelişimini görebildiği bir platform. Bize düşen, bu deneyimin arkasındaki backend'i kurmaktı: kullanıcı verisi, konuşma oturumları, yapay zekâ servisleriyle iletişim ve bunların hepsini web ve mobil istemcilere tutarlı bir API ile açmak.
“Konuşma pratiğini, istenen her an ulaşılabilir bir deneyime dönüştürmek.”
Yaklaşımımız
Yapay zekâ entegrasyonu olan projelerde en kolay yol her şeyi tek bir yere yığmaktır: istek gelir, doğrudan modele gider, cevap geri döner. İlk demo için yeterlidir; ama ikinci, üçüncü özellik geldiğinde kod dağılmaya başlar. Biz baştan sorumlulukları ayırmayı seçtik.
ASP.NET Core Web API üzerinde controller, service ve repository katmanlarını birbirinden ayırdık. OpenAI ve SignalR gibi bileşenler de bu yapının içinde, kendi servislerinin arkasında konumlandı. Geliştirme ortamı Docker ile ayağa kalkıyor, tüm uç noktalar Swagger üzerinden test edilebiliyordu.
Teknik Kararlar
Katmanlı mimari ve net sorumluluklar
Controller'lar yalnızca HTTP isteğini karşılayıp yanıt döndürür; iş kuralları servis katmanında, veri erişimi Entity Framework Core ile repository'lerde yaşar. Bu ayrım sayesinde yeni bir özellik eklemek, mevcut endpoint'lere dokunmadan ilgili servise bir parça eklemek anlamına geldi. Servisler veri katmanından bağımsız olduğu için test edilmeleri ve sonradan değiştirilmeleri de kolaylaştı.
Her endpoint'te aynı yanıt formatı
Bir istemci geliştiricisi için en yorucu şeylerden biri, her endpoint'in farklı şekilde cevap vermesidir. Bunu baştan engellemek için tüm yanıtları ortak bir modelde topladık: işlemin başarılı olup olmadığı, açıklayıcı bir mesaj ve döndürülen veri. Web ve mobil taraf tek bir yanıt işleyicisiyle çalıştı; hata mesajları da her ekranda aynı şekilde gösterilebildi.
Yapay zekâ servisleri backend'in arkasında
Konuşma ve metin tabanlı etkileşimler için OpenAI servisleri kullanıldı, ama istemciler bu servislerle hiç doğrudan konuşmadı; tüm çağrılar backend'deki servisler üzerinden geçti. Bu sayede API anahtarı istemciye hiç inmedi, model ya da istem (prompt) değişiklikleri uygulama güncellemesi gerektirmeden sunucu tarafında yapılabildi ve istemci yalnızca kendi API'mizi tanıdı.
SignalR ile gerçek zamanlı konuşma
Bir konuşma pratiğinde gecikme, deneyimi doğrudan bozar. İstemcinin sürekli "yeni mesaj var mı?" diye sorduğu bir yapı yerine SignalR ile kalıcı bir bağlantı kurduk: ChatHub mesajı alır, servis katmanına iletir ve yanıt hazır olduğunda istemciye anında gönderir. Bağlantı yönetimi ve hata kontrolü bu katmanın ana konularındandı; hub, REST controller'larıyla aynı servis katmanını kullandığı için iş kuralları iki yerde tekrar yazılmadı.
Arayüzden

Sonuç & Etki
Ortaya, yapay zekâ entegrasyonunu uygulamanın geri kalanından ayıran ve büyümeye açık bir backend çıktı. Yeni bir konuşma özelliği eklemek, mevcut yapıyı bozmadan servis katmanına bir parça eklemek anlamına geliyordu; web ve mobil istemciler ise baştan sona aynı yanıt formatıyla çalıştı.
Bu projeden kalıcı olarak taşıdığımız ilke şu: yapay zekâyı ürünün merkezine koyarken onu mimarinin kenarında, kendi servisinin arkasında tutmak. Model, sağlayıcı ya da istem değiştiğinde ürünün geri kalanı bunu hissetmemeli.
Ürününüze yapay zekâ eklemek mi istiyorsunuz?
Mevcut uygulamanıza sohbet, ses ya da büyük dil modeli tabanlı bir özellik eklemek veya .NET ile sağlam bir backend kurmak; hangisi olursa olsun, konuşalım.
Teklif Alın