Skip to main content

Reconocimiento de voz no en tiempo real

Los modelos de reconocimiento de voz no en tiempo real convierten audio grabado en texto. Admiten reconocimiento multilingüe, reconocimiento de canto, rechazo de ruido y diarización de hablantes, lo que los hace adecuados para transcripción de reuniones, análisis de llamadas, generación de subtítulos y escenarios similares.

Visión general

Transcriba archivos de audio y video grabados en lotes mediante tareas asíncronas.
  • La mejora de contexto aumenta la precisión del reconocimiento mediante un contexto configurable.
  • Las palabras clave personalizadas mejoran la precisión de reconocimiento de nombres propios mediante una lista de palabras predefinida.
  • Las funciones configurables incluyen diarización de hablantes, filtrado de palabras sensibles y marcas de tiempo a nivel de oración o palabra.
  • La transcripción asíncrona admite un solo archivo de audio de hasta 12 horas de duración y hasta 2 GB de tamaño.
  • Se admite cualquier frecuencia de muestreo, junto con formatos de audio y video convencionales como AAC, WAV y MP3.
Para escenarios en tiempo real como subtítulos en vivo, reuniones en línea y asistentes de voz, utilice Reconocimiento de voz en tiempo real. Para obtener orientación sobre la selección de modelos, consulte Voz a texto.

Requisitos previos

Inicio rápido

Los siguientes ejemplos utilizan qwen-audio-3.1-asr-flash-filetrans y qwen-audio-3.1-asr-flash. El primero usa llamadas asíncronas: configure X-DashScope-Async: enable al enviar la solicitud y luego consulte el resultado de la tarea. El segundo usa llamadas síncronas y admite respuestas con o sin streaming.Si llama a una implementación dedicada del servicio de modelo y recibe el error current user api does not support asynchronous calls, la implementación admite únicamente llamadas síncronas. Cambie el encabezado de la solicitud a X-DashScope-Async: disable y mantenga el resto de la llamada sin cambios.
  • Qwen-Audio-ASR-Filetrans
  • Qwen-Audio-ASR
Dado que los archivos de audio y video pueden ser grandes, la API de transcripción de archivos utiliza llamadas asíncronas: envíe una tarea, consulte la API de consulta para verificar su estado y recupere el resultado del reconocimiento una vez completada la tarea.
  • cURL
  • Python
  • Java
Cuando llama a la API con cURL, primero envíe la tarea para obtener un task_id y luego consulte el resultado de la tarea usando ese ID.
  • Enviar una tarea
  • Obtener el resultado de la tarea
  • Descargar el resultado de reconocimiento
La siguiente configuración corresponde a la región de Singapore. Reemplace {WorkspaceId} con su ID de espacio de trabajo real. La configuración varía según la región.
curl -X POST 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/asr/transcription' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-Async: enable" \
-d '{
    "model": "qwen-audio-3.1-asr-flash-filetrans",
    "input": {
        "file_urls": [
            "{YOUR_AUDIO_URL}"
        ]
    },
    "parameters": {
        "channel_id": [0],
        "language_hints": ["zh", "en"]
    }
}'
  • Resultado de reconocimiento
{
    "file_url": "{YOUR_AUDIO_URL}",
    "properties": {
        "audio_format": "pcm_s16le",
        "channels": [
            0
        ],
        "original_sampling_rate": 16000,
        "original_duration_in_milliseconds": 3834
    },
    "transcripts": [
        {
            "channel_id": 0,
            "content_duration_in_milliseconds": 2480,
            "text": "Hello World, this is the Alibaba Speech Lab.",
            "sentences": [
                {
                    "begin_time": 760,
                    "end_time": 3240,
                    "text": "Hello World, this is the Alibaba Speech Lab.",
                    "sentence_id": 1,
                    "words": [
                        {
                            "begin_time": 760,
                            "end_time": 1000,
                            "text": "Hello",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 1000,
                            "end_time": 1120,
                            "text": " World",
                            "punctuation": ","
                        },
                        {
                            "begin_time": 1400,
                            "end_time": 1920,
                            "text": "this is",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 1920,
                            "end_time": 2520,
                            "text": "the Alibaba",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 2520,
                            "end_time": 2840,
                            "text": "Speech",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 2840,
                            "end_time": 3240,
                            "text": "Lab",
                            "punctuation": "."
                        }
                    ]
                }
            ]
        }
    ]
}

