Blog
AI/Voice
10 dicembre 20258 min

Costruire una pipeline vocale in tempo reale: dall'audio grezzo alla risposta IA

Il cuore di TAMSIV è la voce. Non un gadget — la voce È l'interfaccia principale. Costruire una pipeline vocale in tempo reale da soli significa entrare in un mondo dove ogni millisecondo conta.

L'architettura della pipeline

Audio PCM 16kHz mono → WebSocket (JWT) → Deepgram Live STT (VAD) → OpenRouter LLM → Function calling → OpenAI TTS → Audio response

L'audio deve essere in PCM 16 bit, 16kHz, mono. Il telefono invia chunk binari grezzi tramite WebSocket.

Il WebSocket autenticato

Token JWT Supabase nella stringa di query: ws://backend:3001?token=eyJhbG.... Validazione alla connessione. Se il token scade durante la conversazione, riconnessione automatica con un token fresco.

Deepgram Live STT e il VAD

Il VAD (Voice Activity Detection) di Deepgram rileva quando l'utente ha finito di parlare. Senza VAD, è necessario un timeout di silenzio lato client — troppo corto si taglia, troppo lungo si rallenta. Deepgram gestisce questo con precisione.

La difficoltà: gestire i risultati intermedi (is_final: false) vs finali (is_final: true). È necessario accumulare i risultati finali per costruire la trascrizione completa.

L'orchestrazione LLM

La trascrizione viene inviata a OpenRouter con function calling. Il modello è configurabile con fallback automatico. La latenza totale: finalizzazione STT (~200ms) + LLM (~800ms-2s) + TTS (~500ms). Tra 1.5 e 3 secondi.

OpenAI TTS

Voce nova. L'audio viene trasmesso in streaming tramite lo stesso WebSocket. Il frontend inizia a riprodurre i primi chunk senza attendere la risposta completa.

Le lezioni del tempo reale

Tutto può fallire in qualsiasi momento. Retry intelligenti, circuit breakers, fallback ad ogni passo. La pipeline è robusta oggi, ma ogni riga di gestione degli errori rappresenta un bug vissuto.