Hoppa till navigering

Redigering av transkript

Den här guiden visar hur du tillämpar redigeringsinstruktioner på naturligt språk på bekräftade transkript med Realtime Speech to Text API.

Guide · Förutsätter att du har slutfört guiden för klientsides- eller serversides- streaming.

Översikt

Transkriptredigering är en experimentell funktion och innebär ett tillägg på 30 % till grundkostnaden för transkribering, som debiteras för minst 10 sekunders ljud per bekräftat transkript. Se API-prissidan för detaljerad prisinformation.

Realtidstranskribering kan tillämpa en redigeringsinstruktion på naturligt språk på varje bekräftat transkript, till exempel för att skriva talade datum i ett fast format eller för att skriva ut förkortningar och akronymer. Instruktionen skickas en gång när anslutningen öppnas, och varje bekräftat transkript följs av en separat edited_transcript-händelse med den redigerade texten.

Delvisa transkript redigeras aldrig. Händelsen committed_transcript ändras inte heller, så befintliga integrationer fortsätter att fungera när du aktiverar funktionen.

Transkriptredigering kan inte kombineras med entity_detection. Anslutningar som anger båda avvisas med felet invalid_request.

Aktivera transkriptredigering

Skicka instruktionen med alternativet transcriptEdit vid anslutning (frågeparametern transcript_edit i WebSocket API:t). Instruktionen får vara högst 2 000 tecken lång. Se guiden för redigering av batchtranskript för råd om hur du skriver instruktioner.

I alla SDK:er kommer de redigerade transkripten via händelsen RealtimeEvents.EDITED_TRANSCRIPT.

Klientsidan

Använd @elevenlabs/client i webbläsaren med en engångstoken som utfärdats av din server, enligt beskrivningen i guiden för klientbaserad 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);
});

Serversidan

Använd det officiella SDK:t på din server, enligt beskrivningen i guiden för serversidesstreaming. Endast alternativet och händelsehanteraren skiljer sig från den guiden; att skicka ljud och stänga anslutningen fungerar på samma sätt.

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

Ta emot redigerade transkript

När funktionen är aktiverad följs varje bekräftat transkript av en edited_transcript-händelse som innehåller den bekräftade texten och dess redigerade 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"
}

Att tänka på:

  • Redigeringar tillämpas per bekräftat segment. Händelsen edited_transcript skickas kort efter motsvarande committed_transcript-händelse, eftersom redigeringen sker asynkront. Den kan komma efter nästa delvisa transkript, och redigeringar för efterföljande segment kan komma i fel ordning. Använd fältet text för att matcha en redigering med dess bekräftade transkript.
  • Om inga redigeringar gjordes i ett segment är edited_text identisk med text.
  • Om en redigering inte kan skapas för ett segment skickas ingen edited_transcript-händelse för det. Händelsen committed_transcript påverkas inte.
  • Tidsstämplar på ordnivå i committed_transcript_with_timestamps beskriver den ursprungliga bekräftade texten, inte den redigerade texten.

Nästa steg