Blog
AI/Voice
5 marzo 202610 min

STT nativo vs Deepgram: quale motore vocale scegliere?

Quando ho lanciato TAMSIV, tutto il riconoscimento vocale passava per Deepgram. Un servizio cloud eccellente, preciso, veloce. Il francese? Impeccabile. Gli accenti regionali? Gestiti. La punteggiatura automatica? Perfetta. C'era solo un dettaglio: ogni secondo di audio trascritto aveva un prezzo. E quando la tua app si basa interamente sulla voce, questo prezzo sale rapidamente.

Ho dovuto quindi fare una scelta strategica: o mantengo Deepgram per tutti e trasferisco il costo sugli abbonamenti, oppure trovo un'alternativa gratuita per il piano Free e riservo Deepgram agli utenti paganti. Ho scelto la seconda opzione. Ecco come ho costruito un'architettura duale STT nativo + Deepgram, e cosa ho imparato confrontando i due in condizioni reali.

Punti chiave da ricordare:
- Lo STT nativo (Google/Apple) è gratuito, locale e sufficiente per dettati brevi
- Deepgram rimane superiore in precisione, soprattutto nel rumore e con gli accenti
- Un'architettura duale permette di offrire un piano gratuito sostenibile senza sacrificare la qualità premium
- L'astrazione frontend fa sì che i componenti ignorino quale motore sia in esecuzione
- La scelta STT nativo vs cloud è configurabile dall'amministratore senza aggiornare l'app

Perché il riconoscimento vocale è così centrale in un'app di produttività?

TAMSIV non è un'app di produttività classica dove digiti liste. È un'app dove parli. Detti un'attività, un memo, un evento. L'assistente vocale capisce quello che dici, crea l'elemento e ti risponde. Tutto passa per la voce.

Ciò significa che la qualità della trascrizione influisce direttamente sull'esperienza. Se lo STT capisce male "comprare il pane" e trascrive "comprare il bagno", l'utente perde fiducia. Se la punteggiatura è assente, il memo diventa un blocco di testo illeggibile. Lo STT non è un gadget — è il fondamento di tutta l'esperienza utente.

Ecco perché ho dedicato tempo a costruire con cura la pipeline vocale completa. Lo STT è il primo passo della catena: Audio → STT → Testo → LLM → Function Calling → TTS → Audio. Se il primo passo fallisce, tutto il resto crolla.

Persona che parla in uno smartphone con onde sonore visibili, confronto tra cloud e elaborazione locale
La scelta tra STT cloud e nativo influisce sulla precisione, il costo e la riservatezza.

Come funziona lo STT nativo su Android e iOS?

Ogni smartphone moderno include un motore di riconoscimento vocale. Su Android, è lo SpeechRecognizer di Google. Su iOS, è il Speech framework di Apple. Questi motori sono integrati nel sistema operativo e funzionano localmente — nessun dato lascia il telefono.

I vantaggi sono chiari:

  • Gratuito: Nessun costo al secondo, nessun limite di richieste, nessuna fattura a sorpresa.
  • Locale: I dati vocali rimangono sul dispositivo. Perfetto per la privacy.
  • Veloce: Nessuna latenza di rete. La trascrizione inizia quasi istantaneamente.
  • Offline: Funziona anche senza connessione internet (con i modelli scaricati).

Ma ci sono dei limiti. Lo STT nativo non è progettato per casi d'uso professionali. La punteggiatura è spesso assente o approssimativa. La precisione diminuisce significativamente in un ambiente rumoroso. E per il francese con accenti (quebecois, africano, belga), i risultati variano molto.

Cosa offre in più Deepgram?

Deepgram è un servizio STT cloud specializzato. Il suo modello Nova-2 è addestrato su miliardi di ore di audio e offre una precisione notevole. Ecco cosa lo distingue dallo STT nativo:

  • Punteggiatura automatica: Le frasi sono correttamente punteggiate, il che rende i memo immediatamente leggibili.
  • VAD (Voice Activity Detection): Deepgram rileva quando parli e quando fai una pausa. Nessuna trascrizione del rumore ambientale.
  • Streaming WebSocket: L'audio viene trascritto in tempo reale tramite WebSocket, parola per parola. L'utente vede il suo dettato apparire man mano.
  • Multi-lingue nativo: Il francese, anche con accenti, è ben supportato.
  • Endpointing intelligente: Deepgram sa quando hai finito di parlare, il che attiva l'elaborazione LLM al momento giusto.