Funciones avanzadas

Procesar archivos de audio largos

El reconocimiento de voz no en tiempo real admite la transcripción asíncrona de archivos de audio largos. Esto es adecuado para escenarios como minutas de reuniones, transcripciones de entrevistas y reproducción de llamadas. Limitaciones:
  • Qwen-Audio-ASR-Filetrans/Fun-ASR / Qwen3-ASR-Filetrans / Paraformer: un solo archivo de audio puede tener hasta 2 GB de tamaño y 12 horas de duración.
  • Qwen-Audio-ASR / Fun-ASR-Flash: un solo archivo de audio puede tener hasta 2 GB de tamaño y 5 minutos de duración.
  • Qwen3-ASR-Flash: un solo archivo de audio puede tener hasta 10 MB de tamaño y 5 minutos de duración. Para audios más largos, utilice Qwen-Audio-ASR-Filetrans.
  • Cuando la diarización de hablantes está habilitada: mantenga la duración del audio dentro de 2 horas. Un audio más largo puede provocar fallos en el reconocimiento o tiempos de espera agotados. Para obtener más información, consulte Diarización de hablantes.
Flujo de llamada: la transcripción de audio largo utiliza un modelo de tarea asíncrona con tres pasos:
  1. Envíe la tarea de transcripción y obtenga un task_id.
  2. Sondee la API de consulta para obtener el estado de la tarea o use el método de espera del SDK para bloquear hasta que la tarea se complete.
  3. Una vez completada la tarea, descargue el JSON del resultado de reconocimiento desde la URL devuelta.
Para ver código de ejemplo, consulte el código de Inicio rápido en Reconocimiento de voz no en tiempo real.

Salida por secuencias

Qwen-Audio-ASR/Fun-ASR-Flash/Qwen3-ASR-Flash admiten salida por streaming: devuelven resultados intermedios a medida que avanza el reconocimiento. Esto es adecuado para escenarios que requieren retroalimentación de progreso en tiempo real. Para conocer el formato de solicitud y respuesta HTTP SSE de Qwen-Audio-ASR y Fun-ASR-Flash, consulte Qwen-Audio-ASR HTTP API y Fun-ASR-Flash HTTP API. Los modelos de transcripción asíncrona como Qwen-Audio-ASR-Filetrans, Fun-ASR, Qwen3-ASR-Filetrans y Paraformer no admiten salida en streaming. Obtenga el resultado final mediante el sondeo de la tarea (para más información, consulte Procesamiento de archivos de audio largos). Cómo habilitar:
  • DashScope Python SDK: establezca el parámetro stream en True.
  • DashScope Java SDK: llame a la API streamCall.
  • DashScope HTTP: establezca el encabezado X-DashScope-SSE en enable.

Mejorar la precisión con palabras clave

Las palabras clave mejoran la precisión del reconocimiento de sustantivos propios específicos del dominio, como nombres, topónimos y nombres de productos. Para obtener detalles sobre cómo crear y utilizar palabras clave, consulte Mejorar la precisión del reconocimiento. Diferentes SDK utilizan distintas convenciones de nomenclatura para estos parámetros, como claves de diccionario, propiedades de objeto o métodos. Para obtener la asignación completa de campos, consulte la referencia de la API de cada SDK.

Mejorar la precisión con la mejora de contexto

La mejora de contexto pasa el historial de conversaciones al modelo ASR, lo que mejora significativamente la precisión de la transcripción de sustantivos propios. Para obtener detalles sobre cómo utilizar esta función y ver ejemplos de resultados, consulte Mejora de contexto.

Diarización de hablantes

