- Hệ thống cho phép trò chuyện bằng giọng nói tự nhiên với AI theo thời gian thực bằng micro trên trình duyệt
- Thông qua luồng STT → LLM → TTS, giọng nói của người dùng được chuyển thành văn bản, sau đó phản hồi của AI lại được chuyển thành giọng nói để phát
- Các thành phần cốt lõi gồm máy chủ FastAPI, streaming WebSocket, mô-đun xử lý giọng nói dựa trên Pod và nhiều backend LLM khác nhau
- Cung cấp môi trường triển khai dựa trên Docker, và khi dùng GPU có thể kỳ vọng độ trễ thấp hơn cùng hiệu năng tốt hơn
- Cung cấp môi trường tùy biến mạnh, cho phép thay đổi các thiết lập nâng cao như phát hiện ngắt lời của người dùng, đổi model, chọn giọng nói
Chat thoại AI thời gian thực
- Dự án này là một kiến trúc client-server được thiết kế cho hội thoại giọng nói hai chiều theo thời gian thực
- Người dùng nói trong trình duyệt và AI sẽ trả phản hồi bằng giọng nói
- Hỗ trợ xử lý ngắt lời, hiển thị phản hồi văn bản từng phần và nhiều lựa chọn TTS khác nhau
Luồng hoạt động chính
- Nhập giọng nói: Ghi lại giọng nói của người dùng trong trình duyệt
- Truyền streaming: Gửi các audio chunk tới backend Python qua WebSocket
- Nhận dạng giọng nói:
RealtimeSTT chuyển giọng nói thành văn bản
- Xử lý LLM: Gửi văn bản tới LLM để tạo phản hồi
- Chuyển thành giọng nói:
RealtimeTTS chuyển văn bản phản hồi thành giọng nói
- Phát phản hồi: Streaming âm thanh đã tạo trở lại trình duyệt
- Phát hiện ngắt lời: Tự động phát hiện và xử lý việc người dùng xen vào
Tính năng chính
- Hội thoại giọng nói thời gian thực và xem trước bản chép lời/phản hồi từng phần
- Streaming dựa trên audio chunk để đạt độ trễ thấp
- Hỗ trợ phát hiện im lặng tĩnh/động (turn detection)
- Nhiều backend LLM: mặc định là Ollama, có thể chọn OpenAI
- Hỗ trợ nhiều engine TTS: Kokoro, Coqui, Orpheus
- Cung cấp giao diện web: UI Vanilla JS dựa trên Web Audio API
- Cung cấp triển khai dựa trên Docker Compose
Tech stack
- Backend: Python 3.x, FastAPI
- Frontend: HTML, CSS, JavaScript (Web Audio API)
- Giao tiếp: WebSockets
- Container hóa: Docker, Docker Compose
- Thư viện AI/ML:
RealtimeSTT, RealtimeTTS, transformers, torch, torchaudio
ollama, openai
- Xử lý âm thanh:
numpy, scipy
Yêu cầu và khuyến nghị hệ thống
- Hệ điều hành: khuyến nghị dùng Docker trên Linux (thuận lợi cho tích hợp GPU)
- Khuyến nghị Python 3.9+, GPU NVIDIA với CUDA 12.1 trở lên
- Bắt buộc có NVIDIA Container Toolkit khi dùng Docker
- Cần cấu hình Ollama hoặc OpenAI API Key nếu cần
Cách cài đặt
Tùy chọn A: Cài bằng Docker (khuyến nghị)
- Clone repository rồi chạy
docker compose build
- Khởi động app và Ollama bằng
docker compose up -d
- Tải model Ollama riêng (ví dụ:
docker compose exec ollama ollama pull ...)
- Dừng dịch vụ:
docker compose down
- Khởi động lại:
docker compose up -d
Tùy chọn B: Cài đặt thủ công
- Thiết lập Python venv rồi cài các dependency
- Cài thủ công PyTorch phù hợp với phiên bản CUDA
- Chạy
server.py để khởi động máy chủ FastAPI
Cách chạy
- Truy cập
http://localhost:8000 trên trình duyệt
- Cấp quyền micro rồi nhấn "Start"
- Nhấn "Stop" để dừng, "Reset" để khởi tạo lại cuộc hội thoại
Hướng dẫn thay đổi cấu hình
- Đổi engine/giọng TTS: chỉnh trong
server.py, audio_module.py
- Đổi model/backend LLM: cấu hình trong
server.py, llm_module.py
- Đổi model STT/ngưỡng im lặng:
transcribe.py, turndetect.py
- Có thể cấu hình SSL: thiết lập việc dùng HTTPS và chứng chỉ trong
server.py
Giấy phép
- Được phát hành theo giấy phép MIT
- Các engine bên ngoài như Coqui áp dụng giấy phép riêng
2 bình luận
Video demo của bài gốc rất ấn tượng.
Ý kiến trên Hacker News
Lý do phát triển RealtimeVoiceChat là vì độ trễ trong phần lớn các tương tác AI giọng nói là chưa thỏa đáng. Đây là một hệ thống mã nguồn mở được thiết kế cho hội thoại giọng nói cục bộ theo thời gian thực
Với tư cách là người dùng của các công cụ như vậy, tôi thấy chúng nhanh, nhưng không cho phép các khoảng ngừng tự nhiên khi nói
Rất tuyệt! Tính năng ngắt lời là một khoảnh khắc "wow" (không phải mới, nhưng thật đáng ngạc nhiên khi thấy nó được triển khai tốt đến vậy trong mã nguồn mở)
Khoảng 1 năm trước tôi đã nghiên cứu về chủ đề này. Tôi học được vài điều thú vị
Rất hay. Xem qua source thì tôi thấy thú vị khi tác giả đã triển khai một chiến lược phát hiện lượt nói tùy chỉnh thay vì dùng Silero VAD. Tôi tò mò vì sao lại làm vậy và đã quan sát thấy những lợi ích gì
Tôi bắt đầu cảm thấy LLMs nên được tinh chỉnh để đưa ra phản hồi ngắn hơn. Bạn nhập vào một câu ngắn mà nó lại xuất ra cả một đoạn văn dài
Tôi ngạc nhiên là chưa ai nhắc đến điều này. Nó tương tác giống con người, và trong nhiều tình huống còn chen lời tôi khi đã có đủ ngữ cảnh. Độ trễ rất thấp
Khá tốt. Sẽ còn tuyệt hơn nhiều nếu nghe như giọng nói SOTA
Ấn tượng đấy! Tôi nghĩ đây là chất lượng tổng hợp giọng nói tốt nhất trong số các lựa chọn mã nguồn mở hiện có
Tôi cũng đang làm thứ gì đó tương tự thì phát hiện ra cái này. Làm rất tốt. Tôi thích bản demo