Por que Rodar Tudo Localmente?
Assistentes de voz baseados em nuvem são práticos, mas trazem preocupações com privacidade, custos recorrentes e falta de controle. Rodar tudo no seu próprio hardware muda o jogo:
- Privacidade: O áudio nunca sai da sua rede.
- Zero custos de API: Sem taxas por minuto ou token.
- Total flexibilidade: Troque qualquer componente (VAD, STT, LLM, TTS) quando um modelo melhor surgir.
Neste guia, você vai configurar um pipeline completo de fala para fala local para o robô Reachy Mini, usando a biblioteca open-source speech-to-speech da Hugging Face.

Passo a Passo
1. Sirva o LLM Localmente
Vamos usar o llama.cpp para rodar um modelo potente como o Gemma 4 E4B. Instale com brew install llama.cpp (macOS) ou winget install llama.cpp (Windows) e inicie o servidor:
llama-server -hf ggml-org/gemma-4-E4B-it-GGUF -np 2 -c 65536 -fa on --swa-full
Explicação dos flags:
-hf ...– baixa o modelo do Hugging Face Hub (primeira vez faz download).-np 2– duas slots paralelas para lidar com interrupções.-c 65536– janela de contexto de 64k para conversas longas.-fa on– ativa flash attention para velocidade e menor uso de memória.--swa-full– mantém cache de atenção de janela deslizante (processamento mais rápido).
2. Instale e Rode o Speech-to-Speech
Em outro terminal, instale a biblioteca:
uv pip install speech-to-speech
Depois, rode o pipeline em modo local (para testar no terminal):
speech-to-speech --responses_api_base_url "http://127.0.0.1:8080" --responses_api_api_key "" --mode local
Isso vai baixar o Parakeet-TDT 0.6B v3 (STT) e o Qwen3-TTS (TTS) na primeira execução.
3. Conecte o Reachy Mini
Quando o modo local funcionar, reinicie o servidor speech-to-speech sem --mode local para servir o robô. No app desktop do Reachy Mini, abra o app de conversa e selecione "edit connection" para escolher o backend local. Pronto! Agora é só conversar com seu robô, totalmente offline!

Customização e Opções Avançadas
Escolhendo o Backend do LLM
Você pode trocar o LLM conforme sua necessidade. Veja algumas opções:
| Backend | Comando | Melhor Para |
|---|---|---|
| llama.cpp | speech-to-speech --llm_backend responses-api --model_name "ggml-org/gemma-4-E4B-it-GGUF" | Inferência local rápida |
| vLLM | vllm serve Qwen/Qwen3-4B-Instruct-2507 --enable-auto-tool-choice --tool-call-parser qwen3_coder | Alto throughput |
| MLX (Apple Silicon) | speech-to-speech --llm_backend mlx-lm --model_name "mlx-community/Qwen3-4B-Instruct-2507-bf16" | Usuários de Mac |
| Transformers | speech-to-speech --llm_backend transformers --model_name "Qwen/Qwen3-4B-Instruct-2507" | CUDA/CPU |
| Compatível com OpenAI | speech-to-speech --responses_api_base_url "https://api.openai.com/v1" | Fallback para nuvem |
Pontos de Atenção
- Latência: O LLM é o gargalo. Desative o modo de raciocínio (
--default-chat-template-kwargs '{"enable_thinking":false}') para conversas naturais. - Hardware: Para melhores resultados, use GPU com pelo menos 8GB de VRAM. Decodificação especulativa MTP (vLLM) pode reduzir a latência.
- Rede: Para rodar o motor no laptop e o robô na mesma LAN, use
0.0.0.0e o IP do laptop (ex:192.168.x.x).
Próximos Passos
- Experimente diferentes modelos de STT/TTS (ex: Whisper, Coqui) para ajustar qualidade vs. velocidade.
- Explore chamadas de ferramentas para tarefas agênticas mais complexas.
- Veja Beyond Runtime Guardrails: The Missing Trust Layer for AI Agents para proteger seu agente de voz.

Conclusão
Você agora tem um loop de voz totalmente local: Silero VAD detecta a fala, Parakeet-TDT transcreve, o LLM escolhido gera a resposta e Qwen3-TTS fala de volta. Esse setup oferece privacidade completa, zero custos de API e infinitas possibilidades de customização. Dê um star nos repositórios e compartilhe seu pipeline na comunidade!
Fonte: Blog Hugging Face
Leitura Relacionada: CSS border-shape: O Game-Changer para Elementos com Bordas