.NET ile Yerel Yapay Zeka (AI) Destekli Sesli ve Yazılı Sohbet Uygulaması: Ollama, Speech-to-Text (STT), Text-to-Speech (TTS)

Kurulum

Github ProjeAyazDuru.Samples.AI.Chat

Docker Desktop'ı yüklediğinizden ve başlattığınızdan emin olun.

Daha sonra AyazDuru.Samples.AI.Chat.AppHost projesini çalıştırıp, ollama, qdrant docker containerlarının başlatıldığından emin olduktan sonra, AyazDuru.Samples.AI.Chat.AppHost ve AyazDuru.Samples.AI.Chat.Console projelerini solution'a sağ tıklayıp >> Configure Startup Projects ile seçip aynı anda çalıştırmanız gerekmektedir. Bu şekilde Aspire Dashboard üzerinden Blazor web projesini ve gerekli container ve aspire service discovery'nin başlatılması sağlanacaktır. Diğer türlü ollama ve qdrant containerlarını manuel olarak başlatmanız gerekecektir.

Blazor Chat Ekranı: Blazor web projesindeki system prompt'unu değiştirebilirsiniz. Microsoft.Extensions.AI.Templates ile varsayılan olarak sadece belgeler hakkında cevap verecek bir system prompt'u yazılmış. wwwroot/Data bulunan pdfler vektörlere çevirilip, vector db'sinde saklanacaktır.

.NET Aspire Dashboard Ekranı: .NET Aspire ile tek tuşla (F5) proje bağımlılıklarını başlatabilirsiniz.

Giriş

Son zamanlarda hepimiz yapay zekâ sohbet botlarını kullanıyoruz ama işin arka planında çoğu bulut tabanlı çalışıyor. Yani internet bağlantısı, gizlilik, hatta bazen de maliyet konuları akla geliyor. Peki, tüm bunları kendi bilgisayarında, tamamen yerel olarak çalıştırmaya ne dersin?

Bu yazıda birlikte adım adım bir yolculuğa çıkacağız. Önce bir konsol uygulaması yazacağız: @ tuşuna bastığında mikrofonun açılacak, EchoSharp-Whisper.Net (STT) kütüphanesini kullanarak konuşmanı gerçek zamanlı olarak yazıya dökecek, sonra Ollama üzerinden llama 3.2 yapay zeka modelini kullanarak cevap alacağız ve yanıtı KokoroSharp (TTS) kütüphanesi ile seslendireceğiz.

Ardından işi bir adım ileri taşıyıp, .NET AI Template kullanarak bir web uygulaması geliştireceğiz. Burada RAG (Retrieval Augmented Generation) mantığıyla PDF’lerini veya özel verilerini yükleyip, sorularına daha akıllı cevaplar alabileceksin. İşin arkasında Qdrant vektör veritabanı ve all-minilm embedding modeli olacak.

Kısacası bu yazı, hem .NET’in yeni AI kütüphanelerini tanıyacağın hem de sıfırdan yerel çalışan sesli & yazılı sohbet uygulaması geliştireceğin pratik bir rehber olacak.

Hadi adım adım bütün her şeyi açıklamaya başlayalım..

Microsoft.ML.OnnxRuntime Nedir?

Microsoft.ML.OnnxRuntime, .NET içinde ONNX modellerini çalıştırmanı sağlayan kütüphane.

Açıkça söylemek gerekirse:

  • Yapay zekâ modelleri genelde Python + PyTorch/TensorFlow ile eğitilir.

  • Ama sen C# ile çalışıyorsun ve bu modeli .NET içinde kullanmak istiyorsun.

  • İşte OnnxRuntime burada devreye giriyor: Python’a gerek kalmadan modeli çalıştırabilirsin.

Onnx Runtime Ne İşe Yarar?

  • Ses işleme, görüntü tanıma, VAD (Voice Activity Detection) gibi AI görevlerini yerel olarak yapabilirsin.

  • Farklı platformlarda performanslı çalışıyor (Windows, Linux, macOS).

  • Modelin girişini ver, çıkışı al, işte hepsi bu kadar.

