Lain AI: Akış Tabanlı DeepSeek Persona ve Ses İstemcisi
DeepSeek API'sini kullanarak 'Lain Iwakura' personası ile sohbet simüle eden mobil yapay zekâ arayüzü. Gerçek zamanlı SSE akışı, asenkron parçalı (chunked) Text-to-Speech ve özel retro CRT arayüz katmanı içerir.
Teknoloji yığını
- Diller
Performans & metrikler
- Byte-chunk çözümleme işlemlerini asenkron görevlere izole ederek aktif API akışı sırasında UI donmasını (freezing) engeller
- Tüm LLM yanıtını beklemek yerine metni ilk noktalama işaretinde seslendirerek algılanan TTS gecikmesini (latency) büyük ölçüde azaltır
- CRT scanline efekti için uygulanan verimli
CustomPainter, minimum render yükü sağlayarak stabil 60 FPS performansını korur
Neden geliştirdim?
Çoğu yapay zekâ istemcisi, REST uç noktalarının (endpoints) etrafına sarılmış sıradan arayüzlerden ibarettir. Serial Experiments Lain'den ilham alarak, gerçek zamanlı Server-Sent Events (SSE) akışının ve anında (on-the-fly) Metin Okuma (TTS) teknolojisinin sınırlarını zorlayan, oldukça sürükleyici ve karakter odaklı bir yapay zekâ istemcisi oluşturmak istedim. Bu proje; asenkron metin akışlarını yönetmek, cümleleri mantıksal olarak tamponlamak (buffering) ve 'yaşayan' dijital bir varlığı simüle ederken arayüzün (UI) donmasını engellemek üzerine bir mimari çalışmadır.
Mimari & kararlar
Uygulama, reaktif durum yönetimi için Provider ile Flutter kullanır. Çekirdek motor (ChatProvider), sürekli bir http.Client akışı (stream) kullanarak DeepSeek API'sine bağlanır. JSON parçaları (chunks) SSE üzerinden geldikçe satır satır çözümlenir (utf8.decoder, LineSplitter()), ayrıştırılır ve bir MarkdownBody widget'ı aracılığıyla gerçek zamanlı olarak arayüze işlenir. Eşzamanlı olarak metin akışı, Regex tabanlı bir cümle tamponuna (buffer) beslenir. Tamamlanmış bir cümle (noktalama işaretleriyle) tespit edildiğinde, anında asenkron bir TTS kuyruğuna (flutter_tts) itilir; böylece ağ isteğinin (payload) tamamen inmesi beklenmeden yapay zekâ anında konuşmaya başlar.
Temel özellikler
- 01Sıfır gecikmeli LLM metin akışı için gerçek zamanlı Server-Sent Events (SSE) ayrıştırması
- 02Cümleleri mantıksal olarak bölüp anında seslendiren asenkron TTS (Metin Okuma) kuyruğu
- 03Eller serbest sesli etkileşim için yerel Speech-to-Text (STT) entegrasyonu
- 04GPU optimize edilmiş özel CRT tarama çizgisi (
CustomPainter) katmanı ve sese duyarlı UI animasyonları - 05Çevrimdışı çoklu oturum sohbet geçmişi yönetimi için
path_providerile kalıcı yerel depolama
Teknik değerlendirme
Bu proje, mobil bir ortamda akan (streaming) ham LLM verilerinin nasıl işleneceğini kusursuz bir şekilde göstermektedir. Ham SSE verilerini araya girerek yakalayıp, delta parçalarını çıkararak ve bunları yerel TTS motoru için mantıksal cümle blokları halinde tamponlayarak, uygulama son derece duyarlı ve sohbete dayalı bir akış elde eder. Enjekte edilen sistem komutuna (system prompt) sıkı sıkıya bağlı kalınması, 'Lain' personasını API düzeyinde zorunlu kılar ve standart bir LLM uç noktasını tamamen sürükleyici, ses özellikli bir dijital yol arkadaşına dönüştürür.
Benzer projeler
Mobil Uygulamalar
WonderNest: İnteraktif Eğitim ve Telemetri Uygulaması
Erken çocukluk eğitimi için tasarlanmış, oyunlaştırılmış bir ortak öğrenme (co-learning) mobil uygulaması. Eğlenceli animasyonlarla zenginleştirilmiş biyolojik taksonomi modüllerini (yaşam alanları, beslenme, sesler), ayrıntılı ilerleme takibi sağlayan telemetri odaklı güvenli bir ebeveyn paneli ile birleştirir.
- Dart
- Flutter
- Provider
- +4
Look Back Fan App
Anime topluluğu için özel olarak geliştirilmiş, WebSockets üzerinden gerçek zamanlı anlık mesajlaşma ve yorumlaşma sunan bir mobil uygulama.
- Dart
- Flutter
- Firebase
- +1
Akıllı PDF Okuyucu & TDK Sözlük Asistanı
Ağır metinler okunurken odak kaybını önlemek için tasarlanmış; anında TDK sözlük çevirisi yapabilen, yerel bellek (Hive) destekli hibrit PDF ve metin okuma motoru.
- Dart
- Flutter
- Hive (NoSQL)
- +3
Benzer bir ihtiyacınız mı var?
Bu tür bir sistemi sizin için de kurabilirim.
Projenizi birkaç cümleyle anlatın; doğru yaklaşımı ve tahmini kapsamı birlikte belirleyelim.