로컬 어시스턴트를 위한 온디바이스 음성 프론트엔드 구축: 깨우기 단어 설정 및 STT 전 음성 필터링 (5개 모델, 7.5MB, Apache-2.0, 초기 프리뷰)
I built a small on-device voice front-end for local assistants: type any wake word, keep only your voice before STT (5 models, 7.5 MB, Apache-2.0, early preview)
핵심 요약
로컬 음성 어시스턴트의 정확도를 높이기 위해 STT 전 단계에서 화자 음성만 추출하고 깨우기 단어를 처리하는 경량 온디바이스 솔루션입니다.
- 온디바이스 처리 — 5개의 경량 모델로 구성되어 로컬에서 음성 분리 및 깨우기 단어 감지 수행
- 음성 필터링 — Focus 모델을 통해 주변 소음과 타인의 목소리를 제거하고 사용자 음성만 추출
- 유연한 깨우기 단어 — 별도의 학습 없이 텍스트 입력만으로 깨우기 단어 설정 가능
- 다양한 플랫폼 지원 — Rust 기반 엔진으로 브라우저, 모바일, 데스크탑 환경에서 동일한 성능 제공

GitHub: https://github.com/alkove-ai/alkove (Apache-2.0, 코드 및 가중치)
안녕 r/LocalLLaMA 형들,
먼저 내 소개부터 할게. 본업은 프로덕션 환경에서 LLM 시스템을 만드는 거야. RAG를 곁들인 툴 콜링 어시스턴트랑 오디오 중심 파이프라인 두 개를 굴리고 있어.
첫 번째는 기업의 최신 콘텐츠를 여러 언어로 된 2인 진행 라디오 쇼로 바꾸는 거야. 소스별 요약, LLM 검증기와 코드 체크로 소스 대조를 마친 구조화된 스크립트, 턴마다 Whisper로 전사해서 잘리거나 지어낸 말을 잡아내는 TTS 호출, 그리고 코드와 ffmpeg를 이용한 마스터링(턴별 레벨링, 진행자 간 오버랩 시뮬레이션, 라우드니스 정규화, 단어 타임스탬프에 맞춘 자막)까지 다 처리해.
두 번째는 브라우저 기반 실시간 음성 에이전트야. 클라이언트 사이드 VAD랑 노이즈 제거, STT 폴백 체인, 턴 종료나 끼어들기("stop")를 판단하는 작은 결정 모델, 그리고 문장 단위로 읽어주는 TTS로 구성돼. 이 에이전트 만들 때 제일 골치 아팠던 건 LLM 자체가 아니라 그 앞단이었어. 사용자 주변에서 떠드는 소리가 전사 결과에 섞여 들어와서 헛짓거리(false barge-ins)를 유발하는데, 노이즈 제거기로도 해결이 안 되더라고. 다른 사람 목소리도 결국 '말소리'니까.
그래서 STT랑 LLM이 돌아가기 전 단계인 오디오 레이어부터 손보기 시작했고, 그 결과물을 미리보기 버전으로 공유해. 이름은 Alkove야. 기기에서 돌아가는 5개의 작은 모델이 서로 협력하는 구조지.
- Lex (1.8 MB): 입력한 단어를 발음 형태로 바꿔줘. 그래서 웨이크 워드(호출어) 설정이 그냥 텍스트 입력으로 끝남. 학습이나 녹음할 필요가 전혀 없어.
- Spot (2.8 MB): 7개 언어로 그 발음을 감지해.
- Timbre (0.74 MB): 보이스프린트를 만들어. 웨이크 워드 세 번만 녹음하면 첫 프린트가 나오고, 대화할수록 계속 학습해.
- Focus (1.1 MB): STT 들어가기 전에 노이즈, 음악, 다른 사람 목소리를 싹 걷어내고 딱 너(가장 가깝거나 프린트가 일치하는 사람) 목소리만 남겨.
- Cue (1.1 MB): 30ms마다 말소리를 감지해. Focus 뒤에 붙여서 네 프린트랑 매칭하면, 네 목소리로만 턴이 시작되고 끝나니까 옆에서 누가 떠들어도 턴이 새로 열리지 않아.
보이스프린트는 선택 사항인데, 하나만 있으면 셋 다 커버 가능해. 웨이크 워드는 남의 목소리를 무시하고, Focus는 너만 남기고, Cue는 개인 맞춤형 VAD가 되는 거지.
이 서브레딧 형들이 좋아할 만한 기술적 디테일 좀 풀게:

