17 poin oleh GN⁺ 2025-05-06 | 2 komentar | Bagikan ke WhatsApp
  • Sistem yang memungkinkan percakapan suara alami dengan AI secara real-time menggunakan mikrofon browser
  • Melalui alur STT → LLM → TTS, suara pengguna diubah menjadi teks, lalu respons AI dikonversi kembali menjadi suara dan diputar
  • Komponen intinya mencakup server FastAPI, streaming WebSocket, modul pemrosesan suara berbasis Pod, serta berbagai backend LLM
  • Menyediakan lingkungan deployment berbasis Docker, dan saat menggunakan GPU dapat diharapkan latensi yang lebih rendah serta peningkatan performa
  • Menawarkan lingkungan kustomisasi yang sangat fleksibel, termasuk deteksi interupsi pengguna, penggantian model, pemilihan suara, dan perubahan pengaturan lanjutan lainnya

Obrolan suara AI real-time

  • Proyek ini dirancang dengan arsitektur klien-server untuk percakapan suara dua arah secara real-time
  • Pengguna berbicara di browser, dan AI mengembalikan respons dalam bentuk suara
  • Mendukung penanganan interupsi, tampilan respons teks parsial, dan berbagai pilihan TTS

Alur kerja utama

  1. Input suara: menangkap suara pengguna dari browser
  2. Pengiriman streaming: mengirim chunk audio ke backend Python melalui WebSocket
  3. Pengenalan suara: RealtimeSTT mengubah suara menjadi teks
  4. Pemrosesan LLM: mengirim teks ke LLM untuk menghasilkan respons
  5. Konversi suara: RealtimeTTS mengubah teks respons menjadi suara
  6. Pemutaran respons: melakukan streaming suara yang dihasilkan kembali ke browser
  7. Deteksi interupsi: secara otomatis mendeteksi dan menangani selaan dari pengguna

Fitur utama

  • Percakapan suara real-time serta transkripsi parsial/pratinjau respons
  • Streaming berbasis chunk audio untuk latensi rendah
  • Dukungan deteksi hening statis/dinamis (turn detection)
  • Beragam backend LLM: default Ollama, OpenAI opsional
  • Mendukung beberapa engine TTS: Kokoro, Coqui, Orpheus
  • Menyediakan antarmuka web: UI Vanilla JS berbasis Web Audio API
  • Menyediakan deployment berbasis Docker Compose

Tech stack

  • Backend: Python 3.x, FastAPI
  • Frontend: HTML, CSS, JavaScript (Web Audio API)
  • Komunikasi: WebSockets
  • Kontainerisasi: Docker, Docker Compose
  • Library AI/ML:
    • RealtimeSTT, RealtimeTTS, transformers, torch, torchaudio
    • ollama, openai
  • Pemrosesan audio: numpy, scipy

Persyaratan sistem dan rekomendasi

  • Sistem operasi: disarankan menggunakan Docker di Linux (lebih menguntungkan untuk integrasi GPU)
  • Python 3.9+, disarankan GPU NVIDIA dengan CUDA 12.1 atau lebih tinggi
  • NVIDIA Container Toolkit wajib saat menggunakan Docker
  • Atur Ollama atau OpenAI API Key bila diperlukan

Cara instalasi

Opsi A: instalasi Docker (disarankan)

  1. Clone repositori lalu jalankan docker compose build
  2. Jalankan aplikasi dan Ollama dengan docker compose up -d
  3. Unduh model Ollama secara terpisah (contoh: docker compose exec ollama ollama pull ...)
  4. Hentikan layanan: docker compose down
  5. Jalankan kembali: docker compose up -d

Opsi B: instalasi manual

  1. Siapkan Python venv lalu instal dependensi
  2. Instal PyTorch secara manual sesuai versi CUDA
  3. Jalankan server.py untuk memulai server FastAPI

Cara menjalankan

  • Akses http://localhost:8000 di browser
  • Izinkan akses mikrofon lalu klik "Start"
  • Gunakan "Stop" untuk menghentikan, dan "Reset" untuk menginisialisasi ulang percakapan

Panduan perubahan konfigurasi

  • Mengganti engine/suara TTS: ubah di server.py, audio_module.py
  • Mengganti model/backend LLM: atur di server.py, llm_module.py
  • Mengganti model STT/kriteria hening: transcribe.py, turndetect.py
  • Konfigurasi SSL tersedia: atur penggunaan HTTPS dan sertifikat di server.py

Lisensi

  • Dirilis dengan lisensi MIT
  • Engine eksternal seperti Coqui menggunakan lisensi terpisah

2 komentar

 
nicewook 2025-05-10

Video demo pada versi aslinya sangat mengesankan.

  1. Saya memang ingin percakapannya terasa alami, dan pada level ini rasanya keinginan itu cukup banyak terpenuhi.
  2. Saya juga ingin bisa melihat percakapannya dalam bentuk teks secara real-time sambil berbicara, dan bagian ini juga bagus.
  3. Akan lebih baik kalau AI tidak memotong ucapan saya, mendengarkan sampai cukup, lalu baru berbicara. Misalnya saat belum yakin, ia bisa bertanya seperti "Apakah kamu sudah selesai bicara?", "Boleh saya mulai bicara?" lalu memulai percakapannya sendiri dengan cara seperti itu.
  4. Akan bagus juga kalau ada sesuatu yang mendorong baik AI maupun manusia agar tidak saling memotong saat berbicara.
 
