Reachy Mini goes fully local
Quick Summary
Reachy Mini의 음성 대화 전 과정을 로컬에서 실행하도록 VAD·STT·LLM·TTS 계단식 파이프라인을 구축하고, 필요에 따라 각 구성 요소와 추론 방식을 교체하는 방법을 설명한 안내서다.
🖼️ 인포그래픽
🖼️ 4컷 인포그래픽
💡 한 줄 요약
Reachy Mini의 음성 대화 전 과정을 로컬에서 실행하도록 VAD·STT·LLM·TTS 계단식 파이프라인을 구축하고, 필요에 따라 각 구성 요소와 추론 방식을 교체하는 방법을 설명한 안내서다.
📌 핵심 요약
- speech-to-speech 라이브러리는 Silero VAD, Parakeet-TDT 0.6B v3, 선택한 LLM, Qwen3-TTS를 연결하고 Reachy Mini가 사용하는 실시간 웹소켓 규격을 제공한다.
- 권장 빠른 시작 구성은 llama.cpp로 Gemma 4를 제공하고, 별도 터미널에서 speech-to-speech를 실행한 뒤 대화 앱의 연결 설정을 로컬 백엔드로 바꾸는 방식이다.
- 로컬 실행은 음성이 네트워크 밖으로 나가지 않는 개인정보 보호, API 사용료 제거, VAD·STT·LLM·TTS를 자유롭게 교체할 수 있는 통제권을 제공한다.
- LLM은 llama.cpp나 vLLM 기반 별도 서버, MLX나 Transformers 기반 프로세스 내 모델, 또는 Responses API 호환 외부 서비스와 연결할 수 있다.
- 실시간 대화의 체감 품질은 LLM 추론 지연과 각 음성 모델의 속도·품질 절충에 좌우되므로, 사용 언어와 하드웨어에 맞춰 구성 요소를 조정해야 한다.
🧩 주요 포인트
- speech-to-speech 라이브러리는 Silero VAD, Parakeet-TDT 0.6B v3, 선택한 LLM, Qwen3-TTS를 연결하고 Reachy Mini가 사용하는 실시간 웹소켓 규격을 제공한다.
- 권장 빠른 시작 구성은 llama.cpp로 Gemma 4를 제공하고, 별도 터미널에서 speech-to-speech를 실행한 뒤 대화 앱의 연결 설정을 로컬 백엔드로 바꾸는 방식이다.
- 로컬 실행은 음성이 네트워크 밖으로 나가지 않는 개인정보 보호, API 사용료 제거, VAD·STT·LLM·TTS를 자유롭게 교체할 수 있는 통제권을 제공한다.
- LLM은 llama.cpp나 vLLM 기반 별도 서버, MLX나 Transformers 기반 프로세스 내 모델, 또는 Responses API 호환 외부 서비스와 연결할 수 있다.
- 실시간 대화의 체감 품질은 LLM 추론 지연과 각 음성 모델의 속도·품질 절충에 좌우되므로, 사용 언어와 하드웨어에 맞춰 구성 요소를 조정해야 한다.
🧠 상세 정리
1. Reachy Mini 음성 대화의 완전한 로컬화
이 글은 Reachy Mini를 조립하고 대화 앱을 설치한 뒤, 음성 대화에 필요한 전체 실행 환경을 사용자 컴퓨터에서 구동하는 방법을 설명한다. 기존에는 사용자의 음성을 서버로 보내야 했지만, 새 구성에서는 클라우드와 API 키 없이 모든 처리를 로컬 하드웨어에서 수행할 수 있다. 핵심은 음성 활동 감지, 음성 인식, 언어 모델, 음성 합성을 차례로 연결하는 speech-to-speech 계단식 파이프라인이다. 이 파이프라인은 Reachy Mini 대화 앱이 이미 이해하는 실시간 API 호환 웹소켓 경로를 제공하므로, 백엔드를 실행한 다음 앱의 연결 대상만 바꾸면 된다. 글은 계단식 구성이 현재 공개 소스 환경에서 유연성이 높으며, 새로운 모델이 등장할 때 각 단계를 독립적으로 교체할 수 있다는 점을 강조한다.
2. llama.cpp와 Gemma 4로 시작하는 로컬 LLM
빠른 시작에서는 Hugging Face의 llama.cpp를 이용해 Gemma 4 모델을 로컬 서버로 제공한다. llama.cpp는 macOS에서 Homebrew로, Windows에서 winget으로 설치할 수 있으며, 제시된 명령을 처음 실행하면 모델을 허브에서 내려받고 이후에는 캐시를 사용한다. 병렬 슬롯 수를 2로 지정하면 첫 요청이 처리되는 동안 빠른 끼어들기와 같은 두 번째 요청을 막지 않고 받을 수 있고, 65,536 토큰의 문맥 공간은 두 슬롯이 공유한다. 플래시 어텐션은 최신 하드웨어에서 속도를 높이고 메모리 사용량을 낮추기 위한 설정이며, 전체 슬라이딩 윈도 어텐션 캐시는 일부 메모리를 더 사용하는 대신 Gemma의 프롬프트 처리를 빠르게 한다. 이 서버는 뒤에서 실행되는 언어 모델 계층으로서, 별도로 구동되는 음성 처리 루프와 HTTP로 통신한다.
3. speech-to-speech 설치와 로봇 연결
언어 모델 서버를 한 터미널에서 실행한 상태로 speech-to-speech 라이브러리를 설치하고, 응답 API 주소를 로컬 llama.cpp 서버로 지정하면 터미널에서 먼저 음성 대화를 시험할 수 있다. 최초 실행 시에는 Parakeet-TDT 0.6B v3 음성 인식 모델과 Qwen3-TTS 음성 합성 모델을 내려받기 때문에 시간이 들지만, 이후 실행에서는 내려받은 파일을 재사용한다. 로컬 시험 모드가 정상적으로 동작하면 해당 모드 옵션을 제거해 Reachy Mini가 접속할 수 있는 음성 서버로 실행한다. 이어 데스크톱 앱에서 로봇과 대화 앱을 시작하고, 대화 앱의 HF 백엔드에서 연결 편집 기능을 눌러 로컬 모드를 선택한다. llama.cpp와 speech-to-speech가 모두 실행 중이고 연결 주소가 올바르면, 사용자는 음성 데이터를 외부로 보내지 않고 로봇과 대화할 수 있다.
4. 로컬 서버의 이점과 권장 음성 구성
자체 음성 서버를 운영하는 첫 번째 이점은 음성이 사용자 네트워크를 떠나지 않고, 전체 파이프라인이 사용자가 통제하는 하드웨어에서 실행된다는 것이다. 두 번째는 분당 또는 토큰당 부과되는 API 비용이 없다는 점이며, 세 번째는 VAD·STT·LLM·TTS를 원하는 구현으로 교체할 수 있다는 점이다. 글에서 권장하는 음성 활동 감지기는 작고 정확하며 중앙처리장치에서도 동작하는 Silero VAD v5이고, 음성 인식에는 스트리밍에 적합하고 영어 처리 속도와 품질이 좋은 Parakeet-TDT 0.6B v3를 사용한다. 음성 합성에는 표현력이 높고 지연이 낮으며 다국어와 사용자 지정 음성을 지원하는 Qwen3-TTS를 선택한다. 다만 더 빠르지만 품질이 낮은 음성 합성 모델이나 더 느리지만 품질이 높은 음성 인식 모델도 있으므로, 다국어가 아니라 특정 언어만 중요하다면 사용 목적에 맞게 기본값을 교체할 수 있다.
5. Responses API로 음성 루프와 LLM 분리
전체 시스템의 주요 병목은 언어 모델의 추론 지연이므로, speech-to-speech는 LLM을 음성 루프와 다른 프로세스에서 실행할 수 있도록 Responses API 규격을 지원한다. 한 터미널에서는 llama.cpp나 vLLM 같은 모델 서버를 실행하고, 다른 터미널에서는 VAD·STT·TTS를 포함한 실시간 음성 루프를 실행한 뒤 두 프로세스를 HTTP로 연결한다. 이렇게 하면 음성을 처리하는 부분은 동일하게 유지하면서 언어 모델과 추론 엔진만 변경할 수 있으며, 로컬 모델뿐 아니라 같은 규격을 제공하는 외부 서버도 연결할 수 있다. llama.cpp 구성에서는 Gemma 4 서버의 로컬 주소에 버전 경로를 붙여 speech-to-speech가 요청하도록 설정하고, 모델 이름도 해당 GGUF 모델로 지정한다. 결과적으로 대화 앱이 접속하는 실시간 웹소켓 계층과 실제 언어 모델 추론 계층이 분리되어, 음성 파이프라인을 다시 구성하지 않고도 두뇌 역할의 모델을 바꿀 수 있다.
6. vLLM 구성과 대화 지연 최적화
vLLM을 사용할 때는 Responses API와 음성 백엔드의 도구 호출 스트리밍을 완전히 지원하는 0.21.0 이상 버전이 필요하며, 이전 버전은 서버가 시작되더라도 도구 호출 시 문제가 생길 수 있다. 자동 도구 선택 기능을 활성화하고 모델 계열에 맞는 도구 호출 분석기를 지정해야 하며, 예시로 Qwen3 지시 모델에는 qwen3_coder, Llama 3에는 llama3_json, Hermes 계열에는 hermes가 제시된다. 자연스러운 음성 대화에서는 사고 채널을 비활성화하는 설정이 권장되는데, 사고 과정에서 생성되는 모든 토큰이 로봇의 응답 전 침묵 시간으로 이어지기 때문이다. 글의 예시는 Qwen3-4B-Instruct-2507을 로컬 vLLM 서버로 제공하고, speech-to-speech가 해당 서버의 Responses API 주소를 사용하도록 구성한다. 다중 토큰 예측 설정은 선택 사항이지만 종단 간 지연을 크게 줄일 수 있으므로, 모델이 이를 지원할 때는 유지하는 편을 권장한다.
7. 동일한 규격으로 연결하는 외부 추론 선택지
글은 완전한 로컬 구성 외에도 동일한 음성 파이프라인에서 사용할 수 있는 Responses API 기반 외부 추론 선택지를 함께 설명한다. Hugging Face Inference Endpoints를 이용하면 관리형 그래픽처리장치에 대화 모델을 배포한 뒤 엔드포인트 주소와 인증 토큰을 음성 루프에 전달할 수 있다. 자체 엔드포인트를 관리하고 싶지 않다면 Hugging Face Inference Providers를 통해 Together, Fireworks, Replicate 같은 제삼자 백엔드로 요청을 전달할 수 있으며, 라우터 주소와 토큰만 바꾸면 된다. OpenAI 또는 같은 규격을 구현한 OpenRouter, Together, Fireworks 등의 제공자도 모델 이름, 기본 주소, API 키를 변경하는 방식으로 연결할 수 있다. 따라서 외부 서비스를 선택하면 완전한 로컬 실행이라는 조건에서는 벗어나지만, VAD·STT·TTS 구성을 그대로 둔 채 LLM 추론 위치만 변경할 수 있다.
8. MLX와 Transformers를 이용한 프로세스 내 실행
언어 모델을 별도 Responses API 서버로 분리하지 않고 speech-to-speech 프로세스 안에서 직접 실행하는 방법도 제공된다. 애플 실리콘 기반 맥에서는 MLX가 비교적 간단한 선택이며, 글은 M 계열 칩에서 빠르게 반응하면서 대화를 수행할 역량을 갖춘 Qwen3-4B-Instruct-2507을 권장한다. MLX 백엔드와 모델 이름을 지정해 실행하면 기본적으로 로컬의 실시간 웹소켓 주소에서 서버가 열리고, 대화 앱을 이 주소에 연결해 로봇과 대화할 수 있다. CUDA 환경, 리눅스, 중앙처리장치 또는 MPS를 사용하거나 MLX용으로 가중치를 다시 변환하지 않고 다양한 모델을 교체하려면 Transformers 백엔드를 사용할 수 있다. Qwen3 4B 모델은 단일 소비자용 그래픽처리장치에서 속도와 품질의 균형이 좋은 선택으로 소개되지만, 백엔드가 지원한다면 더 큰 Gemma·Qwen·Mistral 모델로 바꿀 수 있다.
9. 노트북과 무선 Reachy Mini의 네트워크 연결
음성 엔진을 노트북에서 실행하고 대화 앱을 Reachy Mini Wireless에서 실행한다면, 핵심 변경 사항은 로봇이 접속할 서버 주소다. 엔진을 로컬 루프백 주소에만 묶지 말고 근거리 통신망에서 접근 가능한 주소로 열어야 하며, 대화 앱의 연결 설정에는 노트북의 실제 내부망 주소를 입력해야 한다. macOS에서는 네트워크 장치별 ipconfig 명령, 리눅스에서는 hostname 명령, Windows에서는 ipconfig를 사용해 주소를 찾을 수 있다. 일반적으로 192.168 또는 10으로 시작하는 주소를 사용하며, 169.254로 시작하는 주소가 보인다면 기기가 실제 네트워크에 정상적으로 연결되지 않은 상태다. 최종적으로 Reachy Mini는 Silero로 사용자의 발화를 감지하고 Parakeet-TDT로 문자화하며, 선택한 LLM으로 응답을 생성한 뒤 Qwen3-TTS로 음성을 출력하는 하나의 대화 루프를 갖게 된다.
🧾 핵심 주장 / 시사점
- 계단식 구조의 핵심 가치는 특정 모델 조합 자체보다 VAD·STT·LLM·TTS를 독립적으로 교체하면서 음성 앱의 연결 규격은 유지할 수 있다는 데 있다.
- 자연스러운 로봇 대화에서는 언어 모델의 절대적인 성능뿐 아니라 첫 음성 응답까지의 지연이 중요하므로, 사고 채널 비활성화와 다중 토큰 예측 같은 추론 설정이 사용자 체감에 직접 영향을 준다.
- 완전한 로컬 실행과 외부 LLM 사용은 같은 speech-to-speech 인터페이스에서 선택할 수 있지만, 음성이 네트워크 밖으로 나가지 않는다는 개인정보 보호 이점은 전체 파이프라인을 로컬에서 실행할 때 성립한다.
✅ 액션 아이템
- Silero VAD, Parakeet-TDT 0.6B v3, 선택 LLM, Qwen3-TTS를 조합해 실시간 웹소켓 규격 기반 speech-to-speech 파이프라인을 구성한다.
- 초기 적용은 llama.cpp Gemma 4 기반으로 speech-to-speech를 별도 터미널에서 띄운 뒤 대화 앱의 연결 대상을 로컬 백엔드로 전환한다.
- 음성 품질·지연 요구와 하드웨어 조건을 기준으로 LLM·VAD·STT·TTS의 속도·품질 절충점을 점검해 교체 우선순위를 정한다.
❓ 열린 질문
- VAD·STT·LLM·TTS 결합에서 사용 언어별 실시간 체감 품질을 좌우하는 병목 지점은 무엇인가?
- Gemma 4 llama.cpp 단독 구성이 API 비용 절감과 응답 품질을 동시에 만족하는가, 또는 언제 대체 백엔드로 전환해야 하는가?
- 오디오를 네트워크 밖에 두는 로컬 구성에서 개인정보 보호를 보장하면서 지연 임계값을 충족하는지 어떻게 판단할 것인가?