For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegação principal

Transcrição em tempo real

Transcreva áudio ao vivo em uma sessão em tempo real.

Use a transcrição em tempo real quando seu aplicativo precisar obter texto de um microfone, de uma chamada ou de outro fluxo de áudio ao vivo, sem uma resposta falada do assistente. O modelo recomendado retorna deltas da transcrição à medida que a fala chega e uma transcrição final quando seu aplicativo faz commit de cada turno de áudio.

Comece com gpt-live-transcribe. Use a transcrição de arquivos se o áudio já estiver gravado ou consulte a visão geral de transcrição para comparar os fluxos de trabalho.

Crie uma sessão de transcrição

Crie uma sessão com type: "transcription" e selecione gpt-live-transcribe. Conecte-se via WebSocket para pipelines de áudio no servidor ou via WebRTC para áudio no navegador.

{
  "type": "session.update",
  "session": {
    "type": "transcription",
    "audio": {
      "input": {
        "format": {
          "type": "audio/pcm",
          "rate": 24000
        },
        "transcription": {
          "model": "gpt-live-transcribe"
        },
        "turn_detection": null
      }
    }
  }
}

Este exemplo usa áudio PCM de 24 kHz e desativa a detecção automática de turnos para que você possa fazer commit de cada turno explicitamente. Para ver a configuração completa da sessão, consulte a referência de sessões em tempo real.

Transmita áudio

Envie blocos de áudio com input_audio_buffer.append:

ws.send(
  JSON.stringify({
    type: "input_audio_buffer.append",
    audio: base64Pcm16,
  })
);

Com a detecção automática de turnos desativada, faça commit do buffer quando quiser encerrar um turno de áudio:

ws.send(
  JSON.stringify({
    type: "input_audio_buffer.commit",
  })
);

Como alternativa, configure a detecção de atividade de voz para que o servidor detecte os limites dos turnos e faça commit deles.

Trate os eventos de transcrição

Escute os deltas incrementais da transcrição e os eventos de conclusão:

ws.on("message", (data) => {
  const event = JSON.parse(data);

  if (event.type === "conversation.item.input_audio_transcription.delta") {
    process.stdout.write(event.delta);
  }

  if (event.type === "conversation.item.input_audio_transcription.completed") {
    console.log("\nFinal transcript:", event.transcript);
  }
});

Um evento de delta contém o texto da transcrição que acabou de ficar disponível:

{
  "type": "conversation.item.input_audio_transcription.delta",
  "item_id": "item_003",
  "content_index": 0,
  "delta": "Hello,"
}

Um evento de conclusão contém a transcrição final do item cujo commit foi feito:

{
  "type": "conversation.item.input_audio_transcription.completed",
  "item_id": "item_003",
  "content_index": 0,
  "transcript": "Hello, how are you?"
}

A ordem dos eventos de conclusão de diferentes turnos de fala não é garantida. Use item_id para associar os eventos de transcrição aos itens de entrada cujos commits foram feitos.

Adicione contexto à transcrição

Adicione contexto quando o áudio contiver vocabulário especializado ou houver mais de um idioma esperado. Envie outro evento session.update para alterar a configuração de transcrição durante uma sessão existente.

{
  "type": "session.update",
  "session": {
    "type": "transcription",
    "audio": {
      "input": {
        "format": {
          "type": "audio/pcm",
          "rate": 24000
        },
        "transcription": {
          "model": "gpt-live-transcribe",
          "prompt": "A customer support call about a premium plan and account AC-42.",
          "keywords": ["premium plan", "AC-42", "billing"],
          "languages": ["en", "fr"],
          "delay": "low"
        },
        "turn_detection": null
      }
    }
  }
}
  • Use prompt para descrever a gravação ou seu contexto.
  • Use keywords para nomes de produtos, siglas e outros termos literais que possam aparecer no áudio.
  • Use languages para informar os idiomas de entrada esperados.

Os formatos de código de idioma aceitos incluem:

  • Códigos ISO 639-1, como en, es e fr.
  • Alguns códigos ISO 639-3, como eng, spa, yue e cmn.
  • Códigos de localidade regionais de zh, como zh-cn, zh-tw e zh-hk.

A Realtime API rejeita códigos de idioma não aceitos ou com formatação incorreta.

