Zur Navigation springen

Transkripte und Commit-Strategien

Dieser Leitfaden zeigt Ihnen, wie Sie mit der ElevenLabs Echtzeit-Spracherkennungs-API Transkripte und Commit-Strategien verarbeiten.

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

Übersicht

Bei der Audiotranskription erhalten Sie partielle und bestätigte Transkripte.

  • Partielle Transkripte – die Zwischenergebnisse der Transkription
  • Bestätigte Transkripte – die finalen Ergebnisse des Transkriptionssegments, die gesendet werden, wenn eine „Commit“-Nachricht eingeht. Eine Sitzung kann mehrere bestätigte Transkripte enthalten.

Das Commit-Transkript kann optional Zeitstempel auf Wortebene enthalten. Diese werden nur empfangen, wenn die Option „Zeitstempel einschließen“ auf true gesetzt ist.

# Initialize the connection
connection = await elevenlabs.speech_to_text.realtime.connect(RealtimeUrlOptions(
model_id="scribe_v2_realtime",
include_timestamps=True, # Include this to receive the RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS event with word-level timestamps
))

Commit-Strategien

Beim Senden von Audio-Chunks über WebSocket können Transkriptsegmente auf zwei Arten bestätigt werden: manueller Commit oder Voice Activity Detection (VAD).

Manueller Commit

Mit der manuellen Commit-Strategie bestimmen Sie, wann Transkriptsegmente bestätigt werden. Dies ist die standardmäßig verwendete Strategie. Das Bestätigen eines Segments löscht das verarbeitete, angesammelte Transkript und startet ein neues Segment, ohne Kontext zu verlieren. Um die Latenz zu verbessern, empfiehlt es sich, alle 20–30 Sekunden zu bestätigen. Auch ohne manuellen Commit bestätigt das Modell nach etwa 36 Sekunden angesammeltem Audio automatisch.

Für beste Ergebnisse bestätigen Sie während Phasen der Stille oder an einem anderen logischen Punkt, etwa bei einem Sprecherwechsel.

Die Transkriptverarbeitung beginnt, nachdem die ersten 2 Sekunden Audio gesendet wurden.
await connection.send({
"audio_base_64": audio_base_64,
"sample_rate": 16000,
})
# When ready to finalize the segment
await connection.commit()

Mehrere manuelle Commits in kurzer Folge können die Modellleistung beeinträchtigen.

Vorherigen Textkontext senden

Wenn Sie Audio zur Transkription senden, können Sie zusammen mit dem ersten Audio-Chunk vorherigen Textkontext senden, damit das Modell den Sprachkontext besser versteht. Das ist in einigen Szenarien nützlich:

  • Agententext für Anwendungsfälle mit dialogorientierter KI – ermöglicht dem Modell, den Gesprächskontext leichter zu verstehen und bessere Transkripte zu erstellen.
  • Wiederverbindung nach einem Netzwerkfehler – ermöglicht dem Modell, die Transkription anhand des vorherigen Texts fortzusetzen.
  • Allgemeine Kontextinformationen – eine kurze Beschreibung, worum es in der Transkription geht, hilft dem Modell, den Kontext zu verstehen.

Das Senden von previous_text-Kontext ist nur beim Senden des ersten Audio-Chunks über connection.send() möglich. Das Senden in nachfolgenden Chunks führt zu einem Fehler. Vorheriger Text funktioniert am besten, wenn er kürzer als 50 Zeichen ist.

await connection.send({
"audio_base_64": audio_base_64,
"previous_text": "The previous text context",
})

Voice Activity Detection (VAD)

Mit der VAD-Strategie erkennt die Transkriptions-Engine automatisch Sprach- und Stillesegmente. Wenn ein Schwellenwert für Stille erreicht ist, bestätigt die Transkriptions-Engine das Transkriptsegment automatisch.

Bei der Transkription von Mikrofon-Audio in der clientseitigen Integration wird die VAD-Strategie empfohlen.

vad_silence_threshold_secs akzeptiert 0,192 bis 3,0 Sekunden. Die JavaScript- und React-SDKs akzeptieren nur 0,3 bis 3,0.

import { Scribe, AudioFormat, CommitStrategy } from "@elevenlabs/client";
const connection = Scribe.connect({
token: "sutkn_1234567890",
modelId: "scribe_v2_realtime",
audioFormat: AudioFormat.PCM_16000,
commitStrategy: CommitStrategy.VAD,
vadSilenceThresholdSecs: 1.5,
vadThreshold: 0.4,
minSpeechDurationMs: 100,
minSilenceDurationMs: 100,
});

Hintergrundaudio filtern

Setzen Sie den Abfrageparameter filter_background_audio=true, um Fehlaktivierungen durch Hintergrundsprache, etwa Gespräche in der Nähe, und Umgebungsgeräusche zu reduzieren. Bei aktiviertem Filter verwendet die Voice Activity Detection ein Modell, das darauf abgestimmt ist, Hintergrundsprache zu ignorieren. vad_threshold ist dann standardmäßig auf 0.15 gesetzt, sofern Sie keinen eigenen Wert festlegen.

filter_background_audio kann nicht mit include_timestamps kombiniert werden. Wenn Sie beide festlegen, sendet der Server einen invalid_request-Fehler und schließt die Verbindung.