Bizim Projede Rolü

  • Silero VAD gibi ONNX formatındaki modelleri çalıştırmak için kullanacağız.

  • Mikrofon verisini alıp “bu kısım konuşma mı, sessizlik mi?” diye analiz edecek.

  • Yani sessiz bölümleri atlayıp sadece konuşmayı Whisper.NET’e göndermemizi sağlıyor.

Kısaca: OnnxRuntime = .NET içinde AI modelini çalıştırmanın anahtarı.

Github Repo Linki: https://github.com/microsoft/onnxruntime

Speech-to-Text (STT) Nedir?

STT yani Speech-to-Text, konuştuğun sesi metne çeviren teknoloji.
Düşün: bilgisayara yazı yazmak yerine konuşuyorsun, o seni anlıyor ve yazıya döküyor.

  • Telefonda sesli mesajı yazıya dönüştürmek,

  • Asistanlara konuşarak komut vermek,

  • Toplantı notlarını otomatik çıkarmak…
    Bunların hepsi STT sayesinde oluyor.

Neden önemli?

  • Klavye kullanmadan, çok hızlı iletişim kurabiliyorsun.

  • Erişilebilirlik sağlıyor (örneğin görme engelli kullanıcılar için).

  • Sesli komutlarla uygulamalar çok daha doğal hissettiriyor.

Yani STT, sesli etkileşimin temel taşı. Eğer kendi yapay zekâ asistanını yapacaksan, ilk ihtiyacın “beni dinlesin ve anlasın” kısmı → işte o STT.

Whisper Nedir?

Whisper, OpenAI’nin geliştirdiği açık kaynak bir STT modeli.

  • Birçok dili tanıyor (Türkçe dahil).

  • Arka planda derin öğrenme ile sesi çok doğru çözüyor.

  • Hem konuşmayı yazıya döküyor, hem de istersen çeviri yapabiliyor.

Kısacası “sesini yazıya döken, güvenilir bir beyin”.

Github Repo Linki: https://github.com/openai/whisper

Whisper.NET Nedir?

Whisper’ın .NET için hazırlanmış kütüphanesi.

  • Yani sen C# kodunun içinde direkt “bu sesi yazıya çevir” diyebiliyorsun.

  • Modelleri indirip bilgisayarında çalıştırabiliyorsun, internet şart değil.

  • Konsol, masaüstü veya web projelerinde kolayca entegre ediliyor.

Bizim projede:

  • Mikrofonu açıyoruz, sesi alıyoruz.

  • Whisper.NET’e veriyoruz.

  • O da bize konuşmayı metin olarak geri dönüyor.

Github Repo Linki: https://github.com/sandrohanea/whisper.net

EchoSharp Nedir?

EchoSharp, .NET ekosistemi için geliştirilmiş açık kaynaklı bir ses işleme kütüphanesi. Ama olayı sadece “mikrofonu aç, sesi kaydet” değil; asıl güçlü tarafı, farklı AI modellerini ses üstünde senkronize şekilde çalıştırabilmesi. 

  • Near-real-time audio processing → Sesi neredeyse anlık olarak işliyor. Yani konuşurken saniyelerce beklemek yok.

  • Orchestrating different AI models → STT, VAD, duygu analizi, keyword spotting gibi farklı yapay zekâ modellerini aynı ses akışı üzerinde senkronize çalıştırabiliyorsun.

  • Flexibility & Performance → Hem esnek hem de performans odaklı bir mimarisi var. Yani hangi modeli nerede devreye sokacağını sen belirleyebiliyorsun.

EchoSharp Nerede Kullanılır?

  • Sesli asistanlar (Whisper + TTS + VAD zinciri gibi)

  • Toplantı/konferans analizleri (transkript + duygu analizi)

  • Canlı yayınlarda moderasyon (küfür, belirli kelimeler, hassas içerik tespiti)

  • Akıllı ev uygulamaları (wake-word dinleme + komut çözümleme)

Bu projeyi Nuget paketi olarak değil, direkt projeyi indirip kaynak koduna eklemek durumunda kaldım. Nuget paketleri maalesef güncel değil.

Github Repo Linki: https://github.com/sandrohanea/echosharp

Ollama Nedir?