As palavras-chave são pistas, não conteúdo obrigatório na saída. Mantenha cada palavra-chave em uma única linha e não inclua <, >, retorno de carro ou avanço de linha. A Realtime API rejeita a atualização da sessão se uma palavra-chave contiver um desses caracteres ou se prompt exceder o limite de tamanho do modelo.

gpt-live-transcribe usa languages em vez do campo no singular language. Não envie os dois.

Transcreva um turno após o commit

Use gpt-transcribe em uma sessão em tempo real somente quando precisar especificamente que a transcrição comece após o commit de um turno de áudio ou precisar que a saída inclua os idiomas detectados. Esse fluxo de trabalho especializado exige uma conexão WebSocket.

Quando gpt-transcribe transcreve a entrada em uma sessão da Realtime API ou é executado em uma sessão dedicada à transcrição, ele usa automaticamente os turnos transcritos anteriormente como contexto.

{
  "type": "session.update",
  "session": {
    "type": "transcription",
    "audio": {
      "input": {
        "format": {
          "type": "audio/pcm",
          "rate": 24000
        },
        "transcription": {
          "model": "gpt-transcribe"
        },
        "turn_detection": null
      }
    }
  }
}

Acrescente áudio e envie input_audio_buffer.commit. O modelo poderá então emitir deltas da transcrição antes do evento final de conclusão. Seu evento de conclusão também inclui os idiomas detectados:

{
  "type": "conversation.item.input_audio_transcription.completed",
  "item_id": "item_003",
  "content_index": 0,
  "transcript": "Bonjour, pouvez-vous m'entendre ?",
  "languages": [{ "code": "fr" }]
}

Quando gpt-transcribe não consegue fazer uma previsão confiável do idioma, languages é um array vazio. gpt-live-transcribe não retorna previsões de idiomas detectados.

Ajuste a latência e a precisão

A transcrição em streaming envolve um equilíbrio entre latência e qualidade da transcrição. Configurações com menor atraso podem gerar texto parcial mais cedo. Configurações com maior atraso dão ao modelo mais contexto de áudio antes da emissão de texto e podem reduzir a taxa de erro de palavras.

Comece configurando audio.input.transcription.delay e fazendo testes com seu áudio real. Alguns pontos de partida úteis são:

  • minimal para as interações mais sensíveis à latência;
  • low para legendas ao vivo com baixa latência;
  • medium para equilibrar latência e precisão;
  • high quando a precisão for mais importante que a exibição imediata;
  • xhigh quando seu fluxo de trabalho puder tolerar o maior atraso em troca de mais contexto.

O atraso exato em milissegundos pode variar conforme a configuração do modelo. Por isso, meça o desempenho com áudio representativo em vez de presumir um tempo fixo para cada nível.

Não escolha uma configuração com base apenas em áudio sintético. Faça testes que representem as condições reais de uso, incluindo microfones, áudio de telefonia, sotaques, ruído de fundo, alternância entre idiomas, vocabulário da área e sessões longas.

Lide com confiança, marcações de tempo e identificação de falantes

gpt-live-transcribe não retorna marcações de tempo por palavra, identificação de falantes nem pontuações de confiança da transcrição. Se seu aplicativo exigir marcações de tempo ou identificação de falantes, use um modelo compatível de transcrição de arquivos ou adicione uma alternativa no nível do aplicativo.

Lista de verificação para produção

  • Defina uma meta de latência e um limiar de precisão antes de fazer os ajustes.
  • Teste com áudio real de produção, não apenas com amostras sem ruído.
  • Teste cada idioma de destino.
  • Inclua números, datas, valores monetários, endereços de e-mail, nomes de produtos e termos da área no seu conjunto de avaliação.
  • Monitore transcrições vazias, truncadas e atrasadas separadamente da taxa de erro de palavras.
  • Defina como sua interface deve atualizar o texto parcial quando deltas posteriores corrigirem o texto anterior.
  • Use item_id para ordenar e reconciliar as transcrições finais.
  • Mantenha uma alternativa para marcas de tempo, rótulos de falantes ou campos de confiança sem suporte.
Visão geral de tempo real e áudio

Compare sessões de agentes de voz, tradução e transcrição.

Tradução em tempo real

Traduza falas ao vivo com uma sessão dedicada de tradução.

Conexão WebSocket

Transmita áudio bruto por um pipeline de mídia no servidor.

Detecção de atividade de voz

Configure a detecção de turnos para fluxos de áudio ao vivo.