qwen-audio-3.1-asr-flash habilita la diarización de hablantes con speaker_diarization_enabled. Para conocer sus parámetros y estructura de respuesta, consulte API HTTP. La diarización de hablantes identifica automáticamente a los distintos hablantes en el audio y etiqueta cada oración en el resultado de la transcripción con una etiqueta de hablante. Esto es adecuado para escenarios como reuniones multipartitas y grabaciones de entrevistas. La siguiente configuración y ejemplo se aplican a: las series de modelos Qwen-Audio-ASR-Filetrans, Fun-ASR y Paraformer. Cómo habilitar: establezca el parámetro diarization_enabled en true en la solicitud de API. En el resultado, cada oración incluye un campo speaker_id que identifica al hablante. Estructura de retorno de ejemplo (extracto):
{
  "transcripts": [
    {
      "sentences": [
        { "begin_time": 100, "end_time": 3820, "text": "Hello, let's discuss the project progress today.", "speaker_id": 0 },
        { "begin_time": 3820, "end_time": 6500, "text": "Sure, let me give a quick report first.", "speaker_id": 1 }
      ]
    }
  ]
}
Diferentes SDK utilizan distintas convenciones de nomenclatura para estos campos, como claves de diccionario, propiedades de objeto o métodos. Para obtener la asignación completa de campos, consulte la referencia de la API de cada SDK.
Cuando la diarización de hablantes está habilitada, mantenga la duración del audio dentro de 2 horas. Un audio más largo puede provocar fallos en el reconocimiento o tiempos de espera agotados. Para conocer los límites de longitud de audio cuando la diarización está deshabilitada, consulte Procesamiento de archivos de audio largos. La diarización de hablantes solo admite audio mono.
Para las definiciones completas de los campos, consulte la referencia de la API.

Filtrado de palabras sensibles

El filtrado de palabras sensibles reemplaza o elimina palabras sensibles en el resultado del reconocimiento. Esto es adecuado para escenarios como inspección de calidad de servicio al cliente, cumplimiento de contenido y moderación de subtítulos. Modelos admitidos: las series de modelos Qwen-Audio-ASR-Filetrans, Fun-ASR y Paraformer. Comportamiento predeterminado: cuando no se pasa el parámetro special_word_filter, el sistema utiliza la lista de palabras sensibles de Model Studio integrada. Las palabras coincidentes se reemplazan por una cadena de igual longitud compuesta por *. Configuración personalizada: special_word_filter es un objeto JSON con tres subcampos:
  • filter_with_signed.word_list: un arreglo de cadenas de palabras sensibles que se reemplazarán por una cadena de igual longitud compuesta por *. Por ejemplo, con ["test"], "Por favor ayúdame a probar esto" se convierte en "Por favor ayúdame a **** esto".
  • filter_with_empty.word_list: un arreglo de cadenas de palabras sensibles que se eliminarán por completo del resultado. Por ejemplo, con ["start"], "¿El juego está a punto de comenzar ahora?" se convierte en "¿El juego está a punto de ahora?".
  • system_reserved_filter: un valor booleano cuyo valor predeterminado es true. Controla si también se aplica la lista integrada de palabras sensibles del sistema, la cual surte efecto junto con su lista personalizada.
Ejemplo de configuración:
{
  "special_word_filter": {
    "filter_with_signed": {
      "word_list": ["test"]
    },
    "filter_with_empty": {
      "word_list": ["start", "happen"]
    },
    "system_reserved_filter": true
  }
}
Diferentes SDK utilizan distintas convenciones de nomenclatura para estos parámetros, como claves de diccionario, propiedades de objeto o métodos. Para obtener la asignación completa de campos, consulte la referencia de la API.

Obtener marcas de tiempo

