Usa la transcripción de archivos cuando tengas una grabación completa o una solicitud de audio acotada. Sube el audio y recibe una transcripción final, o recibe texto en streaming mientras el modelo procesa el archivo.
Empieza con gpt-transcribe. Este es el modelo recomendado para transcribir voz grabada en su idioma original. Usa un modelo especializado solo si necesitas etiquetas de hablantes, marcas de tiempo por palabra, formatos de subtítulos o traducción al inglés.
Los archivos pueden tener hasta 25 MB. Los formatos de entrada admitidos son mp3, mp4, mpeg, mpga, m4a, wav y webm.
Para audio que sigue llegando desde un micrófono, una llamada o una transmisión multimedia, usa
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 predecir el idioma de forma confiable, devuelve "languages": []. Consulta la referencia de la API de audio para ver todos los campos de solicitud y 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 audio multilingüe:
Agregar contexto e indicaciones 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)
Usa prompt para proporcionar contexto no estructurado sobre la grabación.
Usa keywords para indicar los términos literales que esperas escuchar.
Usa languages para indicar los idiomas de entrada esperados.
Las palabras clave sirven como orientación; no son contenido obligatorio en la salida. Incluye solo términos relevantes y evalúa si mejoran la precisión sin hacer que aparezcan términos que no se dijeron.
Para gpt-transcribe, languages reemplaza al campo singular language. No envíes ambos campos. Mantén cada palabra clave en una sola línea y no incluyas <, >, un retorno de carro ni un salto de línea. La API rechaza la solicitud completa cuando encuentra uno de estos caracteres o cuando prompt supera el límite de longitud del modelo.
Diarización de hablantes
Usa gpt-4o-transcribe-diarize solo cuando necesites identificar quién habla en distintas partes de una grabación. Este modelo especializado en etiquetar hablantes no es el modelo recomendado para la transcripción habitual de archivos.
Solicita el formato de respuesta diarized_json para recibir segmentos con los metadatos speaker, start y end. Para audios de más de 30 segundos, establece chunking_strategy en "auto" o en una configuración de detección de actividad de voz.
De forma opcional, puedes proporcionar hasta cuatro referencias de audio breves con known_speaker_names[] y known_speaker_references[] para asociar segmentos con hablantes conocidos. Proporciona clips de referencia de entre 2 y 10 segundos en cualquier formato de entrada admitido para subir el audio principal; codifícalos como URL de datos cuando uses datos de formulario multiparte.
Cuando stream=true, las respuestas con etiquetas de hablantes emiten eventos transcript.text.segment cada vez que se completa un segmento. Los eventos transcript.text.delta incluyen un campo segment_id, pero los deltas no incluyen asignaciones parciales de hablantes. El modelo asigna un hablante solo cuando finaliza el segmento.
El etiquetado de hablantes está disponible a través de /v1/audio/transcriptions. No se
admite en las sesiones de transcripción en tiempo real.
Traducciones
Para traducir al inglés una grabación de audio completa, usa /v1/audio/translations con whisper-1. A diferencia de la transcripción, que conserva el idioma original de la grabación, este punto de acceso devuelve texto en inglés.
Traducir 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 translation = await openai.audio.translations.create({ file: fs.createReadStream("fixtures/german.wav"), model: "whisper-1",});console.log(translation.text);
Para una grabación de audio en otro idioma, la respuesta contiene la traducción al inglés:
Hello, my name is Wolfgang and I come from Germany. Where are you heading today?
Este punto de acceso solo admite la traducción al inglés.
Idiomas admitidos
Usa languages con gpt-transcribe cuando sepas qué idiomas de entrada esperar. Los formatos de códigos de idioma admitidos incluyen:
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 configuración regional de zh, como zh-cn, zh-tw y zh-hk.
La API rechaza los códigos de idioma no admitidos o con un formato incorrecto. La respuesta también identifica los idiomas que el modelo puede detectar de forma confiable.
Para whisper-1, consulta la lista de idiomas de Whisper. Whisper admite 98 idiomas, pero la precisión varía según el idioma. Los modelos existentes que aceptan una indicación de un solo idioma usan language en lugar de languages.
Marcas de tiempo
Usa whisper-1 cuando necesites marcas de tiempo por palabra o segmento. El parámetro timestamp_granularities[] devuelve datos estructurados de marcas de tiempo para crear subtítulos y editar videos.
El parámetro timestamp_granularities[] solo se admite con whisper-1.
Entradas más largas
La API de transcripciones acepta archivos de hasta 25 MB. Para grabaciones más grandes, usa un formato de audio comprimido o divide el archivo en fragmentos de 25 MB o menos. Evita los cortes a mitad de una oración, ya que pueden eliminar contexto y reducir la precisión.
OpenAI no ofrece garantías sobre la usabilidad ni la seguridad de software de terceros como PyDub.
Diseño de prompts
Usa un prompt para mejorar el reconocimiento de nombres, siglas, formato o vocabulario específico de la grabación. Con gpt-transcribe, combina el prompt con keywords y languages, como se muestra en Agregar contexto a la transcripción.
Las integraciones existentes de gpt-4o-transcribe y gpt-4o-mini-transcribe también admiten el uso de prompts. gpt-4o-transcribe-diarize no admite prompts.
Los prompts pueden ser útiles en situaciones como las siguientes:
Transcribir correctamente nombres de productos, términos técnicos y siglas.
Conservar el contexto de un fragmento anterior de una grabación más larga.
Conservar la puntuación, el uso de mayúsculas y las muletillas.
Seleccionar el sistema de escritura preferido para un idioma.
Para whisper-1, los prompts tienen un límite de 224 tokens y ofrecen menos control que el modelo de transcripción recomendado. Consulta Mejorar la confiabilidad si tu flujo de trabajo requiere Whisper.
Transcripciones en streaming
La transcripción de archivos permite transmitir texto parcial en streaming mientras el modelo procesa una grabación finalizada. Esto no requiere una sesión de Realtime.
Transmitir en streaming la transcripción de una grabación de audio finalizada
Establece 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. Para las transcripciones con etiquetas de hablante que usan response_format="diarized_json", el modelo de diarización también emite un evento transcript.text.segment cada vez que finaliza un segmento.
Para 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 admiten streaming de archivos.
whisper-1 no lo admite.
Transmitir en streaming la transcripción de una grabación de audio 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 de streaming orientado a archivos descrito anteriormente. La guía explica el flujo actual de las sesiones de transcripción y el procedimiento recomendado para tiempo real con gpt-live-transcribe.
Mejorar la confiabilidad
Si usas whisper-1 para marcas de tiempo, subtítulos o traducción, estas técnicas pueden mejorar el reconocimiento de palabras poco comunes y siglas. Para nuevas implementaciones de transcripción de uso general, comienza con gpt-transcribe y usa contexto de transcripción en su lugar.
El primer método consiste en usar el parámetro opcional prompt para proporcionar un diccionario con las grafías correctas.
Whisper no sigue instrucciones como un modelo de texto de uso general y acepta prompts de hasta 224 tokens.
Aunque mejora la confiabilidad, esta técnica está limitada a 224 tokens, por lo que tu lista de SKU debe ser relativamente pequeña para que sea una solución escalable.
El segundo método usa un modelo de texto para posprocesar la transcripción.
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);
Un modelo de texto puede corregir errores ortográficos y manejar listas de terminología más largas que las que permite la ventana de 224 tokens del prompt de Whisper. Compara las correcciones con el audio original para evitar cambiar lo que dijo el hablante.