GN⁺ 2025-05-06
Komentar Hacker News
  • Alasan mengembangkan RealtimeVoiceChat adalah karena latensi pada sebagian besar interaksi AI suara terasa kurang memuaskan. Sistem ini adalah sistem open source yang dirancang untuk percakapan suara lokal secara real-time

    • Tujuannya adalah mendekati kecepatan percakapan yang alami
    • Menggunakan streaming potongan audio melalui WebSockets, RealtimeSTT berbasis Whisper, dan RealtimeTTS yang mendukung engine seperti Coqui XTTSv2/Kokoro untuk mencapai latensi respons sekitar 500ms
    • Ini juga memungkinkan saat menjalankan model lokal yang lebih besar seperti 24B Mistral melalui Ollama
    • Fitur utama: dirancang untuk LLM lokal (terutama Ollama, termasuk konektor OpenAI), bisa diinterupsi, deteksi giliran pintar agar tidak memotong alur pikir pengguna, menyediakan setup berbasis Docker agar pengelolaan dependensi lebih mudah
    • Karena model STT/TTS, GPU dengan dukungan CUDA diperlukan demi performa
    • Ingin mendengar masukan tentang pendekatan, performa, potensi optimasi, atau fitur yang wajib ada untuk pengalaman AI suara lokal yang baik
    • Kode: https://github.com/KoljaB/RealtimeVoiceChat
  • Sebagai pengguna alat seperti ini, menurut saya meski cepat, sistem seperti ini tidak mengizinkan jeda saat berbicara secara alami

    • Dalam percakapan, kita punya jeda panjang dan pendek karena sedang berpikir atau alasan lainnya
    • Pada alat seperti ini, begitu kita berhenti, AI langsung mulai berbicara
    • Beberapa minggu lalu saya melihat demo di Twitter tentang AI yang menunggu sampai manusia benar-benar selesai berbicara. Panjang jedanya bukan masalah
    • Saya tidak tahu seberapa rumit masalah ini. Mungkin perlu AI lain yang menganalisis input untuk menentukan apakah itu jeda atau bukan
  • Keren sekali! Fitur interupsi adalah momen "wow" buat saya (bukan hal baru, tapi mengejutkan melihat implementasi open source yang sebagus ini)

    • Pertanyaan tentang fitur interupsi: saya penasaran bagaimana menangani "Mmk", "Yes", "Of course", "batuk", dan semacamnya
    • Selain sifat menjilat pada voice chat OpenAI, saya tidak suka bahwa kebisingan bisa menghentikan respons AI dan tidak ada cara yang bagus untuk memulainya lagi
    • Menghentikan respons dengan cepat sekaligus hanya berhenti karena alasan yang tepat adalah masalah yang sulit
  • Sekitar setahun lalu saya meneliti topik ini. Saya mempelajari beberapa fakta menarik

    • Dalam percakapan antarmanusia, median latensi antar pembicara adalah 0 milidetik. Artinya, sekitar separuh waktu salah satu pembicara memotong yang lain sehingga latensinya menjadi negatif
    • Manusia tidak terlalu peduli pada latensi saat berbicara dengan AI yang jelas-jelas diketahui sebagai AI. Mereka menganggap AI perlu waktu untuk berpikir. Sebagian besar pengguna melaporkan latensi 1000ms masih dapat diterima, dan 500ms terasa luar biasa
    • Semua asisten suara memiliki latensi minimum sekitar 300ms. Ini karena semuanya memakai deteksi keheningan untuk menentukan kapan mulai merespons, dan sekitar 300ms keheningan dibutuhkan agar bisa dibedakan dengan pasti dari jeda biasa pembicara
    • Alexa punya pengaturan untuk memperpanjang waktu tunggu ini bagi penutur yang lambat
    • Dalam video demo ini, Anda bisa melihat AI tidak memotongnya. Ini membuatnya terasa tidak seperti interaksi dengan manusia (termasuk intonasi suara yang canggung)
    • Manusia memproses kalimat secara real-time dan merespons ketika mereka yakin sudah cukup mendengar untuk memahami makna kalimat tersebut
  • Hebat. Saya melihat sekilas source code-nya, dan menarik bahwa penulis mengimplementasikan strategi deteksi giliran kustom alih-alih Silero VAD. Saya penasaran mengapa memilih cara itu dan keuntungan apa yang diamati

    • Bagi yang penasaran dengan kondisi ekosistem voice agent, Daily (perusahaan WebRTC) menyediakan framework open source yang bagus lengkap dengan banyak utilitas dan panduan yang sangat baik
    • Catatan: saya bekerja di Cartesia dan melayani banyak use case voice agent. Daily adalah teman
  • Saya mulai merasa LLM perlu disetel untuk memberikan respons yang lebih singkat. Anda memasukkan kalimat pendek, lalu keluar paragraf panjang

    • Terkadang itu teks yang bagus, tetapi tidak setiap kalimat masukan membutuhkan respons seperti esai mini
    • Proyek yang sangat keren. Mungkin prompt bisa disetel lebih halus untuk mengubah kecenderungan percakapan AI
  • Saya heran tidak ada yang menyebut ini. Sistem ini berinteraksi seperti manusia, dan ketika konteksnya cukup, sering memotong saya dalam banyak situasi. Latensinya sangat rendah

    • Saat pertama kali saya menggunakannya, pengalamannya cukup mengejutkan
  • Cukup bagus. Akan jauh lebih baik kalau terdengar seperti voice SOTA

  • Mengesankan! Saya rasa ini kualitas sintesis suara open source terbaik yang tersedia saat ini

    • Tujuan akhirnya mungkin model waveform-to-waveform yang terus berjalan tanpa token teks sama sekali
  • Saya sedang mengerjakan sesuatu yang mirip lalu menemukan ini. Kerja yang luar biasa. Saya suka demonya