Il costo? Circa $0.0043 al minuto di audio in streaming. Sembra poco, ma per un'app vocale dove ogni interazione dura dai 10 ai 30 secondi, si somma rapidamente con centinaia di utenti attivi.

Microfono professionale con visualizzazione di onde audio che fluttuano nell'aria, illuminazione neon blu e viola
Deepgram offre una qualità di trascrizione professionale, ma a un costo per secondo di audio.

Come ho progettato l'architettura duale in TAMSIV?

L'obiettivo era chiaro: offrire due motori STT intercambiabili, senza che il codice dell'interfaccia avesse bisogno di sapere quale fosse in esecuzione. Il pattern è quello dell'astrazione — un'interfaccia comune, due implementazioni.

Lato frontend (React Native), espongo un'interfaccia unificata:

// Interfaccia comune
interface STTEngine {
  start(): void;
  stop(): void;
  onResult(callback: (text: string) => void): void;
  onError(callback: (error: Error) => void): void;
}

// Due implementazioni
class NativeSTTEngine implements STTEngine { ... }
class DeepgramSTTEngine implements STTEngine { ... }

La scelta del motore è determinata da due fattori:

  1. Il piano dell'utente: Free → nativo, Pro/Team → Deepgram (configurabile).
  2. La configurazione admin: Tramite la tabella app_config in Supabase, posso forzare un motore per tutti gli utenti. Utile per i test A/B o in caso di problemi con un provider.

I componenti UI (il Dittafono, la schermata di conversazione) non sanno quale motore sia in esecuzione. Chiamano start(), stop() e ricevono testo. Questo è il principio di responsabilità unica applicato alla pipeline vocale.

Quali sono i risultati del confronto in condizioni reali?

Ho testato i due motori su tre scenari concreti, con lo stesso contenuto dettato in francese:

Scenario STT nativo Deepgram
Ambiente calmo ~92% ~98%
Rumore di fondo (caffè, strada) ~75% ~94%
Francese con accenti ~80% ~95%
Dettato rapido (>150 parole/min) ~70% ~93%

Il verdetto è inappellabile: Deepgram è oggettivamente superiore in tutti gli scenari. Il divario si allarga particolarmente negli ambienti rumorosi e con gli accenti. La punteggiatura automatica di Deepgram è un enorme vantaggio per i memo vocali — un memo senza punteggiatura è un blocco di testo difficile da rileggere.

Ma — e questa è la sfumatura importante — per dettare un compito breve ("Comprare il latte domani mattina"), lo STT nativo è sufficiente. In un ambiente calmo, il 92% di precisione su una frase di 5 parole, funziona. L'utente può sempre modificare il testo dopo la creazione vocale.

Persona che usa il dettato vocale sul suo telefono in un caffè rumoroso
In un ambiente rumoroso, il divario tra STT nativo e cloud diventa significativo.

Come questa architettura serve il modello economico?

L'architettura duale non è solo una prodezza tecnica — è una scelta di business. Permette tre cose:

  1. Un piano Free sostenibile: L'utente gratuito può usare la voce senza che mi costi nulla in STT. Il costo è zero perché l'elaborazione è locale.
  2. Un argomento per il premium: "Vuoi una maggiore precisione, soprattutto nel rumore? Passa a Pro." L'utente che ha provato il nativo e vuole di più ha un motivo concreto per pagare. È lo stesso principio che applico agli abbonamenti RevenueCat.
  3. Un fallback di sicurezza: Se Deepgram ha un'interruzione (succede), posso passare tutti gli utenti al nativo cambiando un valore in app_config. Nessun aggiornamento dell'app necessario. È lo stesso pattern di fallback che uso per il LLM tramite OpenRouter.

Quali sono le difficoltà tecniche dell'integrazione STT nativo in React Native?

