Use a transcrição de arquivos quando tiver uma gravação concluída ou uma solicitação de áudio com escopo delimitado. Envie o áudio e receba 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 fala gravada no idioma original. Use um modelo especializado apenas se precisar de identificação de locutores, marcas de tempo por palavra, formatos de legenda ou tradução para o inglês.
Os arquivos podem ter até 25 MB. Os formatos de entrada aceitos são mp3, mp4, mpeg, mpga, m4a, wav e webm.
Para áudio que ainda está sendo recebido de um microfone, chamada ou fluxo 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 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 todos os campos de solicitação e resposta na Referência da API de áudio.
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 áudio multilíngue:
Adicionar contexto e indicações de idioma
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 fornecer contexto não estruturado sobre a gravação.
Use keywords para indicar os termos exatos que você espera ouvir.
Use languages para indicar os idiomas de entrada esperados.
As palavras-chave são indicações, não conteúdo obrigatório na saída. Inclua apenas termos relevantes e avalie se eles melhoram a precisão sem fazer com que apareçam termos que não foram falados.
Para gpt-transcribe, languages substitui o campo singular language. Não envie os dois campos. Mantenha cada palavra-chave em uma única linha e não inclua <, >, retorno de carro ou avanço de linha. A API rejeita toda a solicitação quando encontra um desses caracteres ou quando prompt excede o limite de comprimento do modelo.
Diarização de locutores
Use gpt-4o-transcribe-diarize apenas quando precisar identificar quem fala em diferentes partes de uma gravação. Esse modelo especializado em identificação de locutores não é o modelo recomendado para a transcrição comum de arquivos.
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 uma configuração de detecção de atividade de voz.
Opcionalmente, você pode fornecer até quatro referências curtas de áudio com known_speaker_names[] e known_speaker_references[] para associar segmentos a locutores conhecidos. Forneça clipes de referência de 2 a 10 segundos em qualquer formato de entrada aceito no envio do áudio principal; codifique-os como URLs de dados ao usar dados de formulário multipart.
Quando stream=true, as respostas com identificação de locutores emitem eventos transcript.text.segment sempre que um segmento é concluído. Os eventos transcript.text.delta incluem um campo segment_id, mas os deltas não incluem atribuições parciais de locutores. O modelo atribui um locutor apenas ao finalizar o segmento.
A identificação de locutores está disponível por meio de /v1/audio/transcriptions. Ela não é
compatível com sessões de transcrição em tempo real.
Traduções
Para traduzir uma gravação de áudio concluída para o inglês, use /v1/audio/translations com whisper-1. Diferentemente da transcrição, que preserva o idioma original da gravação, esse endpoint retorna texto em inglês.
Traduzir á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 translation = await openai.audio.translations.create({ file: fs.createReadStream("fixtures/german.wav"), model: "whisper-1",});console.log(translation.text);
Para uma gravação de áudio em outro idioma, a resposta contém a tradução para o inglês:
Hello, my name is Wolfgang and I come from Germany. Where are you heading today?
Esse endpoint oferece suporte apenas à tradução para o inglês.
Idiomas compatíveis
Use languages com gpt-transcribe quando souber quais idiomas de entrada esperar. 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 variantes regionais de zh, como zh-cn, zh-tw e zh-hk.
A API rejeita códigos de idioma incompatíveis ou com formatação incorreta. A resposta também identifica 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 de acordo com o idioma. Os modelos existentes que aceitam uma indicação de idioma usam language em vez de languages.
Marcas de tempo
Use whisper-1 quando precisar de marcas de tempo por palavra ou segmento. O parâmetro timestamp_granularities[] retorna dados estruturados de marcas de tempo para legendagem e edição de vídeo.
O parâmetro timestamp_granularities[] é compatível apenas com whisper-1.
Entradas mais longas
A API de transcrições aceita arquivos de até 25 MB. Para gravações maiores, use um formato de áudio comprimido ou divida o arquivo em blocos de 25 MB ou menos. Evite dividir no meio de uma frase, pois isso pode remover contexto e reduzir a precisão.
A OpenAI não oferece garantias sobre a usabilidade ou a segurança de software de terceiros como o PyDub.
Criação de prompts
Use um prompt para melhorar o reconhecimento de nomes, siglas, formatação ou vocabulário específico da gravação. Com gpt-transcribe, combine o prompt com os parâmetros keywords e languages apresentados em Adicionar contexto à transcrição.
As integrações existentes com gpt-4o-transcribe e gpt-4o-mini-transcribe também oferecem suporte ao uso de prompts. gpt-4o-transcribe-diarize não oferece suporte a prompts.
Os prompts podem ser úteis nos seguintes cenários:
Transcrever corretamente nomes de produtos, termos técnicos e siglas.
Aproveitar o contexto de um trecho anterior de uma gravação mais longa.
Preservar a pontuação, o uso de maiúsculas e minúsculas e as palavras de preenchimento.
Selecionar um sistema de escrita preferencial para um idioma.
Para whisper-1, os prompts têm um limite de 224 tokens e oferecem menos controle que o modelo de transcrição recomendado. Consulte Como melhorar a confiabilidade se o seu fluxo de trabalho exigir o Whisper.
Transcrições em streaming
A transcrição de arquivos pode transmitir texto parcial em streaming enquanto o modelo processa uma gravação concluída. Isso não exige uma sessão Realtime.
Streaming da transcrição de uma gravação de áudio 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 e, em seguida, retorna a transcrição completa em um evento final transcript.text.done. Para transcrições com identificação de falantes usando response_format="diarized_json", o modelo de diarização também emite um evento transcript.text.segment sempre que finaliza um segmento.
Para 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 oferecem suporte a streaming de arquivos.
whisper-1 não oferece esse suporte.
Streaming da transcrição de uma gravação de áudio em andamento
Para áudio ao vivo de um microfone, chamada ou transmissão de mídia, use o guia de Transcrição em tempo real em vez do procedimento de streaming de arquivos descrito acima. Ele aborda o fluxo atual de sessões de transcrição e o procedimento recomendado para tempo real com gpt-live-transcribe.
Como melhorar a confiabilidade
Se você usa whisper-1 para marcações de tempo, legendas ou tradução, estas técnicas podem melhorar o reconhecimento de palavras incomuns e siglas. Para novas implementações de transcrição de uso geral, comece com gpt-transcribe e use o contexto de transcrição em vez dessas técnicas.
O primeiro método consiste em usar o parâmetro opcional prompt para fornecer um dicionário com as grafias corretas.
O Whisper não segue instruções como um modelo de texto de uso geral e aceita prompts de até 224 tokens.
Embora aumente a confiabilidade, essa técnica tem um limite de 224 tokens. Por isso, sua lista de SKUs precisa ser relativamente pequena para que a solução seja escalável.
O segundo método usa um modelo de texto para fazer o pós-processamento da transcrição.
Forneça instruções por meio da 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);
Um modelo de texto pode corrigir erros de ortografia e lidar com listas de termos maiores do que as que cabem na janela de prompt de 224 tokens do Whisper. Compare as correções com o áudio original para evitar alterar o que a pessoa disse.