๐๏ธ Voz e on-device: falar, ouvir e rodar local
Mandar um audio para o Jarvis e ouvir ele responder com voz parece magica โ mas e so uma corrente de pecas simples: o audio vira texto, o texto vira resposta, a resposta vira audio. Neste modulo voce monta esse pipeline na cabeca, entende por que a voz e so a "porta" (e nao o cerebro), e descobre como rodar o motor de IA dentro de casa, no seu proprio computador.
๐๏ธ Voz e interface, nao cerebro
Antes de qualquer codigo, uma frase que organiza o modulo inteiro: "voz e interface; o orquestrador e o cerebro; falar e uma saida opcional decidida na hora". A voz nao pensa. Ela so leva sua fala para dentro e traz a resposta para fora. Quem pensa โ quem decide o que responder, qual ferramenta usar, o que lembrar โ e o mesmo orquestrador de texto que voce ja conhece das outras trilhas.
Isso muda completamente como voce pensa o projeto. Voz nao e "uma IA diferente": e uma casquinha em volta do Jarvis que voce ja tem. Voce constroi o cerebro primeiro (texto), e so depois pluga ouvido e boca. Se a voz quebrar, o assistente de texto continua de pe.
Novo aqui? Um orquestrador e o "maestro" do Jarvis: o pedaco de codigo que recebe sua mensagem, conversa com o modelo de IA, chama ferramentas (agenda, busca, e-mail) e monta a resposta. A interface e so o canal por onde isso entra e sai โ pode ser texto no Telegram, voz, ou os dois. O cerebro e sempre o mesmo; muda so a porta.
๐งฉ Tres camadas, papeis separados
- โขEntrada de voz (ouvido): transforma o audio que voce mandou em texto. Opcional.
- โขOrquestrador (cerebro): le o texto, pensa, age, decide a resposta. Sempre presente.
- โขSaida de voz (boca): transforma a resposta em audio. Opcional, decidida a cada mensagem.
๐ Por que "opcional" importa
Voce nem sempre quer ouvir o Jarvis falar. Uma lista de compras e melhor em texto (da pra ler de relance); um "lembrete enquanto dirijo" e melhor em voz. Como a boca e opcional e decidida na hora, o mesmo assistente serve as duas situacoes sem voce trocar de app.
Conceitos-chave
A porta por onde a conversa entra e sai (texto ou voz).
O cerebro que pensa, age e decide a resposta.
Falar e escolhido a cada mensagem, nao sempre ligado.
A voz envolve o assistente de texto; nao o substitui.
๐ Ouvir: do audio ao texto (STT)
Quando voce segura o microfone no Telegram e manda um audio, o app entrega um arquivo num formato chamado .ogg (com compressao Opus) โ otimo para mandar pela rede, mas que os transcritores nem sempre engolem direto. O caminho do "ouvir" tem tres passos: receber o audio โ converter o formato โ transcrever para texto. So depois desse texto pronto e que o cerebro entra.
O caminho completo: audio entra pela esquerda, o cerebro pensa no meio, e a voz sai pela direita. Repare que o LLM no centro e o mesmo que responderia em texto โ voz so adiciona as pontas.
O motor de transcricao mais usado se chama Whisper (da OpenAI). Voce manda o audio convertido e ele devolve o texto, escolhendo o idioma (no nosso caso, pt de portugues). Uma pegadinha que derruba muita gente: a chave de API do Whisper e a chave da OpenAI (OPENAI_API_KEY), que e DIFERENTE da chave da Anthropic (ANTHROPIC_API_KEY) usada para o cerebro. Sao duas empresas, duas chaves, dois cadastros.
โ ๏ธ O erro classico das chaves trocadas
Se voce colocar a chave da Anthropic onde o Whisper espera a da OpenAI (ou vice-versa), a transcricao falha com um erro de "autenticacao invalida" e parece que tudo quebrou โ quando e so a chave errada na caixa errada. Guarde mentalmente: ouvir/falar pela OpenAI = OPENAI_API_KEY; pensar pela Anthropic = ANTHROPIC_API_KEY. (E o Whisper tambem roda local e gratis, sem chave nenhuma โ veja o topico 5.)
Conceitos-chave
"Speech-to-Text": transformar fala em texto.
O formato de audio que o Telegram entrega.
A ferramenta que converte o audio de um formato para outro.
O modelo que transcreve o audio em texto.
๐ฃ๏ธ Falar: do texto ao audio (TTS)
O caminho de volta e o espelho do "ouvir". O cerebro produz a resposta em texto; um modelo de voz le esse texto em voz alta e gera um arquivo de audio que o Telegram toca de volta para voce. Isso se chama TTS โ "Text-to-Speech", texto para fala. Voce ainda escolhe qual voz usar: grave, aguda, calorosa, neutra.
Aqui voce tem duas grandes familias de opcoes, e a escolha repete o tema do curso inteiro (nuvem x local). Uma voz de nuvem (por exemplo o modelo tts-1 da OpenAI, com vozes nomeadas como "nova") soa muito natural e nao exige hardware โ mas custa por uso e manda o texto para fora. Uma voz local roda no seu computador, e gratis e privada, mas costuma soar um pouco mais robotica e pesa na maquina.
โ Voz na nuvem (ex.: tts-1 / "nova")
- โSoa muito natural, quase humana.
- โNao exige nada do seu hardware.
- โVarias vozes prontas para escolher.
- โCusta por uso e o texto sai da sua maquina.
โ Voz local (roda no seu PC)
- โGratis depois de instalada, para sempre.
- โPrivada: o texto nunca sai de casa.
- โFunciona offline, sem internet.
- โVoz um pouco mais robotica e pesa na maquina.
๐ก Dica pratica
Comece com a voz de nuvem so para sentir o resultado funcionando ponta a ponta โ e mais facil de plugar. Quando o pipeline inteiro estiver de pe, troque a boca pela versao local se privacidade ou custo pesarem. Lembre: trocar a voz nao mexe no cerebro; e so a peca da ponta.
Conceitos-chave
"Text-to-Speech": transformar texto em fala.
O timbre escolhido โ ex.: "nova" no tts-1.
Natural e sem hardware, mas paga e nao privada.
Gratis, privada e offline; soa mais robotica.
๐ฆ Decisao por resposta: o Policy Engine
Se a boca e opcional e o cerebro pode ser barato ou caro, alguem precisa decidir a cada mensagem: respondo em texto ou em voz? Uso o modelo barato ou o premium? Encaminho para um humano? Esse "porteiro de decisoes" tem um nome no ecossistema: Policy Engine (motor de politica). Ele olha cada pedido e escolhe o caminho mais barato que ainda resolve bem.
O Policy Engine olha cada pedido e decide tres coisas: por onde responder (texto ou voz), com qual modelo (barato ou premium) e se precisa de um humano. Resultado: a resposta certa, no custo certo.
A logica e puro bom senso economico. "Que horas sao?" nao precisa do modelo mais caro do mundo nem de uma voz produzida โ texto curto, modelo barato, fim. Ja "me ajude a reescrever este e-mail dificil para o meu chefe" merece o cerebro premium. Decidir por resposta, e nao uma vez para sempre, e o que mantem a conta baixa sem perder qualidade onde importa.
Conceitos-chave
O "porteiro" que decide o caminho de cada mensagem.
Escolher caso a caso, nao uma config fixa.
Modelo simples no trivial, potente no dificil.
Casos sensiveis vao para uma pessoa de verdade.
๐ On-device de verdade: o cerebro local com Ollama
Ate aqui o cerebro morava na nuvem. Mas da para colocar o motor de IA dentro de casa, no seu proprio computador. A ferramenta-padrao para isso se chama Ollama: voce instala, baixa um modelo aberto, e ele responde โ gratis, privado e offline. O termo para isso e on-device: a inteligencia roda no aparelho, nao num servidor distante.
๐ Que modelo cabe no seu hardware (regra da RAM)
Modelos sao medidos em "B" (bilhoes de parametros โ o "tamanho do cerebro"). Maior = mais esperto, mas pesa mais. A regra pratica usa a sua RAM (a memoria de trabalho do computador):
- โข~3B (ex.: llama3.2): roda confortavel com 8 GB de RAM.
- โข~8B: pede 16 GB de RAM para nao engasgar.
- โขSem placa de video (so CPU): funciona, mas e lento โ 30 a 60 segundos por resposta. Uma GPU (placa de video) ou a nuvem aceleram muito.
A beleza do desenho do curso e que trocar o cerebro de nuvem para local nao reescreve o Jarvis. Voce mexe num arquivo de configuracao chamado .env (onde ficam as "chaves e ajustes" do projeto) e aponta o provedor para o Ollama. O resto do sistema โ canais, memoria, voz โ nem percebe. Isso e o hot-swap: trocar o motor sem desmontar o carro.
Objetivo: converter um audio do Telegram para texto com o Whisper e, em paralelo, ligar o cerebro local (Ollama) trocando uma linha do .env. Nada sai da sua maquina.
// 1) instale o motor local e baixe um modelo que cabe na sua RAM
curl -fsSL https://ollama.com/install.sh | sh
ollama pull <modelo-que-cabe-na-sua-RAM> # ex.: llama3.2 (8GB) ou llama3.1:8b (16GB)
ollama serve # deixa o motor local ouvindo (porta 11434)
// 2) o audio chegou como .ogg/Opus -> converta para .wav 16kHz com o ffmpeg
ffmpeg -i <seu-audio>.ogg -ar 16000 -ac 1 voz.wav
# transcreva para texto (Whisper local, gratis, idioma pt) โ sem chave nenhuma:
whisper voz.wav --language pt --model small --output_format txt
// 3) aponte o cerebro do Jarvis para o Ollama no arquivo .env (hot-swap)
LLM_PROVIDER=ollama
LLM_MODEL=<o-mesmo-modelo-que-voce-baixou>
OLLAMA_HOST=http://localhost:11434
# (se um dia quiser voltar pra nuvem, troque so estas linhas โ o resto fica igual)
Como verificar:
- โข Apareceu um arquivo
voz.txtcom a transcricao certa do que voce falou? O ouvir (STT) funciona. - โข Rode
ollama run <seu-modelo> "diga oi"โ se ele responder no terminal, o cerebro local esta de pe. - โข Reinicie o Jarvis: na primeira resposta, NENHUM trafego deve sair para a internet (cheque sem rede, em modo aviao) โ sinal de que o cerebro virou local de verdade.
Conceitos-chave
A IA roda no seu aparelho, nao num servidor.
A ferramenta que roda modelos abertos localmente.
3B@8GB, 8B@16GB; CPU e lento, GPU acelera.
Trocar nuvem por local mexendo so na config.
๐ Tempo real (avancado): da mensagem de voz a ligacao
Tudo que vimos ate aqui e voz assincrona: voce manda um audio, espera, recebe outro audio. E como trocar mensagens de voz no WhatsApp. O sonho seguinte e a voz em tempo real โ uma ligacao telefonica de verdade com o Jarvis, onde voce fala e ele responde quase na hora, podendo ate ser interrompido. Isso e o topo da montanha, e vale calibrar a expectativa: ainda e dificil.
So texto
O ponto de partida: o Jarvis le e escreve. Robusto, barato, sempre presente.
Voz assincrona
Mensagens de voz (o pipeline Whisper + TTS deste modulo). Voce manda audio, recebe audio.
Ligacao em tempo real
Conversa fluida por telefone, via servicos como Twilio ou LiveKit, com meta de latencia abaixo de 1,5 segundo.
โ ๏ธ Por que tempo real e dificil: latencia
Latencia e o atraso entre voce terminar de falar e o Jarvis comecar a responder. Numa ligacao, mais de ~1,5 segundo de silencio ja parece quebrado, esquisito. So que esse tempo precisa caber TODO o pipeline: ouvir + pensar + falar. Por isso tempo real e roadmap, nao o seu primeiro projeto. Comece pela voz assincrona, que perdoa atrasos โ e ja entrega 90% do encanto.
๐งญ O caminho honesto
Suba a escada um degrau de cada vez: texto solido primeiro, depois voz assincrona, e so encare o tempo real quando o resto estiver redondo. No Modulo 5-3 voce vai montar seu Jarvis de bolso de ponta a ponta โ bot, cerebro, memoria, skill e voz โ usando exatamente as pecas deste modulo.
Auto-checagem (opcional): no pipeline de voz, quem REALMENTE pensa e decide a resposta?
๐ฏ Resumo do modulo
Proximo modulo:
5-3 โ Montando seu Jarvis de bolso (projeto guiado fim a fim)