17 puan yazan GN⁺ 2025-05-06 | 2 yorum | WhatsApp'ta paylaş
  • Tarayıcı mikrofonunu kullanarak yapay zeka ile doğal sesli konuşmaların gerçek zamanlı olarak yapılabildiği bir sistem
  • STT → LLM → TTS akışıyla kullanıcının sesini metne dönüştürür, ardından yapay zeka yanıtını tekrar sese çevirip oynatır
  • Temel bileşenler FastAPI sunucusu, WebSocket akışı, Pod tabanlı ses işleme modülü ve çeşitli LLM backend'leridir
  • Docker tabanlı dağıtım ortamı sunulur; GPU kullanıldığında daha da düşük gecikme ve performans artışı beklenebilir
  • Kullanıcı müdahalesi algılama, model değiştirme, ses seçimi gibi gelişmiş ayar değişiklikleri için son derece özelleştirilebilir bir ortam sunar

Gerçek zamanlı yapay zeka sesli sohbet

  • Bu proje, gerçek zamanlı iki yönlü sesli konuşma için tasarlanmış bir istemci-sunucu mimarisidir
  • Kullanıcı tarayıcıda konuşur ve yapay zeka yanıtı ses olarak geri döndürür
  • Müdahale işleme, kısmi metin yanıtı gösterimi ve farklı TTS seçimleri mümkündür

Temel çalışma akışı

  1. Ses girişi: Tarayıcıda kullanıcının sesi yakalanır
  2. Akışla iletim: Ses parçaları WebSocket üzerinden Python backend'ine gönderilir
  3. Konuşma tanıma: RealtimeSTT sesi metne dönüştürür
  4. LLM işleme: Metin LLM'e iletilir ve yanıt üretilir
  5. Sese dönüştürme: RealtimeTTS yanıt metnini sese dönüştürür
  6. Yanıt oynatma: Üretilen ses tekrar tarayıcıya akış olarak gönderilir
  7. Müdahale algılama: Kullanıcının araya girmesi otomatik olarak algılanır ve işlenir

Başlıca özellikler

  • Gerçek zamanlı sesli konuşma ve kısmi transkripsiyon/yanıt önizlemesi
  • Düşük gecikme için ses parçası tabanlı akış
  • Statik/dinamik sessizlik algılama (turn detection) desteği
  • Çeşitli LLM backend'leri: Varsayılan olarak Ollama, isteğe bağlı OpenAI
  • Birden fazla TTS motoru desteği: Kokoro, Coqui, Orpheus
  • Web arayüzü sunar: Web Audio API tabanlı Vanilla JS UI
  • Docker Compose tabanlı dağıtım sunar

Teknoloji yığını

  • Backend: Python 3.x, FastAPI
  • Frontend: HTML, CSS, JavaScript (Web Audio API)
  • İletişim: WebSockets
  • Konteynerleştirme: Docker, Docker Compose
  • AI/ML kütüphaneleri:
    • RealtimeSTT, RealtimeTTS, transformers, torch, torchaudio
    • ollama, openai
  • Ses işleme: numpy, scipy

Sistem gereksinimleri ve öneriler

  • İşletim sistemi: Linux üzerinde Docker kullanımı önerilir (GPU entegrasyonu açısından avantajlı)
  • Python 3.9+, CUDA 12.1 veya üzeri NVIDIA GPU önerilir
  • Docker kullanırken NVIDIA Container Toolkit zorunludur
  • Gerektiğinde Ollama veya OpenAI API Key ayarlanmalıdır

Kurulum yöntemi

Seçenek A: Docker kurulumu (önerilir)

  1. Depoyu klonladıktan sonra docker compose build
  2. docker compose up -d ile uygulamayı ve Ollama'yı başlatın
  3. Ollama modelini ayrıca indirin (ör. docker compose exec ollama ollama pull ...)
  4. Hizmeti durdurma: docker compose down
  5. Yeniden başlatma: docker compose up -d

Seçenek B: Manuel kurulum

  1. Python venv kurup bağımlılıkları yükleyin
  2. CUDA sürümüne uygun PyTorch'u manuel olarak kurun
  3. FastAPI sunucusunu başlatmak için server.py dosyasını çalıştırın