Ollama, bilgisayarında yapay zekâ modellerini çalıştırmanı sağlayan bir araç. Yani internet üzerinden API’ye bağlanmana gerek yok; model senin bilgisayarında, tamamen yerel olarak çalışıyor.

Bunu şöyle düşünebilirsin:

  • Normalde ChatGPT gibi servisler bulutta çalışır → verilerini internete gönderirsin.

  • Ollama’da ise “yapay zeka modelini indiriyorsun, bilgisayarında başlatabiliyorsun.”

Ollama Ne İşe Yarar?

  • Yerel sohbet → Chat botunu internet olmadan kullanabilirsin.

  • Gizlilik → Konuşmaların dışarı çıkmaz.

  • Esneklik → İstediğin modeli seçip çalıştırabilirsin (Llama, Mistral, Gemma, embedding modelleri vs.).

Ollama'nın Projede Rolü

  • Konsol uygulamasında: Whisper.NET’in çevirdiği metni alıp cevap üretecek.

  • Web uygulamasında: Blazor + RAG senaryosunda “asıl beyin” Ollama olacak, yani sorularımıza yanıt veren kısım.

Kısacası: Ollama, bilgisayarına yerleşmiş bir yapay zekâ motoru. Sen soruyorsun, o düşünüp cevaplıyor.

Github Repo Linki: https://github.com/ollama/ollama

Llama Yapay Zekâ Modeli Nedir?

Llama (Large Language Model Meta AI), Meta (Facebook’un sahibi) tarafından geliştirilen bir yapay zekâ sohbet modeli ailesi.

  • Ne yapar? Senin yazdığın metni anlar, cevap üretir.

  • Neye benzer? ChatGPT, Gemini, Claude gibi modellerin kuzeni diyebilirsin.

  • Farkı ne? Açık kaynak olması. Yani isteyen indirip bilgisayarında çalıştırabiliyor.

Llama her yeni sürümde daha iyi anlama, daha akıcı cevap verme, daha verimli çalışma özellikleri eklendi.

Peki Biz Neden Llama 3.2 Kullandık?

Çünkü bizim senaryomuzda önemli olan şey:

  1. Yerelde çalışabilmesi → Ollama bilgisayarınızda docker üzerinden sorunsuz bir şekilde çalışır.

  2. Hafif ama güçlü olması → Llama 3.2’nin küçük boyutlu (3B gibi) sürümleri var. Bu sayede güçlü sunucular gerekmeden masaüstünde rahatça çalışıyor.

  3. Kaliteli cevap vermesi → Küçük model olmasına rağmen Türkçe dahil birçok dili gayet iyi anlıyor.

  4. Esnek olması → Sadece sohbet değil, özetleme, açıklama, hatta kodlama gibi işlerde de kullanılabiliyor.

Kısacası: Llama 3.2, bizim için performans ve pratiklik dengesini sağlayan model. Daha büyük devasa modeller var ama onlar için güçlü ekran kartı ya da bulut servisi lazım. Biz günlük kullanım ve demo için hafif ama yeterince akıllı olanı seçtik.

Github ProjeLlama

Text-to-Speech (TTS) Nedir?

Text-to-Speech (TTS), yazıyı sesli konuşmaya çeviren teknoloji.

Sen bir metin yazıyorsun ve bilgisayar bunu sana sesli olarak geri söylüyor.

  • Sesli asistanlar (Siri, Google Asistan)

  • Navigasyon cihazları

  • Sesli kitap uygulamaları

Bunların hepsi TTS sayesinde çalışıyor.

Neden Önemli?

  • Sesli geri bildirim veriyor → kullanıcıyla daha doğal iletişim.

  • Erişilebilirlik sağlıyor → görme engelli kullanıcılar için vazgeçilmez.

  • Etkin etkileşim → yazıyı okumak yerine dinlemek hızlı ve pratik.

Bizim Projede Rolü

  • Konsol uygulamasında, Ollama’dan gelen metin yanıtları sesli olarak oynatacağız.

  • Yani konuşuyoruz → metin oluşuyor → model cevap veriyor → TTS ile cevap duyuluyor.

Kısaca: TTS = bilgisayarın yazdığını sana okuyabilmesi.

KokoroSharp Nedir?