Integrare lo STT nativo in React Native non è banale. Ecco i problemi che ho incontrato:

  • API diverse Android/iOS: Lo SpeechRecognizer Android e lo Speech framework iOS hanno API completamente diverse. La libreria React Native che uso astrae una parte di queste differenze, ma non tutte.
  • Gestione del lifecycle: Su Android, lo SpeechRecognizer deve essere correttamente pulito quando l'app passa in background. Altrimenti, continua ad ascoltare e consuma batteria. Ho dovuto aggiungere dei listener su AppState per gestire questo.
  • Timeout di sicurezza: Lo STT nativo può rimanere bloccato in stato "listening" indefinitamente. Ho aggiunto un timeout di 30 secondi (lo stesso pattern che nell'AudioPlayerService) con pulizia automatica.
  • Nessuno streaming affidabile: A differenza di Deepgram che invia le parole man mano, lo STT nativo restituisce risultati parziali che possono essere contraddittori. Ho dovuto implementare un debounce per evitare il "flickering" del testo visualizzato.

Come configurare la scelta STT a distanza senza deploy?

Uno dei vantaggi di questa architettura è la configurabilità a distanza. In Supabase, ho una tabella app_config che memorizza i parametri globali dell'applicazione. La scelta del motore STT è uno di questi.

Quando l'app si avvia, legge la configurazione da Supabase (o dalla cache, grazie al ContentCacheService). Se la configurazione dice "nativo per tutti", anche gli utenti Pro usano il nativo. Questo è utile in diversi casi:

  • Guasto Deepgram: Passare istantaneamente senza aggiornamento.
  • Test A/B: Confrontare le metriche di retention tra i due motori su un panel di utenti.
  • Riduzione temporanea dei costi: Se il budget cloud è stretto in un dato mese, posso disattivare Deepgram temporaneamente.

Il dashboard admin mostra le metriche di utilizzo per motore STT, il che permette di prendere decisioni informate.

Qual è il futuro dello STT nelle app mobili?

Il panorama dello STT si evolve rapidamente. Whisper di OpenAI ha democratizzato i modelli STT open-source di alta qualità. Progetti come whisper.cpp permettono di eseguire Whisper direttamente su mobile, con una qualità vicina a Deepgram e zero costi cloud.

Monitoro attentamente questa evoluzione. Il giorno in cui un modello Whisper funzionerà abbastanza bene su uno smartphone standard con il supporto del francese in tempo reale, lo STT cloud diventerà opzionale per tutti. Nel frattempo, l'architettura duale che ho implementato è perfettamente posizionata per integrare un terzo motore senza toccare i componenti UI.

FAQ

Lo STT nativo funziona offline?

Sì, a condizione che il modello linguistico sia scaricato sul dispositivo. Su Android, Google offre il download dei modelli vocali nelle impostazioni. Su iOS, i modelli sono generalmente già presenti. La qualità offline è leggermente inferiore alla versione online.

Deepgram è il miglior servizio STT cloud?

Deepgram Nova-2 è tra i migliori per il rapporto qualità/prezzo. Google Cloud Speech-to-Text e AWS Transcribe sono alternative serie. Ho scelto Deepgram per la sua API WebSocket nativa e la sua fatturazione al secondo (non al minuto).

L'utente può scegliere il suo motore STT?

Attualmente, la scelta è legata al piano (Free = nativo, Pro = Deepgram). A termine, prevedo di aggiungere un interruttore nelle impostazioni in modo che l'utente Pro possa scegliere il nativo se preferisce la privacy locale.

Come gestire le lingue diverse dal francese?

TAMSIV supporta 6 lingue. Sia lo STT nativo che Deepgram supportano queste lingue. Il rilevamento della lingua si basa sulle impostazioni dell'app (non sul rilevamento automatico), il che evita confusioni tra lingue simili.

Lo STT nativo consuma molta batteria?

Meno dello STT cloud, perché non c'è trasferimento di rete. Ma l'elaborazione locale utilizza il processore del telefono. Su un dettato breve (30 secondi), l'impatto è trascurabile. Su un dettato lungo (5+ minuti), lo STT nativo può consumare più batteria del cloud perché il processore funziona continuamente.