Vai alla navigazione

Modifica delle trascrizioni

Questa guida mostra come applicare istruzioni di modifica in linguaggio naturale alle trascrizioni confermate con l'API Trascrizione vocale in tempo reale.

Guida pratica · Presuppone che tu abbia completato la guida sullo streaming lato client o lato server.

Panoramica

La modifica delle trascrizioni è una funzionalità sperimentale e aggiunge un supplemento del 30% al costo base della trascrizione, fatturato per almeno 10 secondi di audio per ogni trascrizione confermata. Consulta la pagina dei prezzi API per informazioni dettagliate sui prezzi.

La trascrizione in tempo reale può applicare un’istruzione di modifica in linguaggio naturale a ogni trascrizione confermata, ad esempio per scrivere le date pronunciate in un formato fisso o espandere abbreviazioni e acronimi. L’istruzione viene passata una volta all’apertura della connessione e ogni trascrizione confermata è seguita da un evento edited_transcript separato contenente il testo modificato.

Le trascrizioni parziali non vengono mai modificate. Anche l’evento committed_transcript non viene modificato, quindi le integrazioni esistenti continuano a funzionare quando attivi la funzionalità.

La modifica delle trascrizioni non può essere combinata con entity_detection. Le connessioni che impostano entrambe le opzioni vengono rifiutate con un errore invalid_request.

Abilitare la modifica delle trascrizioni

Passa l’istruzione con l’opzione transcriptEdit durante la connessione (il parametro query transcript_edit dell’API WebSocket). L’istruzione può contenere fino a 2000 caratteri. Consulta la guida alla modifica delle trascrizioni batch per indicazioni su come scrivere le istruzioni.

In tutti gli SDK, le trascrizioni modificate arrivano tramite l’evento RealtimeEvents.EDITED_TRANSCRIPT.

Lato client

Usa @elevenlabs/client nel browser con un token monouso emesso dal tuo server, come descritto nella guida allo streaming lato client.

import { Scribe, RealtimeEvents } from "@elevenlabs/client";
// Fetch a single-use token from your server first
const response = await fetch("/scribe-token", yourAuthHeaders);
const { token } = await response.json();
const connection = Scribe.connect({
token,
modelId: "scribe_v2_realtime",
transcriptEdit: "Write all dates in ISO 8601 format (YYYY-MM-DD)",
microphone: {
echoCancellation: true,
noiseSuppression: true,
},
});
connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data) => {
console.log("Committed:", data.text);
});
connection.on(RealtimeEvents.EDITED_TRANSCRIPT, (data) => {
console.log("Edited:", data.edited_text);
});

Lato server

Usa l’SDK ufficiale sul tuo server, come descritto nella guida allo streaming lato server. Rispetto a quella guida, cambiano solo l’opzione e il gestore dell’evento; l’invio dell’audio e la chiusura della connessione funzionano allo stesso modo.

import asyncio
import os
from dotenv import load_dotenv
from elevenlabs import AudioFormat, ElevenLabs, RealtimeAudioOptions, RealtimeEvents
load_dotenv()
async def main():
elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))
connection = await elevenlabs.speech_to_text.realtime.connect(RealtimeAudioOptions(
model_id="scribe_v2_realtime",
audio_format=AudioFormat.PCM_16000,
sample_rate=16000,
transcript_edit="Write all dates in ISO 8601 format (YYYY-MM-DD)",
))
def on_committed_transcript(data):
print(f"Committed: {data.get('text', '')}")
def on_edited_transcript(data):
print(f"Edited: {data.get('edited_text', '')}")
connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, on_committed_transcript)
connection.on(RealtimeEvents.EDITED_TRANSCRIPT, on_edited_transcript)
# Send audio chunks as shown in the server-side streaming guide, then close.
await connection.close()
if __name__ == "__main__":
asyncio.run(main())

Ricevere le trascrizioni modificate

Quando è abilitata, ogni trascrizione confermata è seguita da un evento edited_transcript che contiene il testo confermato e la relativa versione modificata:

{
"message_type": "edited_transcript",
"text": "our next meeting is on the twelfth of July twenty twenty-six",
"edited_text": "our next meeting is on 2026-07-12"
}

Comportamenti da tenere presenti:

  • Le modifiche vengono applicate per ogni segmento confermato. L’evento edited_transcript viene emesso poco dopo il corrispondente evento committed_transcript, poiché la modifica viene eseguita in modo asincrono. Può arrivare dopo la trascrizione parziale successiva e le modifiche per segmenti consecutivi possono arrivare in ordine diverso. Usa il campo text per associare una modifica alla relativa trascrizione confermata.
  • Se non è stata apportata alcuna modifica a un segmento, edited_text è identico a text.
  • Se non è possibile produrre una modifica per un segmento, non viene inviato alcun evento edited_transcript. L’evento committed_transcript non viene modificato.
  • I timestamp a livello di parola in committed_transcript_with_timestamps descrivono il testo confermato originale, non quello modificato.

Passaggi successivi