KokoroSharp, .NET projelerinde kullanılmak üzere geliştirilmiş, ONNX Runtime tabanlı bir Text-to-Speech (TTS) motorudur. Yani, yazdığınız metni sesli olarak dinlemenizi sağlar.

Temel Özellikleri

  • Hızlı ve Yerel Çalışma: İnternete ihtiyaç duymadan, bilgisayarınızda hızlı bir şekilde çalışır.

  • Çoklu Konuşmacı ve Dil Desteği: Birden fazla ses ve dil seçeneği sunar.

  • Çapraz Platform Uyumluluğu: Windows, macOS ve Linux üzerinde çalışabilir.

  • Kolay Entegrasyon: NuGet paketi aracılığıyla projelerinize kolayca dahil edilebilir.

  • Ses Karıştırma Özelliği: Birden fazla sesi karıştırarak daha zengin sesler oluşturabilirsiniz.

  • Segmentli Akış Desteği: Uzun metinleri parçalara ayırarak daha hızlı ve kesintisiz seslendirme sağlar.

Nerelerde Kullanılır?

  • Sesli Asistanlar: Kullanıcılarla sesli etkileşim kurmak için.

  • Erişilebilirlik Uygulamaları: Görme engelli kullanıcılar için metinleri sesli hale getirmek.

  • Eğitim ve Öğretim Uygulamaları: Öğrencilere sesli içerik sunmak.

  • Oyun ve Multimedya Projeleri: Karakterlerin sesli diyaloglarını oluşturmak.

Github Repo Linki: https://github.com/Lyrcaxis/KokoroSharp

Microsoft.Extensions.AI Nedir?

Kısaca söyleyeyim. .NET’te yapay zekâyı tek tip bir şekilde kullanmanı sağlayan kütüphane.

Normalde bir AI modeliyle konuşmak istersen her birinin farklı kodu, farklı istemcisi var. Biri REST ister, diğeri SDK… Hepsi ayrı dert.

Microsoft.Extensions.AI ile bu sorun ortadan kalkıyor. Sen sadece “mesaj gönder – cevap al” mantığıyla yazıyorsun. Arkada hangi modelin (Ollama, OpenAI, Azure vs.) çalıştığı önemli değil.

Yani işin özü şu:

  • Kodun basit ve temiz kalıyor.

  • Modeli değiştirmek istediğinde projeni baştan yazmana gerek olmuyor.

  • Tek bir çatı altında birden fazla yapay zekâ servisini kullanabiliyorsun.

Özetle: Microsoft.Extensions.AI = AI ile konuşmayı kolaylaştıran .NET kütüphanesi.

Microsoft.Extensions.AI.Templates Nedir?

Microsoft.Extensions.AI.Templates, .NET’te AI destekli uygulamaları hızlıca başlatmak için hazırlanmış hazır şablonlar sunan bir paket.

Ne işe yarıyor?

  • Sıfırdan bir proje açmak yerine, hazır yapı ve kod iskeleti alıyorsun.

  • Sohbet uygulamaları, metin oluşturma veya RAG (Retrieval Augmented Generation) senaryoları için temel altyapıyı sağlıyor.

  • Arkasında Microsoft.Extensions.AI soyutlamalarını kullanıyor, yani hangi AI sağlayıcısını kullanacağın fark etmiyor.

Bizim Projede Rolü

  • Web uygulamamızda Blazor ile hızlıca AI destekli sohbet uygulaması oluşturmak için kullanacağız.

  • Kullanıcı PDF veya diğer verileri yüklediğinde, RAG mantığıyla sorulara yanıt verecek bir altyapıyı hazır şekilde sunuyor.

Kısaca: Microsoft.Extensions.AI.Templates = .NET için AI projesi başlatmayı süper kolaylaştıran hazır şablonlar paketi.

Microsoft.Extensions.AI.Templates Kurulumu

Başlangıç için şablonun ilk Önizlemesini denemek istiyorsanız, Terminal üzerinden Microsoft.Extensions.AI.Templates paketini yüklemeniz yeterlidir. Şu komutu çalıştırarak kurulumu başlatabilirsiniz:

dotnet new install Microsoft.Extensions.AI.Templates

