parlor

Local AI RunnersCLIPython

★ 2,064주당 +4조회 4

무엇인가

Parlor는 로컬 하드웨어에서 실시간 음성·영상 대화를 처리하는 온디바이스 멀티모달 AI 서버다. 클라우드 음성 비서가 원격 서버에서 수행하는 발화 인식, 턴 판정, 응답 생성, 음성 합성을 한 대의 머신 안에서 재현하는 것을 목표로 한다. 전체 파이프라인은 완전 양방향(full-duplex) 모델이 아니라 단계별 캐스케이드 구조로 조립된다. 저장소 스스로를 연구 프리뷰 단계로 표시한다.

어떻게 동작하나

브라우저 클라이언트가 카메라와 마이크를 잡고 WebSocket으로 Python 서버에 연결한다. 브라우저 쪽 Silero VAD가 약 200ms 무음 기준으로 발화를 자르고, Pipecat의 smart-turn-v3가 발화가 실제로 끝났는지 판정한다. 발화 중인 구간의 카메라 프레임과 음성은 llama.cpp의 프롬프트 캐시에 미리 채워져 긴 질문도 응답 시작이 빠르다. 응답은 들린 내용의 트랜스크립트를 화면에 먼저 띄운 뒤 문장 단위로 합성·재생되며 생성과 재생이 겹친다. 타이머·모드 전환·리서치 요청 같은 제어는 같은 프롬프트 캐시 위의 문법 강제 JSON 요청으로 따로 판정되고 TTS 재생 아래에 숨는다. 타이머 시계는 서버가 소유한다.

무엇과 다른가

GPT-Live나 ChatGPT Advanced Voice 같은 음성 비서는 제공자 서버에서 모델을 실행한다. Parlor는 같은 기능군을 MacBook M3 Pro 한 대에서 100% 로컬로 돌리는 것을 제약으로 삼는다. 양방향 모델을 파인튜닝하는 대신 캐스케이드 파이프라인을 택했다. 제어 신호를 음성 응답에 태그로 섞지 않고 별도 JSON 요청으로 분리해, 제어 마크업이 TTS로 새거나 말로 한 약속이 지켜지지 않는 문제를 구조적으로 막는다. 리서치 기능은 REASONER_API_KEY가 설정된 경우에만 OpenAI 호환 엔드포인트로 작업을 넘기고, 없으면 전부 온디바이스로 남는다.

어떻게 쓰나

llama.cpp를 먼저 설치하고(brew install llama.cpp) Python 3.12+ 환경에서 서버를 띄운 뒤 브라우저로 http://localhost:8000을 열고 카메라·마이크 권한을 준다. 첫 실행 시 Gemma 4 E4B QAT와 멀티모달 프로젝터, TTS 모델이 약 5.7GB 자동 다운로드된다. 설정은 셸 환경변수나 저장소 루트의 .env로 넣고 전체 목록은 docs/configuration.md에 있다. MODEL=e2b로 더 작은 모델을, MODEL=12b로 더 큰 모델을 지정한다. 테스트는 실제 서버를 띄워 WebSocket으로 합성 음성을 보내는 종단간 스위트로 돌리며, PARLOR_TEST_URL로 이미 실행 중인 서버를 지정할 수 있다.

전제와 한계

macOS Apple Silicon 또는 지원 GPU가 있는 Linux에서만 동작한다. llama.cpp 빌드 b9503(2026년 6월) 이상이 필요하고 MODEL=12b는 b9512 이상을 요구한다. 기본 E4B 모델에 약 6GB, e2b에 약 4GB의 여유 RAM이 필요하다. 에코는 브라우저의 에코 캔슬러 없이 처리되므로 헤드폰을 쓰는 편이 안전하다. 에코, VAD 감각, 다국어 발화처럼 브라우저에 붙은 동작은 실제 마이크와 청취로만 검증된다.

관련 논문 5

유사 도구