블로그·
온디바이스
July 7, 2026

음성 에이전트를 기기에서 실행하기
하나의 파이프라인, 세 가지 메모리 예산.

로컬 음성 에이전트는 하나의 모델이 아니라 넷으로 이루어진 파이프라인입니다. 음성 활동 감지, 음성 인식, 언어 모델, 음성 합성이 턴을 관리하는 상태 기계로 이어져 있죠. 파이프라인은 휴대폰이든 노트북이든 같습니다. 달라지는 것은 각 칸에 어떤 모델을 넣느냐이고, 그것은 두 숫자가 결정합니다——메모리가 얼마나 있는지, 그리고 어떤 가속기에 먹이는지.

기억할 숫자는 한 모델이 아니라 루프 전체입니다. 음성 인지(STT) + 답변 생성(LLM) + 음성 합성(TTS)이 모두 그 안에 들어갑니다——iPhone에서 약 1.2 GB, Galaxy S23에서 약 1.5 GB, 그리고 진짜 대화 두뇌를 얹은 Mac에서 약 4 GB 미만.

코어 라이브러리

이식 가능한 부분은 파이프라인이다.

오케스트레이션은 speech-core에 순수 C++ 상태 기계로 존재하며 모델에 구애받지 않습니다. 네 단계는 모두 인터페이스라 어떤 백엔드든 꽂을 수 있습니다——기기의 ONNX, LiteRT, CoreML/MLX, 심지어 클라우드 API까지. 그래서 같은 파이프라인이 휴대폰에서 270M 툴 호출기를, Mac에서 Gemma 4 두뇌를 돌립니다.

On-device voice-agent pipelineMicrophone audio passes an optional wake-word gate, echo cancellation, and enhancement, then voice activity detection, speech-to-text (perception), a language model with tool calls (generation), and text-to-speech (synthesis) back to the speaker. The synthesized audio feeds back as the echo-cancellation reference.wake word · AEC · enhance (opt.)tools?Audiomic inVADturn gateSTTperceptionLLMgenerationTTSsynthesisAudiospeakerAEC reference

하나의 루프, 네 단계. 웨이크워드, AEC, 향상은 VAD 이전의 선택적 단계입니다. LLM의 툴 호출이야말로 그것을 대답만이 아니라 행동하게 만듭니다.

오케스트레이터는 VoicePipeline speech-core)입니다. 턴 감지, 끼어들기, 대화 기록, 툴 호출 루프, 음성 큐를 맡지만 자체 모델은 없습니다. 각 단계는 인터페이스VADInterface, STTInterface, LLMInterface, TTSInterface) 뒤에서 교체 가능하며, ONNX Runtime, LiteRT, CoreML/MLX(자매 라이브러리 speech-swift경유), 심지어 클라우드 API로 구현합니다. 더 가벼운 모드도 있습니다——Echo(VAD → STT → TTS)와 TranscribeOnly(VAD → STT → 텍스트).

모바일

NPU 우선, 루프 전체가 약 1.5 GB에 들어간다.

휴대폰에서 제약은 메모리·배터리·발열이지 순수 연산력이 아닙니다. 올바른 타깃은 신경 처리 장치(NPU)——iOS의 Apple Neural Engine, Android의 NNAPI / Hexagon. 양자화 트랜스포머를 CPU나 GPU의 몇 분의 일 전력으로 돌리고, CPU는 오디오와 UI에 남겨 둡니다.

왜 CPU나 GPU가 아니라 NPU인가? NPU는 한 가지 일——신경망을 이루는 저정밀 곱셈-누산——을 위해 만든 고정 기능 데이터플로 엔진입니다. 가중치를 연산 유닛 바로 옆 온칩 SRAM에 두고, CPU나 GPU 에너지의 대부분을 먹는 명령어 페치/디코드와 넓은 범용 데이터패스를 건너뜁니다. 데이터 이동이 계산보다 훨씬 비싸므로 둘 다 로컬에 두는 것이 이득입니다. 같은 행렬 곱이 몇 분의 일 와트로 돌아가고——열 스로틀링도, 배터리 소모도 없이 CPU는 나머지 모든 일에 자유롭습니다.

그래서 모바일 파이프라인은 작고 양자화된 NPU 친화 모델입니다. Silero VAD, Parakeet-EOU 120M(발화 종료 감지를 내장한 경량 스트리밍 STT), FunctionGemma 270M(툴 호출 두뇌), 그리고 음성에 Kokoro-82M 또는 Supertonic-3. 기기 실측:

단계 · 모델iPhone 16 Pro(CoreML / ANE)Galaxy S23(LiteRT / ONNX, CPU)
STT · Parakeet-EOU 120M0.04 RTF · 297 MB0.21 RTF · 232 MB
STT · Omnilingual 300M0.28 RTF · 495 MB0.15 RTF · 831 MB
TTS · Kokoro-82M0.08 RTF · 676 MB0.53 RTF · 640 MB
TTS · Supertonic-3 99M0.15 RTF · 956 MB0.34 RTF · 832 MB
LLM · FunctionGemma 270M128 tok/s · 236 MB118 tok/s · 611 MB

