Construindo um Chatbot Interativo por Voz com LLMs Locais, STT e TTS
Este projeto torna realidade o sonho de um assistente de IA totalmente interativo por voz — rodando inteiramente em hardware local, sem depender de serviços na nuvem.
Ao combinar Speech-to-Text (STT), Text-to-Speech (TTS) e Modelos de Linguagem de Grande Porte (LLMs) locais usando Ollama, o sistema permite conversas naturais, privadas e em tempo real entre humanos e máquinas.
Toda a configuração roda dentro de containers Docker e pode ser implantada em dispositivos NVIDIA Jetson, computadores de borda ou qualquer sistema baseado em Linux com aceleração por GPU.
Visão Geral do Projeto
O objetivo deste projeto é criar um chatbot controlado por voz capaz de:
- Ouvir sua voz em tempo real.
- Entender sua fala usando ASR (Reconhecimento Automático de Fala) local.
- Gerar respostas inteligentes usando um LLM local.
- Falar essas respostas de forma natural usando TTS (Text-to-Speech).
Todos os componentes são autônomos e rodam localmente, oferecendo controle total sobre seus dados — sem dependências de nuvem, sem latência e sem preocupações com privacidade.
Componentes do Sistema
1. Módulo Speech-to-Text (STT)
Transforma sua entrada falada em texto em tempo real.
Principais recursos:
- Transcrição rápida e precisa usando NVIDIA Riva ASR.
- Suporte a múltiplos idiomas.
- Otimizado para dispositivos de borda.
2. Módulo Text-to-Speech (TTS)
Converte as respostas do chatbot em saída de voz com som natural.
Destaques:
- Síntese de fala multilíngue, expressiva e realista.
- Alimentado por NVIDIA Riva TTS.
- Baixa latência — perfeito para conversas interativas.
3. LLM Local (Ollama)
No coração do chatbot está o Ollama, um mecanismo de inferência local para executar LLMs modernos com eficiência.
Recursos:
- Operação offline (sem necessidade de internet).
- Respostas em tempo real mesmo em dispositivos Jetson.
- Retenção de contexto para um diálogo fluido e coerente.
- Suporta vários modelos, incluindo Llama, Phi, Gemma, Mistral e outros.
4. Camada de Interação com o Usuário
Uma interface simples e intuitiva permite que os usuários:
- Iniciem ou parem a interação por voz via botões ou comandos.
- Vejam transcrições em tempo real e respostas do chatbot.
- Desfrutem de uma comunicação suave e de baixa latência, de voz para voz.
Configurando o Ollama Localmente
Começaremos instalando o Jetson Containers para gerenciar e implantar facilmente nossos serviços dentro do Docker.
# Install Jetson Container tools
git clone https://github.com/dusty-nv/jetson-containers
bash jetson-containers/install.sh
Depois de instalar, faça o pull e execute o container do Ollama:
jetson-containers run --name ollama $(autotag ollama)
ollama run llama3.2:1b
💡 Dica: Comece com modelos menores (como llama3.2:1b) para testar sua configuração e, em seguida, faça o scale-up.
Modelos disponíveis em ollama.com/library:
| Modelo | Parâmetros | Tamanho | Comando |
|---|---|---|---|
| Llama 3.2 | 3B | 2.0 GB | ollama run llama3.2 |
| Llama 3.2 | 1B | 1.3 GB | ollama run llama3.2:1b |
| Llama 3.2 Vision | 11B | 7.9 GB | ollama run llama3.2-vision |
| Phi 3 Mini | 3.8B | 2.3 GB | ollama run phi3 |
| Gemma 2 | 9B | 5.5 GB | ollama run gemma2 |
| Mistral | 7B | 4.1 GB | ollama run mistral |
Se você estiver usando um NVIDIA Jetson AGX, poderá executar confortavelmente modelos médios a grandes. Para Jetsons menores, mantenha-se em modelos leves (1B–3B).
Execute o Ollama diretamente no terminal ou por meio do script Python fornecido ollama_run.py.
python3 ollama_run.py
Exemplos:
Uso no terminal
Integração em Python
NVIDIA Riva: STT e TTS
Para habilitar a interação por voz real, usamos o NVIDIA Riva, um kit de ferramentas acelerado por GPU que fornece:
- Reconhecimento Automático de Fala (ASR)
- Text-to-Speech (TTS)
- Tradução Automática Neural (NMT) (opcional)
Ele pode ser implantado em qualquer lugar — desde a nuvem até dispositivos embarcados como a série Jetson.
Etapa 1: Obtenha Sua Chave de API NGC
- Faça login no NVIDIA NGC.
- Crie uma chave de API e salve-a localmente — você vai precisar dela para acessar os recursos do Riva.
Etapa 2: Configurar o NGC no Jetson
cd ~ && mkdir ngc_setup && cd ngc_setup
wget --content-disposition https://api.ngc.nvidia.com/v2/resources/nvidia/ngc-apps/ngc_cli/versions/3.36.0/files/ngccli_arm64.zip
unzip ngccli_arm64.zip
chmod u+x ngc-cli/ngc
echo "export PATH=\"$PATH:$(pwd)/ngc-cli\"" >> ~/.bash_profile && source ~/.bash_profile
ngc config set
Use sua chave de API quando solicitado.
Etapa 3: Instalar o Riva no Jetson
Certifique-se de estar executando o JetPack 6.0 (ou verifique a compatibilidade na Matriz de Suporte).
cd ~ && mkdir riva_setup && cd riva_setup
ngc registry resource download-version nvidia/riva/riva_quickstart_arm64:2.16.0
cd riva_quickstart_v2.13.1
No config.sh, desative serviços não utilizados para economizar recursos:
service_enabled_nlp=false
service_enabled_nmt=false
Em seguida, configure o Docker para usar o runtime NVIDIA editando /etc/docker/daemon.json:
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
Reinicie o Docker:
sudo systemctl restart docker
Por fim, inicialize e inicie o Riva:
sudo bash riva_init.sh
sudo bash riva_start.sh
Executando o Chatbot
Quando tudo estiver pronto, execute a aplicação principal:
git clone https://github.com/kouroshkarimi/local_chatbot_jetson.git
cd local_chatbot_jetson
python3 app.py --list-input-devices
python3 app.py --list-output-devices
python3 app.py --input-device <your_input_id> --output-device <your_output_id>
Agora você pode falar com o seu assistente, e ele vai ouvir, pensar e responder — tudo localmente, alimentado pelo seu Jetson.
Principais Vantagens
- 🔒 100% privado – nenhum dado sai do seu dispositivo
- ⚡ Resposta em tempo real – otimizado para baixa latência
- 🌐 Multilíngue – suporta vários idiomas e sotaques
- 🧩 Modular – cada componente pode ser substituído ou estendido
- 🖥️ Amigável à borda – implantável em Jetson ou sistemas Linux padrão
Melhorias Futuras
- Integração com módulos de visão para interação multimodal
- Suporte a clonagem de voz personalizada em TTS
- Persistência de memória entre sessões para um diálogo mais natural
- Interface web ou móvel
🎉 Aproveite Suas Conversas!
Parabéns — você acabou de criar seu próprio assistente de IA com voz e foco em privacidade.
Agora relaxe, converse com o seu robô e divirta-se explorando o futuro da interação humano-IA. 🤖💬
“TENHA UMA BOA CONVERSA COM OS ROBÔS :)”
Referências
- RAG Local baseado em Jetson com LlamaIndex
- Local Voice Chatbot: Implantar Riva e Llama2 no reComputer
- ChatTTS
- Speech to Text (STT) and Text to Speech (TTS)
- Ollama
✨ Projeto de Contribuidor
- Este projeto é apoiado pelo Projeto de Contribuidores da Seeed Studio.
- Um agradecimento especial a kourosh karimi por seus esforços dedicados. Seu trabalho será exibido.
Suporte Técnico & Discussão de Produtos
Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes formas de suporte e garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.