Zur Navigation springen

Transkriptbearbeitung

In diesem Leitfaden erfahren Sie, wie Sie mit der Echtzeit-Speech-to-Text-API Anweisungen zur Bearbeitung in natürlicher Sprache auf abgeschlossene 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 grundlegenden Transkriptionskosten um 30 %. Abgerechnet werden mindestens 10 Sekunden Audio pro abgeschlossenem Transkript. Detaillierte Preisinformationen finden Sie auf der API-Preisseite.

Die Echtzeittranskription kann auf jedes abgeschlossene Transkript eine Bearbeitungsanweisung in natürlicher Sprache anwenden, etwa 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 abgeschlossene Transkript folgt ein separates edited_transcript-Ereignis mit dem bearbeiteten Text.

Teiltranskripte werden nie bearbeitet. Auch das Ereignis committed_transcript wird nicht verändert. Bestehende Integrationen funktionieren daher weiterhin, wenn Sie die Funktion aktivieren.

Die Transkriptbearbeitung kann nicht mit entity_detection kombiniert werden. Verbindungen, für die beides festgelegt ist, werden mit dem Fehler invalid_request abgelehnt.

Transkriptbearbeitung aktivieren

Übergeben Sie die Anweisung beim Herstellen der Verbindung mit der Option transcriptEdit (dem Abfrageparameter transcript_edit der WebSocket-API). Die Anweisung kann bis zu 2.000 Zeichen lang sein. Hinweise zum Schreiben von Anweisungen finden Sie im Leitfaden zur Batch-Transkriptbearbeitung.

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

Clientseitig

Verwenden Sie @elevenlabs/client im Browser mit einem Einmal-Token, das von Ihrem Server ausgestellt wurde, wie im Leitfaden zum clientseitigen 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 zum serverseitigen Streaming beschrieben. Nur die Option und der Event-Handler unterscheiden sich von diesem Leitfaden; das Senden von Audio und Schließen der Verbindung funktioniert 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 aktiviert, folgt auf jedes abgeschlossene Transkript ein edited_transcript-Ereignis mit dem abgeschlossenen 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 beachten:

  • Bearbeitungen werden pro abgeschlossenem Segment angewendet. Das Ereignis edited_transcript wird kurz nach dem entsprechenden Ereignis committed_transcript ausgelöst, da die Bearbeitung asynchron erfolgt. Es kann nach dem nächsten Teiltranskript eintreffen, und Bearbeitungen aufeinanderfolgender Segmente können in falscher Reihenfolge eintreffen. Verwenden Sie das Feld text, um eine Bearbeitung ihrem abgeschlossenen 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-Ereignis gesendet. Das Ereignis committed_transcript bleibt davon unberührt.
  • Zeitstempel auf Wortebene in committed_transcript_with_timestamps beschreiben den ursprünglichen abgeschlossenen Text, nicht den bearbeiteten Text.

Nächste Schritte