Personalização vocal com IA: o seu assistente finalmente conhece-o
Um assistente de voz que não te conhece é uma ferramenta. Um assistente que sabe que você tem três filhos, que gerencia uma equipe de campo e que "a coisa" significa o pedido de material de terça-feira — isso é um parceiro. A dois dias do lançamento público do TAMSIV, adicionei a personalização vocal: configure sua IA pela voz, escolha sua voz TTS entre 6 opções, e o assistente se adapta ao seu contexto. 1800 linhas de código, um bug WebSocket memorável e uma reflexão profunda sobre o que faz a diferença entre um assistente genérico e um assistente pessoal.
Pontos-chave a reter:
- A personalização por contexto vocal transforma um assistente genérico em uma ferramenta pessoal — o usuário fala naturalmente, a IA compreende as referências implícitas.
- A escolha da voz TTS é íntima: oferecer 6 opções com pré-visualização em tempo real aumenta o apego ao aplicativo.
- Quando duas telas compartilham o mesmo WebSocket, um sistema de "proprietário ativo" evita conflitos de callbacks.
- A personalização da IA é uma alavanca de monetização natural para um modelo freemium (contexto básico gratuito, completo no Pro).
Por que a personalização muda fundamentalmente a experiência de um assistente de voz?
Desde outubro, a IA do TAMSIV compreendia o que você dizia. Ela criava tarefas, memorandos, eventos de agenda. Ela respondia educadamente. Mas ela não te conhecia.
Você podia dizer a ela "lembre-me de comprar leite" e ela o fazia. Mas se você dissesse "lembre-me da coisa para as crianças", ela não sabia que você tinha filhos, nem quantos, nem o que "a coisa" significava no seu dia a dia. Essa é a diferença fundamental entre uma ferramenta de comando de voz e um assistente pessoal.
As pesquisas do Nielsen Norman Group sobre personalização mostram que interfaces personalizadas aumentam o engajamento em 40% em média. Para um assistente de voz, o impacto é ainda maior: a personalização elimina a necessidade de explicitar tudo em cada interação.
Foi essa reflexão que me levou a adicionar essa funcionalidade a dois dias do lançamento. Risco? Sim. Mas sem isso, o TAMSIV teria sido "apenas mais um assistente de voz". Com isso, ele se torna seu assistente de voz.
Como funciona a configuração da IA por voz?
Um novo botão apareceu na tela do gravador de voz: "Configurar minha IA". Você aperta, fala e explica quem você é.
"Sou pai de 3 filhos, gerencio uma equipe de 4 pessoas em uma empresa de limpeza e esqueço tudo o que me dizem depois de 30 segundos."
A IA escuta através do pipeline de voz, transcreve e depois resume seu contexto em alguns pontos estruturados. Esse resumo é armazenado em seu perfil Supabase e injetado no system prompt a cada conversa.
O processo técnico em detalhes
- Captura de voz: o mesmo STT nativo do gravador de voz principal (com fallback Deepgram se necessário).
- Extração de contexto: um LLM via OpenRouter analisa a transcrição e extrai informações estruturadas (situação familiar, profissão, hábitos, preferências).
- Armazenamento: o contexto é salvo no perfil do usuário via Supabase, não localmente — ele acompanha o usuário em todos os seus dispositivos.
- Injeção: a cada nova conversa WebSocket, o contexto é adicionado ao system prompt do LLM. A IA "sabe" quem você é desde a primeira palavra.
A partir daí, cada resposta é adaptada. Se você fala de "o pequeno", ela sabe que você está falando do seu filho. Se você diz "o canteiro de obras de terça-feira", ela sabe que você gerencia intervenções de campo. Essa é a diferença entre um assistente genérico e um assistente que te conhece.
Por que oferecer 6 vozes TTS e como escolher a certa?
A voz é íntima. Ouvir a mesma voz robótica 50 vezes por dia acaba irritando. Pior: uma voz que você não gosta cria uma fricção inconsciente a cada uso. Você evita usar o aplicativo, sem saber exatamente por quê.
Adicionei um seletor de voz TTS com 6 opções diferentes — masculinas, femininas, tons variados. As 6 vozes vêm do OpenAI TTS (modelo Nova por padrão), que oferece a melhor qualidade natural do mercado para síntese de voz.
A experiência de seleção
Você toca em uma voz, ouve uma pré-visualização em tempo real ("Olá, sou seu assistente TAMSIV..."), e escolhe. É armazenado em seu perfil e usado para todas as respostas de voz. A mudança é instantânea — não é necessário reiniciar o aplicativo ou reconectar o WebSocket.
Este detalhe de UX parece menor, mas tem um impacto mensurável. De acordo com pesquisas da Voicebot.ai, usuários que escolhem sua voz de assistente o utilizam 60% mais frequentemente do que aqueles que mantêm a voz padrão. A escolha cria um sentimento de apropriação.
Como resolver um conflito WebSocket entre duas telas que compartilham o mesmo canal?
O bug que custou 3 horas. A tela de configuração da IA e o ditafone compartilham o mesmo canal WebSocket para o backend. Quando você testa sua voz na configuração, o ditafone em segundo plano também tentava processar os callbacks de áudio. Resultado: as duas telas se atropelavam.
Concretamente, o que acontecia era o seguinte:
- O usuário abre a tela de configuração da IA.
- Ele testa uma voz TTS — o backend envia o áudio via WebSocket.
- O ditafone em segundo plano também recebe o callback de áudio.
- As duas telas tentam reproduzir o mesmo som simultaneamente.
- Em alguns modelos Android onde o garbage collector é agressivo, o AudioPlayerService trava silenciosamente.
A solução: sistema de "proprietário ativo"
Quando a tela de configuração é aberta, ela assume o controle exclusivo do WebSocket. O ditafone espera sua vez. O padrão é simples:
- Um flag
activeOwner: 'dictaphone' | 'setup' | nullno estado global. - Cada callback WebSocket verifica o proprietário antes de processar a mensagem.
- A transição de propriedade é atômica — sem janela onde as duas telas escutam.
Simples na teoria, 3 horas de depuração na prática. O conflito só se manifestava em alguns dispositivos, o que dificultava a reprodução. É o tipo de bug que você só encontra testando em dispositivos reais — não em um emulador.
Como integrar a personalização em um modelo freemium?
A personalização da IA agora faz parte das funcionalidades diferenciadoras nos planos de assinatura RevenueCat:
- Plano gratuito: contexto básico (nome, idioma). A IA sabe seu nome, é tudo.
- Plano Pro: contexto completo (situação pessoal, profissão, hábitos) + escolha de voz TTS. A IA realmente te conhece.
- Plano Team: tudo do Pro + contexto de grupo (equipe, projetos, terminologia de negócios). A IA conhece sua equipe.
É uma alavanca de monetização natural. A personalização é a funcionalidade que cria o maior apego — uma vez que sua IA te conhece, você não quer mais voltar para um assistente genérico. É exatamente o tipo de feature gate que a estratégia freemium para aplicativos de produtividade recomenda.
Qual é o impacto na arquitetura de backend?
A adição da personalização exigiu 1800 linhas de código distribuídas entre o frontend e o backend. No lado do backend Node.js, as principais modificações:
- System prompt dinâmico: o contexto do usuário é carregado do Supabase a cada conexão WebSocket e injetado no prompt. Cache em memória para evitar uma chamada de DB a cada mensagem.
- Endpoint de pré-visualização TTS: um novo endpoint WebSocket dedicado às pré-visualizações de voz, isolado do fluxo de conversação principal.
- Validação de contexto: o LLM que extrai o contexto filtra informações sensíveis (números, endereços) — apenas informações estruturais são mantidas.
O sistema de histórico de conversas também foi atualizado para incluir o contexto nos metadados — o que permite ver quando e como o contexto foi modificado.
Mais de 730 commits, a dois dias do lançamento: era o momento certo para esta funcionalidade?
Foi a última funcionalidade antes do lançamento público. O aplicativo agora sabe com quem está falando. Resta o polimento final, os últimos testes nos dispositivos dos beta-testers e o grande salto.
Adicionar uma funcionalidade importante a dois dias do lançamento é arriscado. Mas a personalização é o tipo de funcionalidade que transforma a experiência completa do aplicativo. Sem ela, o TAMSIV teria sido uma boa ferramenta de voz. Com ela, é um assistente que te conhece. E é isso que fará a diferença em relação a alternativas como o Todoist.
Perguntas frequentes
Os dados de personalização são seguros?
Sim. O contexto é armazenado no Supabase com as mesmas políticas RLS (Row Level Security) que todos os dados do usuário. Somente o usuário autenticado pode ler ou modificar seu contexto. O LLM que extrai o contexto filtra automaticamente as informações sensíveis (números de telefone, endereços) — apenas as informações estruturais são mantidas.
É possível modificar ou excluir o contexto após configurá-lo?
Sim, a qualquer momento. O botão "Configurar minha IA" permite regravar um novo contexto que substitui o antigo. Um botão "Redefinir" exclui completamente o contexto e retorna ao modo de assistente genérico.
Por que OpenAI TTS em vez de Google ou Azure para síntese de voz?
Depois de testar os três, o OpenAI TTS (modelo Nova) oferece a voz mais natural em francês. O Google TTS é bom, mas ligeiramente mais robótico. O Azure é excelente em inglês, mas menos convincente em francês. O custo é comparável (~0.015 EUR/1000 caracteres para OpenAI).
O conflito WebSocket pode se repetir com outras telas?
O sistema de proprietário ativo é genérico — ele protege contra qualquer conflito entre telas que compartilham o mesmo canal. Se uma futura tela precisar do WebSocket, basta adicionar um valor ao tipo activeOwner e respeitar o protocolo de aquisição/liberação.
A personalização funciona em todos os idiomas suportados?
Sim. A extração de contexto usa um LLM multilíngue via OpenRouter. Você pode configurar sua IA em francês, inglês, alemão, espanhol, italiano ou português — o contexto é armazenado no idioma em que você o ditou e usado como está no system prompt.