Edição de transcrição

Este guia mostra como aplicar instruções de edição em linguagem natural a transcrições confirmadas com a API de Transcrição de Voz em Tempo Real.

Guia prático · Pressupõe que você concluiu o guia de streaming no cliente ou de streaming no servidor.

Visão geral

A edição de transcrições é um recurso experimental e adiciona um acréscimo de 30% ao custo base da transcrição, cobrado para pelo menos 10 segundos de áudio por transcrição confirmada. Consulte a página de preços da API para ver informações detalhadas sobre preços.

A transcrição em tempo real pode aplicar uma instrução de edição em linguagem natural a cada transcrição confirmada, por exemplo, para escrever datas faladas em um formato fixo ou expandir abreviações e siglas. A instrução é enviada uma vez quando a conexão é aberta, e cada transcrição confirmada é seguida por um evento edited_transcript separado com o texto editado.

Transcrições parciais nunca são editadas. O evento committed_transcript também não é alterado, então as integrações existentes continuam funcionando quando você ativa o recurso.

A edição de transcrições não pode ser combinada com entity_detection. Conexões que definem ambos os recursos são rejeitadas com um erro invalid_request.

Ativando a edição de transcrições

Envie a instrução com a opção transcriptEdit ao conectar (o parâmetro de consulta transcript_edit da API WebSocket). A instrução pode ter até 2.000 caracteres. Consulte o guia de edição de transcrições em lote para orientações sobre como escrever instruções.

Em todos os SDKs, as transcrições editadas chegam pelo evento RealtimeEvents.EDITED_TRANSCRIPT.

No cliente

Use @elevenlabs/client no navegador com um token de uso único emitido pelo seu servidor, conforme descrito no guia de streaming no cliente.

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

No servidor

Use o SDK oficial no seu servidor, conforme descrito no guia de streaming no servidor. Apenas a opção e o manipulador de eventos diferem desse guia; o envio de áudio e o encerramento da conexão funcionam da mesma forma.

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

Recebendo transcrições editadas

Quando ativada, cada transcrição confirmada é seguida por um evento edited_transcript que contém o texto confirmado e sua versão editada:

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

Comportamentos importantes:

  • As edições são aplicadas por segmento confirmado. O evento edited_transcript é emitido pouco depois do evento committed_transcript correspondente, pois a edição é executada de forma assíncrona. Ele pode chegar após a próxima transcrição parcial, e as edições de segmentos consecutivos podem chegar fora de ordem. Use o campo text para associar uma edição à transcrição confirmada.
  • Se nenhuma edição for feita em um segmento, edited_text será idêntico a text.
  • Se não for possível produzir uma edição para um segmento, nenhum evento edited_transcript será enviado para ele. O evento committed_transcript não é afetado.
  • Os carimbos de data e hora por palavra em committed_transcript_with_timestamps descrevem o texto confirmado original, não o texto editado.

Próximas etapas