Zur Navigation springen

Transkriptbearbeitung

Dieser Leitfaden zeigt Ihnen, wie Sie mit der Realtime Speech to Text API natürlichsprachliche Bearbeitungsanweisungen auf festgeschriebene Transkripte anwenden.

Anleitung · Setzt voraus, dass Sie den Leitfaden für clientseitiges oder serverseitiges Streaming abgeschlossen haben.

Überblick

Die Transkriptbearbeitung ist eine experimentelle Funktion und erhöht die Grundkosten für die Transkription um 30 %. Pro festgeschriebenem Transkript werden mindestens 10 Sekunden Audio abgerechnet. Detaillierte Preisinformationen finden Sie auf der API-Preisseite.

Die Echtzeittranskription kann auf jedes festgeschriebene Transkript eine natürlichsprachliche Bearbeitungsanweisung anwenden, beispielsweise um gesprochene Daten in einem festen Format zu schreiben oder Abkürzungen und Akronyme auszuschreiben. Die Anweisung wird beim Öffnen der Verbindung einmal übergeben. Auf jedes festgeschriebene Transkript folgt ein separates edited_transcript-Event mit dem bearbeiteten Text.

Teiltranskripte werden nie bearbeitet. Auch das committed_transcript-Event bleibt unverändert, sodass bestehende Integrationen weiter funktionieren, wenn Sie die Funktion aktivieren.

Die Transkriptbearbeitung kann nicht mit entity_detection oder entity_redaction kombiniert werden. Verbindungen, die beides festlegen, werden mit einem invalid_request-Fehler abgelehnt.

Transkriptbearbeitung aktivieren

Übergeben Sie die Anweisung beim Verbinden mit der Option transcriptEdit (dem Abfrageparameter transcript_edit der WebSocket-API). Die Anweisung darf bis zu 2000 Zeichen lang sein. Hinweise zum Formulieren von Anweisungen finden Sie im Leitfaden zur Batch-Transkriptbearbeitung.

In allen SDKs treffen die bearbeiteten Transkripte über das Event RealtimeEvents.EDITED_TRANSCRIPT ein.

Clientseitig

Verwenden Sie @elevenlabs/client im Browser mit einem von Ihrem Server ausgestellten Einmal-Token, wie im Leitfaden für clientseitiges Streaming beschrieben.

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);
});

Serverseitig

Verwenden Sie das offizielle SDK auf Ihrem Server, wie im Leitfaden für serverseitiges Streaming beschrieben. Nur die Option und der Event-Handler unterscheiden sich von diesem Leitfaden; das Senden von Audio und das Schließen der Verbindung funktionieren gleich.

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())

Bearbeitete Transkripte empfangen

Wenn die Funktion aktiviert ist, folgt auf jedes festgeschriebene Transkript ein edited_transcript-Event mit dem festgeschriebenen Text und seiner bearbeiteten Version:

{
"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"
}

Zu beachtendes Verhalten:

  • Bearbeitungen werden pro festgeschriebenem Segment angewendet. Das edited_transcript-Event wird kurz nach dem entsprechenden committed_transcript-Event ausgegeben, da die Bearbeitung asynchron erfolgt. Es kann nach dem nächsten Teiltranskript eintreffen, und Bearbeitungen aufeinanderfolgender Segmente können in anderer Reihenfolge eintreffen. Verwenden Sie das Feld text, um eine Bearbeitung dem zugehörigen festgeschriebenen Transkript zuzuordnen.
  • Wurden an einem Segment keine Bearbeitungen vorgenommen, ist edited_text identisch mit text.
  • Kann für ein Segment keine Bearbeitung erstellt werden, wird dafür kein edited_transcript-Event gesendet. Das committed_transcript-Event bleibt davon unberührt.
  • Zeitstempel auf Wortebene in committed_transcript_with_timestamps beschreiben den ursprünglichen festgeschriebenen Text, nicht den bearbeiteten Text.

Nächste Schritte