Hoppa till navigering

Redigering av transkript

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

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

Översikt

Redigering av transkript är en experimentell funktion och lägger till ett påslag på 30 % på den grundläggande transkriberings- kostnaden. Du debiteras för minst 10 sekunders ljud per sparat transkript. Se API-prissidan för detaljerad prisinformation.

Realtidstranskribering kan tillämpa en redigeringsinstruktion på naturligt språk på varje sparat 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 sparat transkript följs av en separat edited_transcript-händelse med den redigerade texten.

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

Redigering av transkript kan inte kombineras med entity_detection. Anslutningar som anger båda avvisas med felet invalid_request.

Aktivera redigering av transkript

Skicka instruktionen med alternativet transcriptEdit när du ansluter (frågeparametern transcript_edit i WebSocket API). Instruktionen får vara upp till 2 000 tecken lång. Se guiden för batchredigering av transkript för vägledning om att skriva 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 utfärdad av din server, enligt beskrivningen i guiden för streaming på klientsidan.

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 den officiella SDK:n på din server, enligt beskrivningen i guiden för streaming på serversidan. 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 sparat transkript av en edited_transcript-händelse som innehåller den sparade 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"
}

Beteende att känna till:

  • Redigeringar tillämpas per sparat segment. Händelsen edited_transcript skickas strax efter motsvarande committed_transcript-händelse eftersom redigeringen körs asynkront. Den kan komma efter nästa partiella 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 sparade 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 sparade texten, inte den redigerade texten.

Nästa steg