Çalıştırma yöntemi

  • Tarayıcıda http://localhost:8000 adresine gidin
  • Mikrofon iznini verdikten sonra "Start"a tıklayın
  • Sonlandırmak için "Stop", konuşmayı sıfırlamak için "Reset"

Ayar değiştirme rehberi

  • TTS motoru/ses değiştirme: server.py, audio_module.py içinde düzenleyin
  • LLM modeli/backend değiştirme: server.py, llm_module.py içinde ayarlayın
  • STT modeli/sessizlik eşiği değiştirme: transcribe.py, turndetect.py
  • SSL yapılandırması mümkündür: server.py içinde HTTPS kullanımı ve sertifika ayarları

Lisans

  • MIT lisansı ile yayımlanmıştır
  • Coqui gibi harici motorlar için ayrı lisanslar geçerlidir

2 yorum

 
nicewook 2025-05-10

Orijinaldeki demo videosu etkileyici.

  1. Daha doğal bir konuşma olmasını isteme beklentim vardı; bu seviye bunu oldukça karşılıyor gibi görünüyor.
  2. Konuşurken aynı anda metin olarak da gerçek zamanlı görmek istiyordum; bu kısım da güzel.
  3. Yapay zekanın sözümü kesmeden beni yeterince dinledikten sonra konuşması iyi olurdu. Örneğin emin olmadığında "Sözünü bitirdin mi?", "Ben konuşabilir miyim?" gibi sorular sorup ardından kendi konuşmasına başlaması şeklinde.
  4. Hem yapay zekanın hem de insanların birbirlerinin sözünü kesmemesini teşvik eden bir şey olsa iyi olurdu.
 
