La parte più difficile di un assistente vocale locale, racconta lo sviluppatore dietro Alkove, non è il Large Language Model: è ciò che accade prima che la voce arrivi allo speech-to-text e al modello. Nel suo lavoro su un agente vocale in tempo reale nel browser, i problemi maggiori venivano dalle persone che parlavano accanto all'utente: finivano nel trascritto, aprivano turni falsi e facevano scattare interruzioni. Il denoiser non bastava, perché le altre voci sono pur sempre parlato.
Da quell'esperienza nasce Alkove, un front-end vocale on-device distribuito in anteprima con codice e pesi Apache-2.0. Cinque modelli per circa 7,5 MB complessivi girano su un engine di inference scritto in Rust, compilato in WebAssembly per il browser e nativamente per Python e Android. Lex trasforma una parola digitata in pronunce probabili, così la wake word non richiede training né registrazioni. Spot ascolta quelle pronunce in sette lingue. Timbre costruisce una voiceprint da tre ripetizioni della wake word e continua ad apprendere durante il dialogo. Focus isola la voce più vicina o quella che corrisponde alla voiceprint, rimuovendo rumore, musica e altre voci prima dello STT. Cue rileva il parlato ogni 30 millisecondi.
Il progetto non usa onnxruntime: il runtime proprio, da 134 KB compresso in brotli, produce output identici su ARM, x86 e wasm. Su un solo thread di uno smartphone, Focus processa un secondo di audio in 38,6 millisecondi, Spot in 7,5 e Cue in 1,7. I pacchetti coprono npm per browser e Node, pip per Linux, macOS e Windows con numpy come unica dipendenza, Android in Kotlin e plugin per LiveKit Agents e Pipecat. Nei test su riunioni AMI registrate con microfoni headset, le parole di altre persone che arrivano al trascritto passano da circa 17 al minuto a 0,5 usando Focus e una voiceprint. Spot, su parole singole digitate, richiama il 67% dei termini in inglese con un falso allarme all'ora, il 90% in francese e l'85% in portoghese. Lo sviluppatore ammette che su microfoni da tavolo in mezzo a più persone il sistema rimuove anche gli altri partecipanti, e che due voci simultanee dello stesso registro restano difficili da separare. L'audio è processato a 16 kHz.
Alkove sposta un pezzo del controllo in un punto che di solito viene lasciato al cloud o a componenti generici. Non è un semplice VAD: la voiceprint personale viene usata in tre punti diversi, per ignorare le altre voci nella wake word, per mantenere solo l'utente nel flusso verso lo STT e per trasformare Cue in un VAD personale. Questo riduce il numero di parole estranee che arrivano al trascritto e, di conseguenza, il rumore semantico che il LLM deve interpretare. In un deployment self-hosted, il beneficio non è solo di latenza ma di prevedibilità: meno falsi barge-in significano meno chiamate al modello, meno token sprecati e un comportamento più stabile.
Per chi progetta assistenti locali o on-premise, la lezione è che la qualità percepita dipende da componenti piccoli e specializzati tanto quanto dal modello principale. Un engine di inference da 134 KB e modelli da pochi megabyte consentono di eseguire il preprocessing sullo stesso dispositivo dell'utente, senza inviare audio grezzo a server esterni. Questo ha implicazioni per la sovranità dei dati: la voiceprint e l'audio restano locali, e chi gestisce infrastrutture con vincoli di residenza o compliance può ridurre la superficie esposta. I numeri di latenza su un solo thread di telefono indicano un carico CPU modesto, il che pesa poco sul TCO complessivo di un deployment edge. Per chi valuta deployment on-premise, esistono trade-off tra modelli piccoli specializzati e pipeline cloud; AI-RADAR offre framework analitici su /llm-onpremise per valutarli. Siamo davanti a un'anteprima 0.x: le API possono ancora cambiare e lo sviluppatore chiede feedback soprattutto a chi esegue assistenti vocali locali, su dove il sistema si rompe e quali integrazioni servirebbero.
💬 Commenti (0)
🔒 Accedi o registrati per commentare gli articoli.
Nessun commento ancora. Sii il primo a commentare!