Skip to navigation

Transcriptbewerking

In deze gids leer je hoe je bewerkingsinstructies in natuurlijke taal toepast op vastgelegde transcripten met de Realtime Speech to Text API.

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

Overzicht

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

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

Gedeeltelijke transcripten worden nooit bewerkt. Ook de committed_transcript-event verandert niet, zodat bestaande integraties blijven werken wanneer je de functie inschakelt.

Transcriptbewerking kan niet worden gecombineerd met entity_detection. Verbindingen waarin beide zijn ingesteld, worden afgewezen met een invalid_request-fout.

Transcriptbewerking inschakelen

Geef de instructie mee met de optie transcriptEdit bij het verbinden (de queryparameter transcript_edit van de WebSocket API). De instructie mag maximaal 2000 tekens lang zijn. Bekijk de handleiding voor batchgewijze transcriptbewerking voor richtlijnen voor het schrijven van instructies.

In alle SDK’s komen de bewerkte transcripten binnen via de event 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; het versturen van audio en het sluiten van de verbinding 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 transcripten ontvangen

Wanneer deze functie is ingeschakeld, wordt elk vastgelegd transcript gevolgd door een edited_transcript-event met de vastgelegde 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 vastgelegd segment toegepast. De event edited_transcript wordt kort na de bijbehorende event committed_transcript verzonden, omdat de bewerking asynchroon wordt uitgevoerd. De event kan na het volgende gedeeltelijke transcript binnenkomen en bewerkingen voor opeenvolgende segmenten kunnen in een andere volgorde binnenkomen. Gebruik het veld text om een bewerking aan het vastgelegde transcript te koppelen.
  • Als er geen bewerkingen voor een segment zijn uitgevoerd, is edited_text identiek aan text.
  • Als er geen bewerking voor een segment kan worden gemaakt, wordt hiervoor geen event edited_transcript verzonden. De event committed_transcript wordt niet beïnvloed.
  • Timestamps op woordniveau in committed_transcript_with_timestamps beschrijven de oorspronkelijke vastgelegde tekst, niet de bewerkte tekst.

Volgende stappen