Para conocer la estabilidad de las marcas de tiempo y las rutas de campos en las respuestas por streaming de Flash, consulte Qwen-Audio-ASR HTTP API y Fun-ASR-Flash HTTP API. El reconocimiento de voz no en tiempo real puede generar marcas de tiempo en el resultado de la transcripción, lo cual facilita la generación de subtítulos, el resaltado de palabras clave y la edición de audio y video. Qwen-Audio-ASR-Filetrans, Qwen-Audio-ASR, Fun-ASR, Fun-ASR-Flash, Qwen3-ASR-Filetrans y Paraformer admiten marcas de tiempo, pero el comportamiento predeterminado y el método de control varían según el modelo:
  • Qwen-Audio-ASR-Filetrans/Qwen-Audio-ASR/Fun-ASR/Fun-ASR-Flash/Paraformer: las marcas de tiempo están habilitadas permanentemente y no se pueden desactivar.
  • Qwen3-ASR-Filetrans: solo la llamada asíncrona de DashScope admite marcas de tiempo, y estas están habilitadas permanentemente. Utilice el parámetro de solicitud enable_words para controlar el nivel de las marcas de tiempo: configúrelo en false (predeterminado) para devolver marcas de tiempo a nivel de oración, o en true para devolver marcas de tiempo a nivel de palabra. Las marcas de tiempo a nivel de palabra solo admiten los siguientes idiomas: chino, inglés, japonés, coreano, alemán, francés, español, italiano, portugués y ruso. No se garantiza la precisión para otros idiomas.
Las marcas de tiempo están en milisegundos y se devuelven en dos niveles:
  • Nivel de oración: sentences[].begin_time y sentences[].end_time marcan el tiempo de inicio y fin de cada oración en el audio.
  • Nivel de palabra: el arreglo sentences[].words[], donde cada elemento contiene begin_time, end_time y text (el texto de dicha palabra).
Estructura de retorno de ejemplo (extracto de la API de tareas asíncronas de DashScope):
{
  "transcripts": [{
    "sentences": [{
      "begin_time": 100,
      "end_time": 3820,
      "text": "Hello, let's discuss the project progress today.",
      "words": [
        { "begin_time": 100, "end_time": 596, "text": "Hello," },
        { "begin_time": 596, "end_time": 844, "text": "let's" }
      ]
    }]
  }]
}
La marca de tiempo dentro del audio es un número entero en milisegundos (como 100). No la confunda con el end_time a nivel de tarea (el tiempo de finalización de la tarea, una cadena de fecha como "2024-09-12 15:11:40.903"). Son campos diferentes.
Diferentes SDK utilizan distintas convenciones de nomenclatura para estos campos, como claves de diccionario, propiedades de objeto o métodos. Para obtener la asignación completa de campos, consulte la referencia de la API.

Aplicar en producción

Cuando aplica el reconocimiento de voz no en tiempo real en producción, las siguientes prácticas recomendadas mejoran la calidad del reconocimiento y la estabilidad del sistema.

Escenarios de alta concurrencia: use devoluciones de llamada en lugar de sondeo

Para tareas de transcripción asíncrona (Qwen-Audio-ASR-Filetrans, Fun-ASR, Qwen3-ASR-Filetrans y Paraformer), usted envía la tarea a través de POST /api/v1/services/audio/asr/transcription y generalmente obtiene el resultado llamando periódicamente a la API de consulta GET /api/v1/tasks/{task_id}. Esta API de consulta tiene un valor predeterminado de 20 QPS y escala hasta 100 QPS. En escenarios por lotes de alta concurrencia, el sondeo frecuente activa fácilmente la limitación de velocidad. Configure las notificaciones de devolución de llamada a través de EventBridge. Cuando una tarea se completa, Model Studio envía automáticamente un evento dashscope:System:AsyncTaskFinish al destino configurado (un endpoint HTTP/HTTPS o un tema de RocketMQ). Una vez que el consumidor recibe el evento, ya no necesita llamar a la API de consulta, lo que evita el riesgo de limitación por sondeos frecuentes. Para más información, consulte Configuración de notificaciones de devolución de llamada de EventBridge.

Modelos admitidos

  • Compatible: Qwen-Audio-ASR-Filetrans, Fun-ASR, Qwen3-ASR-Filetrans y Paraformer (todas las tareas de transcripción asíncrona).
  • No admitido: Qwen3-ASR-Flash (llamadas síncronas o en streaming, que no son tareas asíncronas).

