Lain AI: Akış Tabanlı DeepSeek Persona ve Ses İstemcisi
DeepSeek API'sini kullanarak 'Lain Iwakura' personası ile sohbet simüle eden mobil yapay zeka 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 zeka 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 zeka 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 zeka 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.