Use a transcrição de arquivos quando a gravação já estiver concluída ou quando a solicitação contiver um trecho de áudio com início e fim definidos. Envie o áudio para receber a transcrição final ou receba o texto por streaming enquanto o modelo processa o arquivo.
Comece com gpt-transcribe. Esse é o modelo recomendado para transcrever a fala no idioma original da gravação. Os exemplos especializados a seguir usam modelos obsoletos para identificar quem fala, obter marcações de tempo por palavra e gerar legendas em diferentes formatos.
Os modelos whisper-1, gpt-4o-transcribe, gpt-4o-mini-transcribe,
gpt-4o-transcribe-diarize e o endpoint /v1/audio/translations estão obsoletos e
serão desativados em 26 de fevereiro de 2027. Consulte o aviso de descontinuação e escolha um fluxo de transcrição atual. Os exemplos especializados a seguir descrevem os recursos disponíveis para integrações existentes até a desativação.
Os arquivos podem ter até 25 MB. Os formatos de entrada aceitos são mp3, mp4, mpeg, mpga, m4a, wav e webm.
Se você ainda estiver recebendo áudio de um microfone, de uma chamada ou de uma transmissão de mídia, use a transcrição em tempo real.
Início rápido
Transcrições
Envie o arquivo de áudio para /v1/audio/transcriptions com o modelo gpt-transcribe.
Transcrever áudio
Python
1
2
3
4
5
6
7
8
9
10
11import fs from "fs";import OpenAI from "openai";const openai = new OpenAI();const transcription = await openai.audio.transcriptions.create({ file: fs.createReadStream("fixtures/audio.wav"), model: "gpt-transcribe",});console.log(transcription.text);
Quando o modelo não consegue identificar o idioma com confiança, ele retorna "languages": []. Consulte a referência da API de áudio para ver todos os campos de solicitação e resposta.
Adicionar contexto à transcrição
Use prompt, keywords e languages com gpt-transcribe para melhorar a transcrição de termos específicos de uma área e de gravações em vários idiomas.
Adicionar contexto e indicar os idiomas esperados
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20import fs from "fs";import OpenAI from "openai";const openai = new OpenAI();const request = { model: "gpt-transcribe", file: fs.createReadStream("fixtures/audio.wav"), prompt: "A customer support call about a premium plan and account AC-42.",};const transcription = await openai.audio.transcriptions.create(request, { body: { ...request, keywords: ["premium plan", "AC-42", "billing"], languages: ["en", "fr"], },});console.log(transcription.text);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16from openai import OpenAIclient = OpenAI()withopen("meeting.wav", "rb") as audio_file: transcription = client.audio.transcriptions.create(model="gpt-transcribe",file=audio_file,prompt="A customer support call about a premium plan and account AC-42.",extra_body={"keywords": ["premium plan", "AC-42", "billing"],"languages": ["en", "fr"], }, )print(transcription.text)
Use prompt para descrever o contexto da gravação em texto livre.
Use keywords para indicar os termos exatos que você espera ouvir.
Use languages para indicar os idiomas esperados no áudio de entrada.
As palavras-chave servem como pistas. O modelo não precisa incluí-las na transcrição. Inclua apenas termos relevantes e avalie se eles aumentam a precisão sem introduzir palavras que ninguém disse.
No gpt-transcribe, o campo languages substitui o campo language, no singular. Não envie os dois campos juntos. Escreva cada palavra-chave em uma única linha, sem incluir <, >, retorno de carro ou avanço de linha. A API rejeita a solicitação inteira se encontrar um desses caracteres ou se prompt exceder o limite de tamanho do modelo.
Diarização de falantes
Até 26 de fevereiro de 2027, as integrações existentes podem usar o modelo obsoleto gpt-4o-transcribe-diarize para identificar quem fala em cada trecho de uma gravação. Esse modelo é especializado na identificação de falantes e não é recomendado para a transcrição de arquivos em geral.
Solicite o formato de resposta diarized_json para receber segmentos com os metadados speaker, start e end. Para áudios com mais de 30 segundos, defina chunking_strategy como "auto" ou forneça uma configuração de detecção de atividade de voz nesse campo.
Se quiser associar os segmentos a falantes conhecidos, forneça até quatro amostras curtas de áudio com known_speaker_names[] e known_speaker_references[]. Use amostras de 2 a 10 segundos em qualquer formato aceito para o arquivo de áudio principal. Ao enviar dados de formulário multipart, codifique as amostras como URLs de dados.
Com stream=true, as respostas com identificação de falantes emitem eventos transcript.text.segment sempre que o modelo conclui um segmento. Os eventos transcript.text.delta incluem o campo segment_id, mas não identificam quem fala nos trechos parciais. O modelo só identifica o falante ao concluir o segmento.
A identificação de falantes está disponível em /v1/audio/transcriptions. As sessões de transcrição em tempo real não oferecem esse recurso.
Traduções
O endpoint obsoleto /v1/audio/translations usa whisper-1 para traduzir uma gravação de áudio concluída para o inglês. Ele continuará disponível até 26 de fevereiro de 2027. A transcrição preserva o idioma original da gravação, enquanto esse endpoint retorna texto apenas em inglês.
Migre para a tradução em tempo real usando gpt-realtime-translate em /v1/realtime/translations. Para isso, é preciso criar uma sessão de tradução, enviar o áudio por streaming e processar eventos de tradução. Alterar apenas o ID do modelo em uma solicitação a /v1/audio/translations não efetua a migração.
Idiomas compatíveis
Use languages com gpt-transcribe quando souber quais idiomas esperar no áudio. A API aceita os seguintes formatos de código de idioma.
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 variantes regionais de zh, como zh-cn, zh-tw e zh-hk.
A API rejeita códigos de idioma incompatíveis ou com formato incorreto. A resposta também indica os idiomas que o modelo consegue detectar com confiança.
Para whisper-1, consulte a lista de idiomas do Whisper. O Whisper oferece suporte a 98 idiomas, mas a precisão varia conforme o idioma. Os modelos existentes que aceitam a indicação de um único idioma usam language em vez de languages.
Marcações de tempo
Até 26 de fevereiro de 2027, as integrações existentes podem usar o modelo obsoleto whisper-1 para obter marcações de tempo por palavra ou por segmento. Com o parâmetro timestamp_granularities[], você recebe dados estruturados de marcação de tempo para criação de legendas e edição de vídeo.
O parâmetro timestamp_granularities[] só está disponível para whisper-1.
Gravações mais longas
A API de transcrições aceita arquivos de até 25 MB. Para gravações maiores, use um formato de áudio compactado ou divida o arquivo em partes de até 25 MB. Evite cortar uma frase ao meio, pois isso pode eliminar parte do contexto e reduzir a precisão.
A OpenAI não oferece garantias quanto à usabilidade ou à segurança de softwares de terceiros como o PyDub.
Uso de prompts
Use um prompt para ajudar o modelo a reconhecer nomes, siglas e vocabulário específico da gravação ou a aplicar a formatação desejada. Com gpt-transcribe, combine o prompt com os campos keywords e languages descritos em Adicionar contexto à transcrição.
As integrações existentes com gpt-4o-transcribe e gpt-4o-mini-transcribe também aceitam prompts. O modelo gpt-4o-transcribe-diarize não aceita prompts.
Você pode usar prompts para as seguintes finalidades.
Transcrever corretamente nomes de produtos, termos técnicos e siglas.
Aproveitar o contexto de um trecho anterior de uma gravação longa.
Preservar a pontuação, o uso de maiúsculas e minúsculas e as expressões de hesitação.
Escolher o sistema de escrita preferido para um idioma.
No whisper-1, os prompts têm um limite de 224 tokens e oferecem menos controle do que no modelo de transcrição recomendado. Consulte Como melhorar a confiabilidade se o seu fluxo de trabalho exigir o Whisper.
Transcrições por streaming
Na transcrição de arquivos, você pode receber trechos de texto por streaming enquanto o modelo processa uma gravação concluída. Esse recurso dispensa a criação de uma sessão em tempo real.
Receber por streaming a transcrição de uma gravação concluída
Defina stream=true ao usar gpt-transcribe. A API de transcrições retorna eventos de transcrição à medida que o modelo transcreve cada parte da gravação.
O modelo emite eventos transcript.text.delta à medida que transcreve o áudio. Ao terminar, retorna a transcrição completa no evento final transcript.text.done. Para transcrições com identificação de falantes e response_format="diarized_json", o modelo de diarização também emite um evento transcript.text.segment sempre que conclui um segmento.
No gpt-transcribe, o evento final também inclui os idiomas detectados.
As integrações existentes com gpt-4o-transcribe, gpt-4o-mini-transcribe e
gpt-4o-transcribe-diarize também permitem receber a transcrição de arquivos por streaming.
O modelo whisper-1 não oferece esse recurso.
Receber por streaming a transcrição de uma gravação em andamento
Para áudio ao vivo de um microfone, de uma chamada ou de uma transmissão de mídia, siga o guia de transcrição em tempo real em vez do procedimento acima para arquivos. O guia explica como funcionam as sessões de transcrição atuais e como transcrever áudio em tempo real usando o modelo recomendado gpt-live-transcribe.
Como melhorar a confiabilidade
Se você usa whisper-1 para obter marcações de tempo, gerar legendas ou traduzir áudio, as técnicas a seguir podem melhorar o reconhecimento de palavras pouco comuns e siglas. Para novas integrações de transcrição de uso geral, comece com gpt-transcribe e use o contexto de transcrição.
O primeiro método usa o parâmetro opcional prompt para fornecer uma lista de termos com a grafia correta.
O Whisper não segue instruções da mesma forma que um modelo de texto de uso geral e aceita prompts de até 224 tokens.
Essa técnica aumenta a confiabilidade, mas o limite de 224 tokens exige uma lista de SKUs relativamente curta para que a solução funcione em escala.
O segundo método usa um modelo de texto para revisar a transcrição depois de concluída.
Forneça as instruções na variável system_prompt. Assim como no prompt de transcrição, você pode incluir nomes de empresas e produtos.
Pós-processamento
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28const systemPrompt = `You are a helpful assistant for the company ZyntriQix. Your task isto correct any spelling discrepancies in the transcribed text. Makesure that the names of the following products are spelled correctly:ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array,OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K.,Q.U.A.R.T.Z., F.L.I.N.T. Only add necessary punctuation such asperiods, commas, and capitalization, and use only the context provided.`;const transcript = await transcribe(audioFile);const completion = await openai.chat.completions.create({ model: "gpt-4.1", temperature: temperature, messages: [ { role: "system", content: systemPrompt, }, { role: "user", content: transcript, }, ], store: true,});console.log(completion.choices[0].message.content);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24system_prompt ="""You are a helpful assistant for the company ZyntriQix. Your task is to correctany spelling discrepancies in the transcribed text. Make sure that the names ofthe following products are spelled correctly: ZyntriQix, Digique Plus,CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractalMatrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T. Only add necessarypunctuation such as periods, commas, and capitalization, and use only thecontext provided."""defgenerate_corrected_transcript(temperature, system_prompt, audio_file): response = client.chat.completions.create(model="gpt-4.1",temperature=temperature,messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": transcribe(audio_file, "")}, ], )return response.choices[0].message.contentcorrected_text = generate_corrected_transcript(0, system_prompt, fake_company_filepath)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49package mainimport ( "context" "fmt" "os" "github.com/openai/openai-go/v3")const systemPrompt = `You are a helpful assistant for the company ZyntriQix. Your task isto correct any spelling discrepancies in the transcribed text. Makesure that the names of the following products are spelled correctly:ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array,OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K.,Q.U.A.R.T.Z., F.L.I.N.T. Only add necessary punctuation such asperiods, commas, and capitalization, and use only the context provided.`func main() { file, err := os.Open("fixtures/speech.wav") if err != nil { panic(err) } defer file.Close() client := openai.NewClient() transcription, err := client.Audio.Transcriptions.New(context.Background(), openai.AudioTranscriptionNewParams{ File: file, Model: openai.AudioModelGPT4oTranscribe, }) if err != nil { panic(err) } completion, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{ Model: "gpt-4.1", Temperature: openai.Float(0), Messages: []openai.ChatCompletionMessageParamUnion{ openai.SystemMessage(systemPrompt), openai.UserMessage(transcription.Text), }, Store: openai.Bool(true), }) if err != nil { panic(err) } fmt.Println(completion.Choices[0].Message.Content)}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42import com.openai.client.OpenAIClient;import com.openai.client.okhttp.OpenAIOkHttpClient;import com.openai.models.audio.transcriptions.TranscriptionCreateParams;import com.openai.models.chat.completions.ChatCompletionCreateParams;import java.nio.file.Path;String systemPrompt = """ You are a helpful assistant for the company ZyntriQix. Your task is to correct any spelling discrepancies in the transcribed text. Make sure that the names of the following products are spelled correctly: ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T. Only add necessary punctuation such as periods, commas, and capitalization, and use only the context provided. """;var result = client .audio() .transcriptions() .create( TranscriptionCreateParams.builder() .file(Path.of(System.getenv("OPENAI_EXAMPLE_AUDIO_PATH"))) .model("gpt-4o-transcribe") .build());var completion = client .chat() .completions() .create( ChatCompletionCreateParams.builder() .model("gpt-4.1") .temperature(0.0) .store(true) .addSystemMessage(systemPrompt) .addUserMessage(result.asTranscription().text()) .build());completion.choices().stream() .flatMap(choice -> choice.message().content().stream()) .forEach(System.out::println);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32using OpenAI.Audio;using OpenAI.Chat;string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;string model = "gpt-4.1";ChatClient client = new(model, key);string transcriptionModel = "gpt-4o-transcribe";AudioClient audio = new(transcriptionModel, key);await using FileStream source = File.OpenRead("speech.wav");AudioTranscription transcription = await audio.TranscribeAudioAsync(source, "speech.wav");string systemPrompt = """ You are a helpful assistant for the company ZyntriQix. Correct any spelling discrepancies in the transcribed text. Make sure the names of these products are spelled correctly: ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T. Only add necessary punctuation such as periods, commas, and capitalization, and use only the context provided. """;ChatCompletionOptions correctionOptions = new() { Temperature = 0 };ChatCompletion completion = await client.CompleteChatAsync( [ new SystemChatMessage(systemPrompt), new UserChatMessage(transcription.Text), ], correctionOptions);Console.WriteLine(completion.Content[0].Text);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17require "openai"require "pathname"client = OpenAI::Client.newaudio = Pathname("speech.wav")transcript = client.audio.transcriptions.create( file: audio, model: "gpt-4o-mini-transcribe")raise "Expected a JSON transcript response" if transcript.is_a?(StringIO)response = client.responses.create( model: "gpt-4.1", input: "Add punctuation and paragraph breaks without changing the words:\n#{transcript.text}")puts(response.output_text)
Um modelo de texto pode corrigir erros de grafia e processar listas de termos maiores do que as que cabem no prompt de 224 tokens do Whisper. Confira as correções com base no áudio original para evitar alterações no que foi dito.