Visual Studio’da Microsoft.Extensions.AI.Templates Kullanımı

Komut satırından şablonu yükledikten sonra, Visual Studio’da File > New Project… menüsüne giderek şablona kolayca ulaşabilirsiniz. Arama bölümüne “AI Chat” yazarak ya da proje türleri arasından “AI”yı seçerek ilgili şablonu bulabilirsiniz.

Proje adınızı ve konumunu belirledikten sonra, kullanmak istediğiniz yapay zeka model sağlayıcısını ve vektör deposunu seçerek işe başlayabilirsiniz. 

Hızlıca Ollama sağlayıcı ve Qdrant vektör deposunu kullanarak Blazor tabanlı sohbet uygulamasını komut ile oluşturmak istersek, AyazDuru.Samples.AI.Chat adında bir klasör oluşturup. Aşağıdaki komutu çalıştırabiliriz.

cd AyazDuru.Samples.AI.Chat
dotnet new aichatweb --provider ollama --vector-store qdrant -n AyazDuru.Samples.AI.Chat

.NET AI Şablonları dokümantasyonundan her bir seçeneğin detaylarını öğrenebilirsiniz.

Vector Nedir?

Bilgisayar dünyasında vector, bir nesneyi sayılardan oluşan bir listeyle temsil etme şeklidir.

  • Örneğin: “Merhaba dünya” cümlesi → [0.12, -0.08, 0.9, …] gibi bir dizi sayı.

  • Amaç: bilgisayarın metinleri, görselleri veya sesleri matematiksel olarak anlayabilmesi.

Vector Embeddings Nedir ve Nasıl Çalışır?

Vector embedding, metin, resim veya ses gibi verileri bilgisayarın anlayabileceği sayılara dönüştürme işlemidir.

  • Örnek: “Bugün hava çok güzel” cümlesi → [0.12, -0.08, 0.9, …] gibi bir sayı listesi (vektör) haline gelir.

  • Amaç: Bu sayısal temsil sayesinde bilgisayar benzerliği hesaplayabilir, matematiksel olarak anlayabilir.

Neden Önemli?

  • Normal metin araması sadece kelime eşleşmesine bakar.

    • Örnek: “hava güzel” ile “güzel hava” kelimeleri farklı sonuçlar çıkarabilir.

  • Embedding ile bilgisayar anlamı anlar ve “bu cümle diğerine benziyor mu?” diyebilir.

Vector Search (Vektör Arama) Nedir?

Vector search, embedding ile oluşturulan vektörleri anlam benzerliğine göre aramayı sağlayan yöntemdir.

Nasıl Çalışır?

  1. Elimizde embedding’leri olan bir veri tabanı var (ör. Qdrant).

  2. Kullanıcı bir soru soruyor → o soru da embedding’e dönüştürülüyor.

  3. Vector search algoritması, veritabanındaki embedding’lerle karşılaştırıyor.

  4. En yakın vektörleri bulup, anlam olarak en ilgili veriyi geri döndürüyor.

Örnek:

  • PDF’te “.NET Blazor nedir?” diye bir cümle var.

  • Kullanıcı soruyor: “Blazor hakkında bilgi verir misin?”

  • Kelimeler birebir aynı değil ama embedding sayesinde anlam olarak benzer olduğu fark ediliyor.

  • Vector search ile doğru cümle bulunuyor → LLama bu cümleyi kullanarak cevap oluşturuyor.

Vector Search ve Embedding Arasındaki İlişki

  • Embedding = Nesneyi sayılara çevirme

  • Vector Search = Sayılar arasındaki benzerliği hesaplayıp arama yapma

Kısaca, embedding olmadan vector search çalışmaz; önce veriyi vektöre dönüştürmelisin.

Bizim Projede Kullanımı

  • Kullanıcı PDF yüklüyor → metin cümlelere bölünüyor → all-minilm ile embedding’e dönüştürülüyor

  • Embedding’ler Qdrant’a kaydediliyor

  • Soru geldiğinde → soru embedding’e dönüştürülüyor → Qdrant en yakın vektörleri buluyor

  • Bulunan içerik Llama’ya gönderiliyor → akıllı ve anlamlı cevap üretiliyor

Vector Database’ler Nelerdir?