RTF = 벽시계 시간 ÷ 오디오 초(낮을수록 빠름, <1.0이면 실시간보다 빠름). 최대 메모리는 모델별 단독.

모든 단계가 실시간을 넘습니다. 라이브 에이전트로 함께 올리면 상주 워킹셋은 iPhone에서 약 1.2 GB, Galaxy S23에서 약 1.5 GB——차이는 거의 전부 LLM입니다. FunctionGemma는 ANE에서 236 MB, S23 CPU에서 611 MB. iOS는 이미 NPU에서 돌고(그래서 STT가 0.04 RTF, LLM이 128 tok/s), Android는 오늘 CPU로 실시간이며 NNAPI/Hexagon 델리게이트는 필수가 아니라 여유분입니다.

사용해 보기: Examples/iOSEchoDemo는 iPhone에서 Parakeet + Silero + Kokoro를 완전한 에코 루프로 돌립니다. Android 쪽은 speech-android에 있으며 같은 파이프라인을 감쌉니다. (Examples/iOSBenchmark가 위 iPhone 수치를 낸 측정 도구입니다.)

데스크톱

기계를 조종하는 진짜 LLM——그래도 4 GB 미만.

Mac에서는 제약이 느슨해집니다. CPU와 Metal GPU가 공유하는 통합 메모리. 같은 네 단계지만 더 큰 모델, 그리고 무엇보다 270M 툴 호출기 대신 진짜 대화 두뇌——그래도 루프 전체는 약 4 GB에 들어갑니다.

LLM은 두뇌이고, 모델 크기가 더는 선택이 아니게 되는 지점입니다. 시험 끝에 두 모델이 자격을 얻었습니다. 모바일의 FunctionGemma 270M(툴 호출을 내보내기에 충분하고, 휴대폰 측 에이전트에 필요한 전부)과 데스크톱의 Gemma 4 E2B/E4B(4-bit MLX)(진짜 멀티턴 대화와 추론이 버티면서도 가벼움). 유혹적인 중간——1B 미만의 콤팩트 챗 헤드——은 용량은 공짜처럼 보여도 실제 멀티턴에서 흔들려 탈락했습니다. 중요한 도약은 0.27B → 0.8B가 아니라 FunctionGemma의 툴 호출 → Gemma 4의 대화입니다.

스택의 나머지도 한 단계 올라갑니다. 데스크톱은 경량 Parakeet-EOU를 Parakeet-TDT(완전 다국어)로 바꾸고, TTS는 어디서나 Supertonic-3——빠르고, 44.1 kHz, 안정적. 더 무거운 제로샷 클론 TTS는 일부러 뺍니다. 클로닝은 항상 켜진 에이전트 안에 두기엔 아직 충분히 안정적이지 않습니다.

단계모바일데스크톱(Mac / MLX)
VADSilero v6.2.1Silero v6.2.1
STTParakeet-EOU (streaming)Parakeet-TDT (multilingual)
LLMFunctionGemma 270MGemma 4 E2B/E4B
TTSKokoro-82M / Supertonic-3Supertonic-3
Resident setiPhone ~1.2 GB · S23 ~1.5 GB~4 GB
Runner: Mac을 조종하는 음성 에이전트

그 데스크톱 경로가 바로 Runner Agent가 내놓는 것입니다——Mic → VAD → Parakeet-TDT → Gemma 4 → Supertonic TTS를 완전 로컬로 돌리는 공증된 macOS 앱. 47 MB DMG로, 루프 전체가 Apple Silicon에서 약 4 GB. 그리고 두뇌가 툴 호출을 내보내므로 Runner는 답만 하지 않고 음성으로 기계를 조종합니다——브라우저를 열어 DOM 조작을 실행하고, Telegram이나 WhatsApp을 열어 수신 메시지를 읽고 답을 입력하며, 앱을 실행하고 제어합니다——모두 음성 명령으로, 모두 로컬로. 이것이 데스크톱이 270M 툴 호출기가 아니라 Gemma 4를 원하는 진짜 이유입니다. 기계에 행동하려면 칸 채우기가 아니라 진짜 추론이 필요합니다.

Takeaways

하나의 파이프라인, 예산에 맞춰.

파이프라인은 이식되지만 모델은 아니다

VAD → STT → LLM → TTS는 어디서나 동일. 흥미로운 건 각 단계를 기기의 가속기와 메모리에 맞추는 것.

모바일: NPU 우선, 약 1.2–1.5 GB

배터리와 발열이 모델을 고른다. ANE는 iOS를 CPU 관점에서 사실상 공짜로 만든다. Android는 오늘 CPU로 실시간, NPU 여유는 앞으로.

데스크톱: 진짜 두뇌, 그래도 약 4 GB

루프 전체가 약 4 GB에 들어가고, 그 예산으로 음성으로 기계를 조종하는 Gemma 4 추론과 다국어 Parakeet-TDT를 얻는다.

모두 로컬

오디오도 대화 상태도 기기를 떠나지 않는다——인지·추론·합성 모두 눈앞의 금속 위에서 돈다.

Where next

계속 읽기.