14P by GN⁺ 3일전 | ★ favorite | 댓글 1개
  • 브라우저 마이크를 이용해 AI와 자연스러운 음성 대화를 실시간으로 나눌 수 있는 시스템
  • STT → LLM → TTS 흐름을 통해 사용자의 음성을 텍스트로 바꾸고, AI 응답을 다시 음성으로 변환해 재생
  • 핵심 구성요소는 FastAPI 서버, WebSocket 스트리밍, Pod 기반 음성 처리 모듈, 다양한 LLM 백엔드
  • Docker 기반 배포 환경이 제공되며, GPU 사용 시 더욱 낮은 지연시간과 성능 향상을 기대할 수 있음
  • 사용자 인터럽트 감지, 모델 교체, 음성 선택 등 고급 설정 변경 가능성이 뛰어난 커스터마이징 환경을 제공

실시간 AI 음성 채팅

  • 이 프로젝트는 실시간 양방향 음성 대화를 위해 설계된 클라이언트-서버 아키텍처
  • 사용자는 브라우저에서 말을 하고, AI가 응답을 음성으로 반환
  • 인터럽트 처리, 부분 텍스트 응답 표시, 다양한 TTS 선택이 가능함

주요 동작 흐름

  1. 음성 입력: 브라우저에서 사용자의 음성을 캡처
  2. 스트리밍 전송: 오디오 청크를 WebSocket을 통해 Python 백엔드로 전송
  3. 음성 인식: RealtimeSTT가 음성을 텍스트로 변환
  4. LLM 처리: 텍스트를 LLM에 전달하여 응답 생성
  5. 음성 변환: RealtimeTTS가 응답 텍스트를 음성으로 변환
  6. 응답 재생: 생성된 음성을 브라우저로 다시 스트리밍
  7. 인터럽트 감지: 사용자의 끼어들기를 자동으로 감지 및 처리

주요 기능

  • 실시간 음성 대화부분 전사/응답 미리보기
  • 낮은 지연시간을 위한 오디오 청크 기반 스트리밍
  • 정적/동적 침묵 탐지(turn detection) 지원
  • 다양한 LLM 백엔드: Ollama 기본, OpenAI 선택 가능
  • 여러 TTS 엔진 지원: Kokoro, Coqui, Orpheus
  • 웹 인터페이스 제공: Web Audio API 기반의 Vanilla JS UI
  • Docker Compose 기반 배포 제공

기술 스택

  • 백엔드: Python 3.x, FastAPI
  • 프론트엔드: HTML, CSS, JavaScript (Web Audio API)
  • 통신: WebSockets
  • 컨테이너화: Docker, Docker Compose
  • AI/ML 라이브러리:
    • RealtimeSTT, RealtimeTTS, transformers, torch, torchaudio
    • ollama, openai
  • 오디오 처리: numpy, scipy

시스템 요구사항 및 권장사항

  • 운영체제: Linux에서 Docker 사용 권장 (GPU 통합 유리)
  • Python 3.9+, CUDA 12.1 이상 NVIDIA GPU 권장
  • Docker 사용 시 NVIDIA Container Toolkit 필수
  • Ollama 또는 OpenAI API Key 필요시 설정

설치 방법

옵션 A: Docker 설치 (권장)

  1. 리포지토리 클론 후 docker compose build
  2. docker compose up -d로 앱 및 Ollama 시작
  3. 별도로 Ollama 모델 다운로드 (예: docker compose exec ollama ollama pull ...)
  4. 서비스 종료: docker compose down
  5. 재시작: docker compose up -d

옵션 B: 수동 설치

  1. Python venv 설정 후 의존성 설치
  2. CUDA 버전에 맞는 PyTorch 수동 설치
  3. server.py 실행하여 FastAPI 서버 시작

실행 방법

  • 브라우저에서 http://localhost:8000 접속
  • 마이크 권한 허용 후 "Start" 클릭
  • "Stop"으로 종료, "Reset"으로 대화 초기화

설정 변경 안내

  • TTS 엔진/음성 변경: server.py, audio_module.py에서 수정
  • LLM 모델/백엔드 변경: server.py, llm_module.py에서 설정
  • STT 모델/침묵 기준 변경: transcribe.py, turndetect.py
  • SSL 설정 가능: server.py에서 HTTPS 사용 여부 및 인증서 설정

라이선스

  • MIT 라이선스 기반으로 공개됨
  • Coqui 등 외부 엔진은 별도 라이선스 적용