Vector database, vektörleri sıkıca organize edip hızlıca arayabilen veri tabanlarıdır.

  • Normal DB: “id=5 olan kaydı getir”

  • Vector DB: “şuna en yakın 5 kaydı getir”

En popülerleri:

  • Qdrant → hızlı, açık kaynak, .NET ile uyumlu

  • Pinecone → bulut tabanlı, SaaS

  • Weaviate → AI odaklı, kolay entegrasyon

Qdrant Nedir?

Qdrant, vector database dünyasının yıldızı diyebiliriz.

  • Hızlı ve ölçeklenebilir

  • Yerel veya bulut üzerinde çalışabiliyor

  • .NET projelerinde embedding vektörlerini saklayıp anlam bazlı arama yapmamızı sağlıyor

Bizim projede RAG mantığıyla:

  • PDF veya metin verilerini embedding’e çeviriyoruz

  • Qdrant içine kaydediyoruz

  • Kullanıcı bir soru sorduğunda, en benzer vektörleri Qdrant buluyor → LLaMA ile cevap oluşturuyoruz

"all-minilm" Sentence Transformers Model Nedir?

all-minilm, sentence-transformers ailesinden bir embedding modeli.

  • Cümleleri veya paragrafları vektöre çevirmek için optimize edilmiş.

  • Hem küçük, hızlı hem de yeterince akıllı → bilgisayarda rahat çalışıyor

  • Çok dilli destek sunuyor → Türkçe metinleri de iyi anlıyor

Bizim projede rolü:

  • Kullanıcı PDF yüklediğinde veya soru sorduğunda cümleleri vektöre çevirmek

  • Qdrant’ta anlam bazlı arama yapabilmek

 

Retrieval-Augmented Generation (RAG) Nedir?

RAG, yapay zekâ ile çalışırken “modeli daha akıllı yapmak için ona ek bilgi vermek” yöntemidir.

Basitçe Düşün:

  • Llama veya başka bir dil modeli, sınırlı bir hafızaya sahip.

  • Diyelim ki PDF’lerden bir şey sordun, model bunu tek başına hatırlayamayabilir.

  • RAG devreye giriyor: modelin “not defteri” gibi bir veri tabanına erişmesini sağlıyor.

  • Yani soru geldiğinde: önce ilgili veriyi buluyor (retrieval) → sonra cevabı oluşturuyor (generation).

İşin Mantığı

  1. Kullanıcı bir soru sorar.

  2. RAG sistemi Qdrant veya başka bir vector database’ten en ilgili içerikleri bulur.

  3. Bulunan içerikler LLaMA’ya eklenir → model cevap üretir.

Örnek:

  • PDF’in içinde “Blazor komponentleri nasıl çalışır?” var.

  • Kullanıcı soruyor: “Blazor’da komponent mantığı nedir?”

  • RAG: önce PDF’den ilgili kısmı çekiyor → Llama cevabı anlamlı bir şekilde üretiyor.

Neden Önemli?

  • Modelin kendi hafızası yetmez → RAG ile sınırsız bilgiye erişebilir.

  • Cevaplar daha doğru ve güncel olur.

  • Büyük belgeler veya özel verilerle çalışırken olmazsa olmazdır.

Kısaca: RAG = Model + Akıllı arama → Daha doğru cevap.

 

Bu yazıda .NET ile yerel yapay zekâ destekli bir sesli ve yazılı sohbet uygulamasını adım adım inceledik. Whisper.NET ile sesi metne çevirip, KokoroSharp ile cevabı sesli olarak döndürmek, Ollama ve LLaMA 3.2 ile güçlü bir yerel AI sohbet motoru oluşturmak, Qdrant ve all-minilm ile anlam bazlı arama yapmak mümkün.

Artık AI destekli sohbet uygulamalarını sıfırdan kurmak, yerelde çalıştırmak ve kendi verilerinle zenginleştirmek hiç olmadığı kadar erişilebilir.

Denemekten çekinmeyin, küçük adımlarla başlayın ve kendi yerel AI asistanınızı yaratmanın keyfini çıkarın!

Sağlıcakla kalın..

ᓚᘏᗢ

Yorumlar kapalı