Trascrizioni e strategie di commit
Guida pratica · Presuppone che tu abbia completato la guida sullo streaming lato client o sullo streaming lato server.
Panoramica
Durante la trascrizione dell’audio, riceverai trascrizioni parziali e confermate.
- Trascrizioni parziali - i risultati provvisori della trascrizione
- Trascrizioni confermate - i risultati finali del segmento di trascrizione, inviati quando viene ricevuto un messaggio di “commit”. Una sessione può avere più trascrizioni confermate.
La trascrizione confermata può facoltativamente contenere timestamp a livello di parola. Viene ricevuta solo quando l’opzione “include timestamps” è impostata su true.
Strategie di commit
Quando invii chunk audio tramite WebSocket, i segmenti di trascrizione possono essere confermati in due modi: commit manuale o rilevamento dell’attività vocale (VAD).
Commit manuale
Con la strategia di commit manuale, controlli quando confermare i segmenti di trascrizione. Questa è la strategia utilizzata per impostazione predefinita. La conferma di un segmento cancella la trascrizione accumulata elaborata e avvia un nuovo segmento senza perdere il contesto. Per ridurre la latenza, è consigliabile effettuare un commit ogni 20-30 secondi. Anche se non effettui commit manualmente, il modello conferma automaticamente dopo circa 36 secondi di audio accumulato.
Per risultati ottimali, effettua il commit durante i periodi di silenzio o in un altro punto logico, ad esempio alla fine di un turno di conversazione.
Effettuare manualmente più commit in rapida successione può ridurre le prestazioni del modello.
Invio del contesto testuale precedente
Quando invii audio per la trascrizione, puoi inviare il contesto testuale precedente insieme al primo chunk audio per aiutare il modello a comprendere il contesto del parlato. È utile in alcuni scenari:
- Testo dell’agente per casi d’uso di IA conversazionale - Consente al modello di comprendere più facilmente il contesto della conversazione e produrre trascrizioni migliori.
- Riconnessione dopo un errore di rete - Consente al modello di continuare a trascrivere, usando il testo precedente come riferimento.
- Informazioni contestuali generali - Una breve descrizione dell’argomento della trascrizione aiuta il modello a comprendere il contesto.
L’invio del contesto previous_text è possibile solo quando invii il primo chunk audio tramite
connection.send(). Inviarlo nei chunk successivi genera un errore. Il testo precedente funziona
meglio se è lungo meno di 50 caratteri.
Rilevamento dell’attività vocale (VAD)
Con la strategia VAD, il motore di trascrizione rileva automaticamente i segmenti di parlato e di silenzio. Quando viene raggiunta una soglia di silenzio, il motore di trascrizione conferma automaticamente il segmento di trascrizione.
Quando trascrivi l’audio dal microfono nell’integrazione lato client, è consigliabile usare la strategia VAD.
Mantenere attiva la connessione durante il silenzio
Gli SDK ufficiali non interrompono la connessione quando non arrivano messaggi, quindi la maggior parte delle integrazioni non ne ha bisogno. Se il tuo client WebSocket, oppure un proxy o un load balancer intermedio, chiude la connessione quando non riceve frame per un certo periodo, passa il parametro query facoltativo keepalive_interval_ms durante la connessione. È importante durante lunghi periodi di silenzio, ad esempio in una chiamata telefonica con pause di 10-15 secondi. All’incirca una volta per intervallo, il server invia un partial_transcript keepalive: vuoto (text: "") se il segmento corrente non ha testo non confermato, oppure una ripetizione dell’ultimo testo parziale se ne ha.
I keepalive non sono ping continui: devi continuare a trasmettere audio in streaming (i frame di silenzio vanno bene). Se smetti di inviare audio, non vengono inviati keepalive e il server chiude la connessione dopo 15 secondi senza messaggi dal client. Questo limite del server non è configurabile.
- Accetta un numero intero compreso tra
500e10000(millisecondi). È disabilitato per impostazione predefinita; ometti il parametro per mantenere il comportamento esistente. - I valori fuori intervallo o non interi fanno sì che il server invii un errore
invalid_requeste chiuda la connessione. - I keepalive dipendono dal fatto che il modello elabori effettivamente l’audio silenzioso inviato, non da un timer continuo, quindi confermano anche che il percorso di trascrizione è attivo.
- L’audio viene elaborato in chunk di circa 1 secondo, quindi i keepalive arrivano all’incirca una volta per intervallo, arrotondato a questa cadenza (ad esempio,
1000si attiva circa una volta al secondo,3000circa una volta ogni 3 secondi). Il primo keepalive di una sessione arriva circa 2 secondi dopo l’avvio, poiché il server memorizza nel buffer i primi ~2 secondi di audio prima di trascrivere. Imposta l’intervallo a non più di circa un terzo del tuo timeout di lettura, per lasciare margine. - Il valore
textdi un keepalive è vuoto solo quando il segmento corrente non ha ancora testo non confermato. Se si verifica una pausa dopo il parlato ma prima di un commit — più evidente confilter_background_audio=trueo in modalità di commit manuale senza effettuare il commit — il keepalive ripete invece l’ultimo testo parziale, quindi non cancella mai il testo provvisorio. Dopo un commit, i keepalive tornano a essere vuoti finché non arriva nuovo parlato. - Funziona sia con
commit_strategy=manualsia concommit_strategy=vad, e confilter_background_audio=true. Non ha alcun impatto sulla fatturazione oltre all’audio che stai già trasmettendo in streaming. - Il valore
configdel messaggiosession_startedrestituiscekeepalive_interval_ms(nullquando è disabilitato).
Un partial_transcript vuoto (text: "") significa “nessun parlato nel segmento corrente”. Un
partial_transcript ripetuto e identico durante una pausa è anch’esso un keepalive: i client devono semplicemente visualizzare
le trascrizioni parziali come già fanno, anziché gestire separatamente la ripetizione.
Aggiungi il parametro all’URL WebSocket:
Formati audio supportati
Best practice
Qualità audio
- Per risultati ottimali, usa una frequenza di campionamento di 16 kHz per un equilibrio ideale tra qualità e larghezza di banda.
- Assicurati che l’input audio sia pulito e con rumore di fondo minimo.
- Usa un guadagno del microfono appropriato per evitare il clipping.
- Al momento è supportato solo l’audio mono.
Dimensione dei chunk
- Per uno streaming fluido, invia chunk audio della durata di 0,1-1 secondo.
- I chunk più piccoli riducono la latenza, ma aumentano l’overhead.
- I chunk più grandi sono più efficienti, ma possono introdurre latenza.