Die Filterung ändert nichts an der Abrechnung: Jedes gestreamte Audio wird abgerechnet, auch Audio, das der Filter ignoriert.

Verbindung während Stille aufrechterhalten

Die offiziellen SDKs trennen die Verbindung nicht, wenn keine Nachrichten eingehen. Die meisten Integrationen benötigen dies daher nicht. Wenn Ihr eigener WebSocket-Client oder ein zwischengeschalteter Proxy oder Load Balancer die Verbindung schließt, sobald eine Zeit lang keine Frames eingehen, übergeben Sie beim Verbinden den optionalen Abfrageparameter keepalive_interval_ms. Das ist bei längeren Phasen der Stille relevant, etwa bei einem Telefonat mit Pausen von 10–15 Sekunden. Etwa einmal pro Intervall sendet der Server ein Keepalive-partial_transcript: leer (text: ""), wenn das aktuelle Segment keinen unbestätigten Text enthält, oder als Wiederholung des neuesten partiellen Texts, wenn es welchen enthält.

Keepalives sind kein frei laufender Ping: Sie müssen weiterhin Audio streamen (Stille-Frames sind zulässig). Wenn Sie kein Audio mehr senden, werden keine Keepalives gesendet, und der Server schließt die Verbindung nach 15 Sekunden ohne Client-Nachrichten. Dieses Serverlimit ist nicht konfigurierbar.

  • Akzeptiert eine Ganzzahl zwischen 500 und 10000 (Millisekunden). Standardmäßig ist die Funktion deaktiviert; lassen Sie den Parameter weg, um das bisherige Verhalten beizubehalten.
  • Werte außerhalb des Bereichs oder Nicht-Ganzzahlwerte führen dazu, dass der Server einen invalid_request-Fehler sendet und die Verbindung schließt.
  • Keepalives werden dadurch ausgelöst, dass das Modell das gesendete stille Audio tatsächlich verarbeitet, nicht durch einen frei laufenden Timer. Sie bestätigen daher auch, dass der Transkriptionspfad aktiv ist.
  • Audio wird in Chunks von etwa 1 Sekunde verarbeitet. Keepalives treffen daher ungefähr einmal pro auf diesen Takt gerundetes Intervall ein (beispielsweise wird 1000 etwa einmal pro Sekunde ausgelöst, 3000 etwa alle 3 Sekunden). Das erste Keepalive einer Sitzung trifft etwa 2 Sekunden nach deren Beginn ein, da der Server die ersten etwa 2 Sekunden Audio vor der Transkription puffert. Setzen Sie Ihr Intervall auf höchstens etwa ein Drittel Ihres eigenen Lese-Timeouts, um einen Puffer zu lassen.
  • Der text eines Keepalives ist nur leer, wenn das aktuelle Segment noch keinen unbestätigten Text enthält. Wenn nach Sprache, aber vor einem Commit eine Pause eintritt – besonders sichtbar mit filter_background_audio=true oder im manuellen Commit-Modus ohne Commit – wiederholt das Keepalive stattdessen den neuesten partiellen Text, damit Zwischentext nie ausgeblendet wird. Nach einem Commit sind Keepalives wieder leer, bis neue Sprache eintrifft.
  • Funktioniert mit commit_strategy=manual und commit_strategy=vad sowie mit filter_background_audio=true. Hat keine Auswirkungen auf die Abrechnung über das bereits gestreamte Audio hinaus.
  • Die config der session_started-Nachricht gibt keepalive_interval_ms zurück (null, wenn deaktiviert).

Ein leeres partial_transcript (text: "") bedeutet „keine Sprache im aktuellen Segment“. Ein wiederholtes, identisches partial_transcript während einer Pause ist ebenfalls ein Keepalive – Clients sollten partielle Transkripte einfach wie bisher darstellen, statt die Wiederholung gesondert zu behandeln.

Fügen Sie den Parameter zur WebSocket-URL hinzu:

wss://api.elevenlabs.io/v1/speech-to-text/realtime?model_id=scribe_v2_realtime&commit_strategy=vad&keepalive_interval_ms=1000

Unterstützte Audioformate

FormatAbtastrateBeschreibung
pcm_80008 kHz16-Bit-PCM, Little-Endian
pcm_1600016 kHz16-Bit-PCM, Little-Endian (empfohlen)
pcm_2205022,05 kHz16-Bit-PCM, Little-Endian
pcm_2400024 kHz16-Bit-PCM, Little-Endian
pcm_4410044,1 kHz16-Bit-PCM, Little-Endian
pcm_4800048 kHz16-Bit-PCM, Little-Endian
ulaw_80008 kHz8-Bit-μ-Law-Codierung

Best Practices

Audioqualität

  • Verwenden Sie für ein optimales Verhältnis von Qualität und Bandbreite eine Abtastrate von 16 kHz.
  • Sorgen Sie für einen sauberen Audioeingang mit minimalen Hintergrundgeräuschen.
  • Verwenden Sie eine geeignete Mikrofonverstärkung, um Clipping zu vermeiden.
  • Derzeit wird nur Mono-Audio unterstützt.

Chunk-Größe

  • Senden Sie für reibungsloses Streaming Audio-Chunks mit einer Länge von 0,1–1 Sekunde.
  • Kleinere Chunks führen zu geringerer Latenz, aber mehr Overhead.
  • Größere Chunks sind effizienter, können aber Latenz verursachen.

Nächste Schritte