Transkriptbearbeitung

Diese Anleitung zeigt Ihnen, wie Sie mit der Echtzeit-Spracherkennung API Bearbeitungsanweisungen in natürlicher Sprache auf abgeschlossene Transkripte anwenden.

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

Übersicht

Die Transkriptbearbeitung ist eine experimentelle Funktion und verursacht einen Aufschlag von 30 % auf die Grundkosten der Transkription. Pro übermitteltem Transkript werden mindestens 10 Sekunden Audio abgerechnet. Detaillierte Preisinformationen finden Sie auf der API-Preisseite.

Die Echtzeit-Transkription kann auf jedes übermittelte 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 übermittelte Transkript folgt ein separates edited_transcript-Ereignis mit dem bearbeiteten Text.

Partielle Transkripte werden nie bearbeitet. Auch das committed_transcript-Ereignis bleibt unverändert, sodass bestehende Integrationen weiterhin funktionieren, wenn Sie die Funktion aktivieren.

Die Transkriptbearbeitung kann nicht mit entity_detection 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 kann bis zu 2.000 Zeichen lang sein. Hinweise zum Formulieren von Anweisungen finden Sie in der Anleitung 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 Ihr Server ausstellt, wie in der Anleitung 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 in der Anleitung zum serverseitigen Streaming beschrieben. Nur die Option und der Event-Handler unterscheiden sich von dieser Anleitung; das Senden von Audio und Schließen der Verbindung funktioniert genauso.

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

Nach der Aktivierung folgt auf jedes übermittelte Transkript ein edited_transcript-Ereignis, das den übermittelten Text und seine bearbeitete Version enthält:

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

Beachten Sie folgendes Verhalten:

  • Bearbeitungen werden pro übermitteltem Segment angewendet. Das edited_transcript-Ereignis wird kurz nach dem entsprechenden committed_transcript-Ereignis ausgelöst, da die Bearbeitung asynchron erfolgt. Es kann nach dem nächsten partiellen Transkript eintreffen, und Bearbeitungen aufeinanderfolgender Segmente können in falscher Reihenfolge eintreffen. Verwenden Sie das Feld text, um eine Bearbeitung ihrem übermittelten Transkript zuzuordnen.
  • Wenn an einem Segment keine Bearbeitungen vorgenommen wurden, ist edited_text identisch mit text.
  • Wenn für ein Segment keine Bearbeitung erstellt werden kann, wird dafür kein edited_transcript-Ereignis gesendet. Das committed_transcript-Ereignis bleibt unbeeinflusst.
  • Zeitstempel auf Wortebene in committed_transcript_with_timestamps beschreiben den ursprünglichen übermittelten Text, nicht den bearbeiteten Text.

Nächste Schritte