GN⁺ 2025-05-06
Hacker News görüşü
  • RealtimeVoiceChat'ı geliştirme nedeni, çoğu sesli yapay zeka etkileşimindeki gecikmenin tatmin edici olmamasıymış. Bu sistem, gerçek zamanlı ve yerel sesli konuşmalar için tasarlanmış açık kaynaklı bir sistemdir

    • Hedef, doğal konuşma hızına yaklaşmaktır
    • WebSockets üzerinden ses parçacığı akışı, Whisper tabanlı RealtimeSTT ve Coqui XTTSv2/Kokoro gibi motorları destekleyen RealtimeTTS kullanarak yaklaşık 500 ms yanıt gecikmesine ulaşıyor
    • Ollama üzerinden 24B Mistral gibi daha büyük yerel modeller çalıştırılırken de bu mümkün
    • Başlıca özellikler: yerel LLM'ler için tasarlanmış olması (özellikle Ollama, OpenAI bağlayıcısı dahil), konuşmanın bölünebilmesi, kullanıcının düşünce akışını kesmemek için akıllı sıra algılama ve bağımlılık yönetimini kolaylaştırmak için Dockerized kurulum sunması
    • STT/TTS modelleri nedeniyle performans için CUDA destekli bir GPU gerekiyor
    • Yaklaşım, performans, olası optimizasyonlar veya iyi bir yerel sesli yapay zeka deneyimi için gerekli özellikler hakkında geri bildirim duymak istiyor
    • Kod: https://github.com/KoljaB/RealtimeVoiceChat
  • Bu tür araçların bir kullanıcısı olarak, hızlı olsa da doğal konuşmadaki duraklamalara izin vermiyor

    • Konuşma sırasında düşünmek ya da başka nedenlerle hem uzun hem kısa duraklamalar veriyoruz
    • Bu araçlarda durduğumuz anda yapay zeka hemen konuşmaya başlıyor
    • Birkaç hafta önce Twitter'da, yapay zekanın kişinin gerçekten konuşmasını bitirene kadar beklediği bir demo görmüştüm. Duraklamanın uzunluğu sorun olmuyordu
    • Bunun ne kadar karmaşık bir problem olduğunu bilmiyorum. Muhtemelen başka bir yapay zekanın girdiyi analiz edip bunun duraklama mı yoksa başka bir şey mi olduğuna karar vermesi gerekir
  • Çok havalı! Bölme özelliği "vay be" anıydı (yeni bir şey değil ama bunun açık kaynakta bu kadar iyi uygulanmış olduğunu görmek şaşırtıcı)

    • Bölme özelliğiyle ilgili soru: "Mmk", "Yes", "Of course", "öksürük" gibi şeyleri nasıl ele aldığını merak ediyorum
    • OpenAI'ın sesli sohbetindeki aşırı iltifat bir yana, gürültünün yapay zekanın yanıtını durdurabilmesinden ve bunu iyi bir şekilde yeniden başlatmanın bir yolu olmamasından hoşlanmıyorum
    • Hızlıca yanıtı kesmek ve bunu doğru nedenle yapmak zor bir problem
  • Yaklaşık 1 yıl önce bu konu üzerine araştırma yapmıştım. Birkaç ilginç şey öğrendim

    • İnsanlar arasındaki konuşmada konuşmacılar arasındaki medyan gecikme 0 milisaniyedir. Yani zamanın yaklaşık yarısında bir konuşmacı diğerinin sözünü keser ve gecikme negatif olur
    • İnsanlar, yapay zeka olduğu bilinen bir sistemle konuşurken gecikmeyi pek umursamaz. Yapay zekanın düşünmek için zamana ihtiyacı olduğunu varsayarlar. Çoğu kullanıcı 1000 ms gecikmeyi kabul edilebilir bulur ve 500 ms gecikmeyi olağanüstü sayar
    • Tüm sesli asistanların yaklaşık 300 ms'lik bir minimum gecikmesi vardır. Bunun nedeni, hepsinin yanıtın ne zaman başlayacağını belirlemek için sessizlik algılama kullanması ve konuşmacının normal duraklamalarından kesin biçimde ayrılabilmesi için yaklaşık 300 ms sessizliğe ihtiyaç duyulmasıdır
    • Alexa'nın yavaş konuşanlar için bu bekleme süresini artıran bir ayarı var
    • Bu demo videosunda yapay zekanın onu bölmediği görülebiliyor. Bu da etkileşimin insanla konuşuyormuş gibi hissettirmemesine yol açıyor (sesin garip tonlaması da buna dahil)
    • İnsanlar cümleleri gerçek zamanlı işler ve cümlenin anlamını kavramaya yetecek kadar duyduklarından emin olduklarında yanıt verir
  • Harika. Kaynağa baktığımda, yazarın Silero VAD yerine özel bir sıra algılama stratejisi uygulamış olması ilginç geldi. Bunu neden yaptığı ve ne gibi avantajlar gözlemlediği merak konusu

    • Sesli ajan alanının mevcut durumunu merak edenler için Daily (bir webRTC şirketi), harika bir rehber ve çok sayıda yardımcı araç içeren açık kaynaklı bir framework sunuyor
    • Not: Ben Cartesia'da çalışıyorum ve çok sayıda sesli ajan kullanım senaryosuna hizmet veriyoruz. Daily dostumuzdur
  • LLM'lerin daha kısa yanıtlar için ayarlanması gerektiğini düşünmeye başlıyorum. Kısa bir cümle giriyorsunuz, uzun paragraf paragraf metin veriyor

    • Bazen iyi bir metin oluyor ama her girdi cümlesinin mini bir deneme uzunluğunda yanıt gerektirmediği açık
    • Çok havalı bir proje. Yapay zekanın konuşma tarzını değiştirmek için prompt'u ince ayarlamak mümkün olabilir
  • Kimsenin bundan bahsetmemiş olmasına şaşırdım. İnsan gibi etkileşime giriyor ve yeterli bağlam olduğunda birçok durumda sözümü kesiyor. Gecikmesi çok düşük

    • İlk kullandığımda oldukça sarsıcı bir deneyimdi
  • Oldukça iyi. Eğer SOTA düzeyinde bir ses gibi gelse çok daha iyi olurdu

  • Etkileyici! Şu anda mevcut açık kaynak seçenekler arasında en iyi konuşma sentezi kalitesi olduğunu düşünüyorum

    • Nihai hedef, hiç metin token'ı olmayan, sürekli çalışan dalga biçiminden dalga biçimine bir model olacaktır
  • Benzer bir şey üzerinde çalışıyordum ve buna rastladım. Harika iş. Demoyu beğendim