Contenido del mensaje de devolución de llamada

Para los tres modelos, el cuerpo del mensaje de devolución de llamada tiene data.contain_result establecido en true, y data.output_result contiene directamente transcription_url. Después de recibir la devolución de llamada, el consumidor puede obtener el resultado de reconocimiento sin necesidad de llamar nuevamente a GET /api/v1/tasks/{task_id}. Sin embargo, la ruta y la estructura del campo de resultado difieren entre los tres modelos. Consulte la siguiente tabla.
Cuando escriba el consumidor, elija la ruta correcta para el modelo que utiliza. No codifique una sola ruta de forma rígida. En escenarios de fallo, data.output_result.output ya no contiene results/result; en su lugar, contiene los campos code y message. Compruebe primero data.task_status y luego lea el resultado.

Modelo

Parámetro de envío

Ruta del campo de resultado (basada en el cuerpo de la devolución de llamada)

Campo usage de

Qwen-Audio-ASR-Filetrans, Fun-ASR

input.file_urls (matriz; solo 1 URL por llamada)

data.output_result.output.results[ ].transcription_url (arreglo, una entrada por archivo, con subtask_status; también incluye task_metrics)

duration

Paraformer

input.file_urls (matriz; solo 1 URL por llamada)

Igual que Qwen-Audio-ASR-Filetrans/Fun-ASR: data.output_result.output.results[ ].transcription_url

duration

Qwen3-ASR-Filetrans

input.file_url (objeto único; solo 1 URL por llamada)

data.output_result.output.result.transcription_url (objeto único, sin results[ ] / task_metrics)

seconds

Notas de uso

Seguridad (entrega HTTP/HTTPS): en producción, verifique los campos de encabezado X-Eventbridge-Signature* en la solicitud de devolución de llamada antes de consumirla. De lo contrario, cualquier IP externa podría falsificar un evento AsyncTaskFinish e inyectar resultados de reconocimiento falsos. Configure también un tiempo de espera de recepción de al menos 5 segundos en el receptor. El método de entrega de RocketMQ no cuenta con firma a nivel de mensaje; su seguridad está garantizada por el mecanismo de autenticación de RocketMQ. Latencia de entrega: desde la finalización de la tarea (end_time) hasta que el destino de entrega (un endpoint HTTP/HTTPS o un tema de RocketMQ) recibe el mensaje, el retraso suele ser de aproximadamente 1 a 90 segundos. La latencia exacta depende de la carga en tiempo real de EventBridge. Idempotencia: el mismo evento puede entregarse varias veces debido a reintentos. Implemente un procesamiento idempotente en el consumidor, utilizando data.id o data.task_id de CloudEvents como clave de deduplicación.

Recomendaciones de producción

  • Alojamiento de archivos: cargue los archivos de audio en Alibaba Cloud OSS y llame a la API mediante URL. Evite cargar archivos locales (las llamadas con archivos locales tienen un límite de 100 QPS y no se pueden escalar).
  • Sondeo asíncrono: la transcripción de audio largo utiliza un modelo asíncrono. Establezca un intervalo de sondeo razonable (como de 2 a 5 segundos) para evitar consultas frecuentes que consuman su cuota. Para superar el límite de consulta de 20 a 100 QPS, cambie a notificaciones de devolución de llamada por eventos. Para más información, consulte Escenarios de alta concurrencia: uso de devoluciones de llamada en lugar de sondeo.
  • Manejo de errores: implemente un mecanismo de reintento robusto. Para tiempos de espera de red o errores temporales del lado del servidor (5xx), reintente con una estrategia de retroceso exponencial.
  • Reducción de ruido: para audio con ruido, procéselo previamente con una herramienta como FFmpeg antes de enviarlo para su reconocimiento.
  • Selección de modelo: Utilice Qwen-Audio-ASR para audios cortos de hasta 5 minutos. Para audios más largos o procesamiento asíncrono, utilice Qwen-Audio-ASR-Filetrans.

