Skip to navigation

Transcriptbewerking

In deze handleiding lees je hoe je instructies voor bewerking in natuurlijke taal toepast op gecommitteerde transcripts met de Realtime Speech to Text API.

Handleiding · Hierbij wordt ervan uitgegaan dat je de handleiding voor client-side of server-side streaming hebt voltooid.

Overzicht

Transcriptbewerking is een experimentele functie en voegt een toeslag van 30% toe aan de basiskosten voor transcriptie, gefactureerd voor minimaal 10 seconden audio per gecommitteerd transcript. Bekijk de API-prijspagina voor gedetailleerde prijsinformatie.

Realtime transcriptie kan een bewerkingsinstructie in natuurlijke taal toepassen op elk gecommitteerd transcript, bijvoorbeeld om gesproken datums in een vaste indeling te schrijven of afkortingen en acroniemen uit te schrijven. De instructie wordt eenmaal doorgegeven wanneer de verbinding wordt geopend, en elk gecommitteerd transcript wordt gevolgd door een afzonderlijke edited_transcript-gebeurtenis met de bewerkte tekst.

Partial transcripts worden nooit bewerkt. Ook de committed_transcript-gebeurtenis verandert niet, dus bestaande integraties blijven werken wanneer je de functie inschakelt.

Transcriptbewerking kan niet worden gecombineerd met entity_detection of entity_redaction. Verbindingen die beide instellen, worden afgewezen met een invalid_request-fout.

Transcriptbewerking inschakelen

Geef de instructie door met de optie transcriptEdit wanneer je verbinding maakt (de queryparameter transcript_edit van de WebSocket API). De instructie mag maximaal 2000 tekens lang zijn. Bekijk de handleiding voor batchgewijze transcriptbewerking voor richtlijnen over het schrijven van instructies.

In alle SDK’s komen de bewerkte transcripts binnen via de gebeurtenis RealtimeEvents.EDITED_TRANSCRIPT.

Client-side

Gebruik @elevenlabs/client in de browser met een token voor eenmalig gebruik dat door je server is uitgegeven, zoals beschreven in de handleiding voor client-side streaming.

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

Server-side

Gebruik de officiële SDK op je server, zoals beschreven in de handleiding voor server-side streaming. Alleen de optie en de event handler verschillen van die handleiding; audio versturen en de verbinding sluiten werken op dezelfde manier.

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

Bewerkte transcripts ontvangen

Wanneer ingeschakeld, wordt elk gecommitteerd transcript gevolgd door een edited_transcript-gebeurtenis met de gecommitteerde tekst en de bewerkte versie:

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

Let op het volgende gedrag:

  • Bewerkingen worden per gecommitteerd segment toegepast. De edited_transcript-gebeurtenis wordt kort na de bijbehorende committed_transcript-gebeurtenis verstuurd, omdat bewerking asynchroon plaatsvindt. Deze kan na het volgende partial transcript arriveren en bewerkingen voor opeenvolgende segmenten kunnen in een andere volgorde arriveren. Gebruik het veld text om een bewerking aan het bijbehorende gecommitteerde transcript te koppelen.
  • Als er geen bewerkingen zijn uitgevoerd voor een segment, is edited_text identiek aan text.
  • Als er geen bewerking voor een segment kan worden gemaakt, wordt er geen edited_transcript-gebeurtenis voor verstuurd. De committed_transcript-gebeurtenis wordt niet beïnvloed.
  • Timestamps op woordniveau in committed_transcript_with_timestamps beschrijven de oorspronkelijke gecommitteerde tekst, niet de bewerkte tekst.

Volgende stappen