Hacker News 의견
  • RealtimeVoiceChat을 개발한 이유는 대부분의 음성 AI 상호작용에서 지연 시간이 불만족스러웠기 때문임. 이 시스템은 실시간, 로컬 음성 대화를 위해 설계된 오픈 소스 시스템임

    • 자연스러운 대화 속도에 가까워지는 것이 목표임
    • WebSockets를 통한 오디오 청크 스트리밍, Whisper 기반의 RealtimeSTT, Coqui XTTSv2/Kokoro 같은 엔진을 지원하는 RealtimeTTS를 사용하여 약 500ms의 응답 지연 시간을 달성함
    • Ollama를 통해 24B Mistral과 같은 더 큰 로컬 모델을 실행할 때도 가능함
    • 주요 특징: 로컬 LLMs를 위해 설계됨 (주로 Ollama, OpenAI 커넥터 포함), 대화 중단 가능, 사용자의 생각을 끊지 않기 위한 스마트 턴 감지, 의존성 관리를 쉽게 하기 위한 Dockerized 설정 제공
    • STT/TTS 모델로 인해 성능을 위해 CUDA 지원 GPU가 필요함
    • 접근 방식, 성능, 잠재적 최적화 또는 좋은 로컬 음성 AI 경험을 위한 필수 기능에 대한 피드백을 듣고 싶음
    • 코드: https://github.com/KoljaB/RealtimeVoiceChat
  • 이러한 도구의 사용자로서, 빠르긴 하지만 자연스럽게 말할 때의 멈춤을 허용하지 않음

    • 대화 중 우리는 생각하거나 다른 이유로 긴 멈춤과 짧은 멈춤을 가짐
    • 이러한 도구에서는 우리가 멈추면 AI가 바로 말을 시작함
    • 몇 주 전 트위터에서 AI가 사람이 실제로 말을 끝낼 때까지 기다리는 데모를 봄. 멈춤 길이는 문제가 되지 않음
    • 이 문제가 얼마나 복잡한지는 모르겠음. 아마도 또 다른 AI가 입력을 분석하여 멈춤인지 아닌지를 결정해야 할 것임
  • 매우 멋짐! 중단 기능이 "와우" 순간이었음 (새로운 것은 아니지만 오픈 소스에서 이렇게 잘 구현된 것을 보는 것은 놀라움)

    • 중단 기능에 대한 질문: "Mmk", "Yes", "Of course", "기침" 등은 어떻게 처리하는지 궁금함
    • OpenAI의 음성 채팅에서의 아첨 외에도, 소음이 AI의 응답을 멈추게 하고 다시 시작할 좋은 방법이 없다는 점이 싫음
    • 빠르게 응답을 멈추고 좋은 이유로 멈추는 것이 어려운 문제임
  • 약 1년 전 이 주제에 대해 연구를 했음. 몇 가지 재미있는 사실을 배움

    • 인간 간의 대화에서 화자 간의 중간 지연 시간은 0밀리초임. 즉, 약 절반의 시간 동안 한 화자가 다른 화자를 중단하여 지연이 음수가 됨
    • 인간은 알려진 AI와 대화할 때 지연에 신경 쓰지 않음. AI가 생각할 시간이 필요하다고 가정함. 대부분의 사용자는 1000ms 지연을 허용 가능하다고 보고 500ms 지연을 예외적으로 여김
    • 모든 음성 비서는 약 300ms의 최소 지연 시간을 가짐. 이는 모두 침묵 감지를 사용하여 응답을 시작할 때를 결정하기 때문이며, 약 300ms의 침묵이 화자의 일반적인 멈춤과 확실히 구별되기 위해 필요함
    • Alexa는 느린 화자를 위해 이 대기 시간을 늘리는 설정을 가지고 있음
    • 이 데모 비디오에서 AI가 그를 중단하지 않는 것을 볼 수 있음. 이는 인간과의 상호작용처럼 느껴지지 않게 만듦 (음성의 어색한 억양도 포함)
    • 인간은 문장을 실시간으로 처리하며, 문장의 의미를 이해할 만큼 충분히 들었다고 확신할 때 응답함
  • 훌륭함. 소스를 살펴보니, 저자가 Silero VAD 대신 맞춤형 턴 감지 전략을 구현한 것이 흥미로움. 왜 이렇게 했는지, 어떤 이점을 관찰했는지 궁금함

    • 음성 에이전트 공간의 상태에 대해 궁금한 사람들을 위해 Daily(웹RTC 회사)가 훌륭한 가이드와 많은 유틸리티가 포함된 오픈 소스 프레임워크를 제공함
    • 참고: 나는 Cartesia에서 일하며, 많은 음성 에이전트 사용 사례를 서비스하고 있음. Daily는 친구임
  • LLMs가 더 짧은 응답을 위해 조정되어야 한다고 느끼기 시작함. 짧은 문장을 입력하면 긴 문단의 텍스트를 출력함

    • 때로는 좋은 텍스트이지만, 모든 입력 문장이 미니 에세이 응답을 필요로 하지는 않음
    • 매우 멋진 프로젝트임. AI의 대화 성향을 변경하기 위해 프롬프트를 미세 조정할 수 있을 것임
  • 아무도 언급하지 않은 것이 놀라움. 인간처럼 상호작용하며, 충분한 컨텍스트가 있을 때 많은 상황에서 나를 중단함. 매우 낮은 지연 시간을 가짐

    • 처음 사용했을 때 꽤 충격적인 경험이었음
  • 꽤 좋음. SOTA 음성으로 들리면 훨씬 더 좋을 것임

  • 인상적임! 현재 사용 가능한 오픈 소스 중 최고의 음성 합성 품질이라고 생각함

    • 최종 목표는 텍스트 토큰이 전혀 없는, 계속 실행되는 파형 대 파형 모델일 것임
  • 비슷한 것을 작업 중이었는데 이것을 발견함. 훌륭한 작업임. 데모를 좋아함