Modelos y regiones compatibles

  • Singapore
  • EE. UU. (Virginia)
  • China (Beijing)
Para llamar a los siguientes modelos, utilice una API Key para la región de Singapore:
  • Qwen-Audio-ASR-Filetrans: qwen-audio-3.1-asr-flash-filetrans, qwen-audio-3.0-asr-flash-filetrans
  • Qwen-Audio-ASR: qwen-audio-3.1-asr-flash, qwen-audio-3.0-asr-flash
  • Fun-ASR: fun-asr (versión estable)
  • Fun-ASR-Flash: fun-asr-flash-2026-06-15
  • Qwen3-ASR-Filetrans: qwen3-asr-flash-filetrans (versión estable)
  • Qwen3-ASR-Flash: qwen3-asr-flash (versión estable)

Referencia de API

FAQ

P: ¿Cómo proporciono una URL de audio accesible públicamente a la API?

Utilice Alibaba Cloud Object Storage Service (OSS). OSS proporciona almacenamiento altamente disponible y confiable, y le permite generar una URL de acceso público. Verifique que la URL generada sea accesible a través de la red pública: abra la URL en un navegador o con el comando curl para confirmar que el archivo de audio se descarga o reproduce (código de estado HTTP 200).

P: ¿Cómo verifico si el formato de audio cumple con los requisitos?

Use la herramienta de código abierto ffprobe para obtener rápidamente información detallada del audio:
# Query the container format (format_name), codec (codec_name), sample rate (sample_rate), and number of channels (channels) of the audio
ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 your_audio_file.mp3

P: ¿Cómo proceso el audio para cumplir con los requisitos del modelo?

Use la herramienta de código abierto FFmpeg para recortar o convertir el audio:
  • Recortar audio: extraer un clip de un archivo de audio largo
# -i: input file
# -ss 00:01:30: set the trim start time (start at 1 minute 30 seconds)
# -t 00:02:00: set the trim duration (trim 2 minutes)
# -c copy: copy the audio stream directly without re-encoding, which is fast
# output_clip.wav: output file
ffmpeg -i long_audio.wav -ss 00:01:30 -t 00:02:00 -c copy output_clip.wav
  • Convertir el formato Por ejemplo, convierta cualquier audio a un archivo WAV mono de 16 kHz y 16 bits:
# -i: input file
# -ac 1: set the number of channels to 1 (mono)
# -ar 16000: set the sample rate to 16000 Hz (16 kHz)
# -sample_fmt s16: set the sample format to 16-bit signed integer PCM
# output.wav: output file
ffmpeg -i input.mp3 -ac 1 -ar 16000 -sample_fmt s16 output.wav

P: ¿Cómo mejoro la precisión del reconocimiento?

Los siguientes factores afectan la precisión del reconocimiento. Revise cada uno y optimice en consecuencia. Factores principales:
  1. Calidad del audio: la calidad del dispositivo de grabación, la frecuencia de muestreo y el ruido ambiental afectan directamente la claridad del audio. Una entrada de audio de alta calidad es la base para un reconocimiento preciso.
  2. Características del hablante: el tono, la velocidad del habla, el acento y las diferencias dialectales (especialmente dialectos poco comunes o acentos marcados) aumentan la dificultad del reconocimiento.
  3. Idioma y vocabulario: la mezcla de idiomas, los términos técnicos o la jerga aumentan la dificultad del reconocimiento. Configure palabras clave para mejorar la precisión de los términos específicos del dominio.
Métodos de optimización:
  1. Mejorar la calidad del audio: use un micrófono de alto rendimiento, grabe a la frecuencia de muestreo recomendada y minimice el ruido ambiental y el eco.
  2. Adaptarse al hablante: para audio con acentos marcados o dialectos notorios, elija un modelo que admita el dialecto correspondiente.
  3. Configurar palabras clave: defina palabras clave para términos técnicos, nombres propios y palabras similares.