Modification de transcription

Ce guide explique comment appliquer des instructions de modification en langage naturel aux transcriptions validées avec l’API Realtime Speech to Text.

Guide pratique · Suppose que vous avez suivi le guide de streaming côté client ou de streaming côté serveur.

Vue d’ensemble

La modification des transcriptions est une fonctionnalité expérimentale qui ajoute une majoration de 30 % au coût de base de la transcription, facturée pour au moins 10 secondes d’audio par transcription validée. Consultez la page des tarifs de l’API pour obtenir des informations détaillées sur les tarifs.

La transcription en temps réel peut appliquer une instruction de modification en langage naturel à chaque transcription validée, par exemple pour écrire les dates énoncées dans un format fixe ou développer les abréviations et acronymes. L’instruction est transmise une seule fois à l’ouverture de la connexion, et chaque transcription validée est suivie d’un événement edited_transcript distinct contenant le texte modifié.

Les transcriptions partielles ne sont jamais modifiées. L’événement committed_transcript n’est pas non plus modifié, afin que vos intégrations existantes continuent de fonctionner lorsque vous activez cette fonctionnalité.

La modification des transcriptions ne peut pas être combinée à entity_detection. Les connexions qui configurent les deux sont rejetées avec une erreur invalid_request.

Activer la modification des transcriptions

Transmettez l’instruction avec l’option transcriptEdit lors de la connexion (le paramètre de requête transcript_edit de l’API WebSocket). L’instruction peut contenir jusqu’à 2 000 caractères. Consultez le guide de modification des transcriptions par lots pour savoir comment rédiger des instructions.

Dans tous les SDK, les transcriptions modifiées arrivent via l’événement RealtimeEvents.EDITED_TRANSCRIPT.

Côté client

Utilisez @elevenlabs/client dans le navigateur avec un jeton à usage unique émis par votre serveur, comme décrit dans le guide de streaming côté client.

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

Côté serveur

Utilisez le SDK officiel sur votre serveur, comme décrit dans le guide de streaming côté serveur. Seules l’option et le gestionnaire d’événements diffèrent de ce guide ; l’envoi de l’audio et la fermeture de la connexion fonctionnent de la même manière.

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

Recevoir les transcriptions modifiées

Lorsqu’elle est activée, chaque transcription validée est suivie d’un événement edited_transcript contenant le texte validé et sa version modifiée :

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

Comportements à connaître :

  • Les modifications sont appliquées par segment validé. L’événement edited_transcript est émis peu après l’événement committed_transcript correspondant, car la modification s’exécute de manière asynchrone. Il peut arriver après la transcription partielle suivante, et les modifications de segments consécutifs peuvent arriver dans le désordre. Utilisez le champ text pour associer une modification à sa transcription validée.
  • Si aucune modification n’a été apportée à un segment, edited_text est identique à text.
  • Si une modification ne peut pas être produite pour un segment, aucun événement edited_transcript n’est envoyé pour celui-ci. L’événement committed_transcript n’est pas affecté.
  • Les horodatages au niveau des mots dans committed_transcript_with_timestamps décrivent le texte validé d’origine, et non le texte modifié.

Étapes suivantes