Usa la transcripción de archivos cuando tengas una grabación terminada o una solicitud con audio de duración definida. Sube el audio para recibir la transcripción final o para recibir el texto de forma progresiva mientras el modelo procesa el archivo.
Empieza con gpt-transcribe. Es el modelo recomendado para transcribir grabaciones de voz en su idioma original. Los ejemplos especializados que aparecen más adelante usan modelos obsoletos para identificar a los hablantes, obtener marcas de tiempo por palabra y generar subtítulos en distintos formatos.
whisper-1, gpt-4o-transcribe, gpt-4o-mini-transcribe,
gpt-4o-transcribe-diarize y /v1/audio/translations están obsoletos y
dejarán de estar disponibles el 26 de febrero de 2027. Consulta el aviso de retirada y elige un flujo de trabajo de transcripción vigente. Los ejemplos especializados que aparecen a continuación muestran las funciones que seguirán disponibles para las integraciones existentes hasta esa fecha.
Los archivos pueden tener un tamaño máximo de 25 MB. Los formatos de entrada compatibles son mp3, mp4, mpeg, mpga, m4a, wav y webm.
Si todavía estás recibiendo audio de un micrófono, una llamada o una transmisión multimedia, usa la transcripción en tiempo real.
Inicio rápido
Transcripciones
Envía el archivo de audio a /v1/audio/transcriptions con gpt-transcribe.
Transcribir audio
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);
Cuando el modelo no puede determinar el idioma con suficiente certeza, devuelve "languages": []. Consulta la referencia de la API de audio para ver todos los campos de la solicitud y de la respuesta.
Agregar contexto a la transcripción
Usa prompt, keywords y languages con gpt-transcribe para mejorar la transcripción de términos especializados y de audio en varios idiomas.
Agregar contexto e indicar los 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)
Usa prompt para proporcionar contexto no estructurado sobre la grabación.
Usa keywords para indicar los términos exactos que esperas escuchar.
Usa languages para indicar los idiomas que esperas en el audio de entrada.
Las palabras clave sirven de referencia y no tienen que aparecer en la transcripción. Incluye solo términos relevantes y evalúa si mejoran la precisión sin que aparezcan términos que nadie pronunció.
En gpt-transcribe, languages reemplaza al campo singular language. No envíes ambos campos. Escribe cada palabra clave en una sola línea y no incluyas <, >, un retorno de carro ni un salto de línea. La API rechaza toda la solicitud si encuentra alguno de estos caracteres o si prompt supera el límite de longitud del modelo.
Identificación de hablantes por segmento
Hasta el 26 de febrero de 2027, las integraciones existentes pueden usar el modelo obsoleto gpt-4o-transcribe-diarize para identificar quién habla en cada parte de una grabación. Este modelo se especializa en etiquetar a los hablantes y no se recomienda para la transcripción habitual de archivos.
Solicita el formato de respuesta diarized_json para recibir segmentos con los metadatos speaker, start y end. Si el audio dura más de 30 segundos, asigna a chunking_strategy el valor "auto" o una configuración de detección de actividad de voz.
Si lo deseas, puedes proporcionar hasta cuatro muestras breves de audio mediante known_speaker_names[] y known_speaker_references[] para asociar los segmentos con hablantes conocidos. Usa muestras de referencia de entre 2 y 10 segundos en cualquiera de los formatos de entrada admitidos para el archivo de audio principal. Si envías datos de formulario multiparte, codifica las muestras como URL de datos.
Identificar a los hablantes en la grabación de una reunión
Cuando usas stream=true, las respuestas con etiquetas de hablante emiten eventos transcript.text.segment cada vez que se completa un segmento. Los eventos transcript.text.delta incluyen un campo segment_id, pero estas actualizaciones parciales no indican quién habla. El modelo asigna un hablante solo cuando finaliza el segmento.
Puedes obtener etiquetas de hablante mediante /v1/audio/transcriptions. Las sesiones de transcripción en tiempo real no admiten esta función.
Traducciones
El punto de acceso obsoleto /v1/audio/translations usa whisper-1 para traducir al inglés una grabación de audio terminada. Seguirá disponible hasta el 26 de febrero de 2027. La transcripción conserva el idioma original de la grabación, mientras que este punto de acceso solo devuelve texto en inglés.
Migra a la traducción en tiempo real con gpt-realtime-translate en /v1/realtime/translations. Para ello, necesitas una sesión de traducción, una transmisión de audio de entrada y eventos de traducción. Cambiar solo el ID del modelo en una solicitud a /v1/audio/translations no completa la migración.
Idiomas compatibles
Usa languages con gpt-transcribe cuando sepas qué idiomas esperar en el audio de entrada. La API admite los siguientes formatos de códigos de idioma.
Códigos ISO 639-1, como en, es y fr.
Algunos códigos ISO 639-3, como eng, spa, yue y cmn.
Códigos de variantes regionales de zh, como zh-cn, zh-tw y zh-hk.
La API rechaza los códigos de idioma que no admite o cuyo formato es incorrecto. La respuesta también indica todos los idiomas que el modelo puede detectar con suficiente certeza.
Para whisper-1, consulta la lista de idiomas de Whisper. Whisper admite 98 idiomas, aunque la precisión varía según el idioma. Los modelos existentes que permiten indicar un solo idioma usan language en lugar de languages.
Marcas de tiempo
Hasta el 26 de febrero de 2027, las integraciones existentes pueden usar el modelo obsoleto whisper-1 para obtener marcas de tiempo por palabra o por segmento. El parámetro timestamp_granularities[] devuelve marcas de tiempo como datos estructurados para crear subtítulos y editar videos.
El parámetro timestamp_granularities[] solo es compatible con whisper-1.
Grabaciones largas
La API de transcripciones admite archivos de hasta 25 MB. Para grabaciones de mayor tamaño, usa un formato de audio comprimido o divide el archivo en fragmentos de 25 MB o menos. Evita cortar una oración por la mitad, ya que se puede perder contexto y reducir la precisión.
OpenAI no ofrece garantías sobre la facilidad de uso ni la seguridad del software de terceros como PyDub.
Uso de prompts
Usa un prompt para que el modelo reconozca mejor los nombres, las siglas, el formato o el vocabulario específico de la grabación. Con gpt-transcribe, combina el prompt con los campos keywords y languages que se muestran en Agregar contexto a la transcripción.
Las integraciones existentes con gpt-4o-transcribe y gpt-4o-mini-transcribe también admiten prompts. gpt-4o-transcribe-diarize no admite prompts.
Los prompts pueden ayudarte a realizar estas tareas.
Transcribir correctamente nombres de productos, términos técnicos y siglas.
Aprovechar el contexto de un fragmento anterior de una grabación larga.
Conservar la puntuación, el uso de mayúsculas y minúsculas y las muletillas.
Elegir el sistema de escritura preferido para un idioma.
En whisper-1, los prompts tienen un límite de 224 tokens y ofrecen menos control que el modelo de transcripción recomendado. Si tu flujo de trabajo requiere Whisper, consulta Mejorar la confiabilidad.
Transmisión progresiva de transcripciones
La transcripción de archivos permite recibir texto parcial mientras el modelo procesa una grabación terminada. Para ello no necesitas una sesión en tiempo real.
Recibir la transcripción progresiva de una grabación terminada
Configura stream=true con gpt-transcribe. La API de transcripciones devuelve eventos de transcripción a medida que el modelo transcribe cada parte de la grabación.
El modelo emite eventos transcript.text.delta a medida que transcribe el audio y luego devuelve la transcripción completa en un evento final transcript.text.done. En las transcripciones con etiquetas de hablante que usan response_format="diarized_json", el modelo de identificación de hablantes también emite un evento transcript.text.segment cada vez que finaliza un segmento.
Con gpt-transcribe, el evento final también incluye los idiomas detectados.
Las integraciones existentes con gpt-4o-transcribe, gpt-4o-mini-transcribe y
gpt-4o-transcribe-diarize también permiten recibir de forma progresiva la transcripción de un archivo. whisper-1 no admite esta función.
Recibir la transcripción de una grabación en curso
Para audio en vivo de un micrófono, una llamada o una transmisión multimedia, usa la guía de transcripción en tiempo real en lugar del procedimiento anterior para archivos. La guía explica cómo funcionan actualmente las sesiones de transcripción y cómo transcribir en tiempo real con el modelo recomendado, gpt-live-transcribe.
Mejorar la confiabilidad
Si usas whisper-1 para obtener marcas de tiempo, generar subtítulos o traducir, estas técnicas pueden mejorar el reconocimiento de palabras poco frecuentes y siglas. Para nuevas integraciones de transcripción de uso general, empieza con gpt-transcribe y usa el contexto de transcripción.
El primer método consiste en usar el parámetro opcional prompt para proporcionar un diccionario con la ortografía correcta de los términos.
Whisper no sigue instrucciones como lo hace un modelo de texto de uso general y admite prompts de hasta 224 tokens.
Aunque esta técnica mejora la confiabilidad, el límite de 224 tokens exige que tu lista de SKU sea relativamente corta para que la solución pueda usarse a mayor escala.
El segundo método consiste en procesar la transcripción con un modelo de texto una vez que está lista.
Proporciona instrucciones mediante la variable system_prompt. Al igual que en el prompt de transcripción, puedes incluir nombres de empresas y productos.
Posprocesamiento
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)
Un modelo de texto puede corregir errores ortográficos y procesar listas de términos más largas de lo que permite el límite de 224 tokens de los prompts de Whisper. Compara las correcciones con el audio original para evitar que alteren lo que dijo el hablante.