Todos los productos
Search
Centro de documentos

Alibaba Cloud Model Studio:Referencia de la API de reconocimiento de voz no en tiempo real (Qwen-ASR)

Última actualización: Oct 12, 2026

Parámetros de entrada y salida para el modelo Qwen-ASR. Llame a la API mediante el protocolo compatible con OpenAI o DashScope.

Tipos de conexión de modelos

Diferentes modelos admiten distintos tipos de conexión.

Modelo

Tipo de conexión

Qwen3-ASR-Flash-Filetrans

Solo se admite la invocación asíncrona de DashScope

Qwen3-ASR-Flash

Compatible con OpenAI y DashScope síncrono

Compatible con OpenAI

ImportanteLa región de EE. UU. no admite el modo compatible con OpenAI.

URL

Singapore

Dirección de solicitud HTTP: POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions

base_url para llamadas SDK: https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

EE. UU. (Virginia)

Si selecciona el ámbito de implementación de EE. UU., los recursos de cómputo de inferencia del modelo están restringidos a los Estados Unidos. Los datos estáticos se almacenan en la región seleccionada. Región admitida: EE. UU. (Virginia).

Dirección de solicitud HTTP: POST https://{WorkspaceId}.us-east-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions

base_url para llamadas SDK: https://{WorkspaceId}.us-east-1.maas.aliyuncs.com/compatible-mode/v1

China (Beijing)

Dirección de solicitud HTTP: POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/chat/completions

base_url para llamadas SDK: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

ImportanteAlibaba Cloud Model Studio ha lanzado dominios específicos del espacio de trabajo para las regiones China (Pekín) y Singapore. Los nuevos dominios dedicados ofrecen un rendimiento superior y una mayor estabilidad para las solicitudes de inferencia. Recomendamos migrar a los nuevos dominios:

  • China (Pekín): de dashscope.aliyuncs.com a {WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapur: de dashscope-intl.aliyuncs.com a {WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

Reemplace {WorkspaceId} con su ID de espacio de trabajo real. Los dominios existentes permanecen totalmente funcionales.

Cuerpo de la solicitud

modelstring(Obligatorio)

El nombre del modelo. Este parámetro solo aplica al modelo Qwen3-ASR-Flash.

messagesarray(Obligatorio)

La lista de mensajes.

Tipos de mensajes

Mensaje del sistema object (Opcional)

Se utiliza para proporcionar contexto para el reconocimiento de voz, como texto de fondo y glosarios de entidades. No admite la configuración de roles de modelo u otras indicaciones tradicionales del sistema. Si usa un mensaje del sistema, debe ser el primer mensaje en la lista de messages.

Propiedades

rolestring(Obligatorio)

Establecido en system.

Mensaje de usuario object(Obligatorio)

El mensaje enviado por el usuario al modelo.

Propiedades

contentarray(Obligatorio)

El contenido del mensaje del usuario. Solo se permite un mensaje en la matriz.

Propiedades

typestring(Obligatorio)

Establecido en input_audio, lo que indica que la entrada es audio.

input_audiostring(Obligatorio)

El audio que se va a reconocer. Para obtener más información sobre cómo usar este parámetro, consulte Ejemplos de solicitud.

En el modo compatible con OpenAI, el modelo Qwen3-ASR-Flash admite dos formatos de entrada: archivos codificados en Base64 y URL de archivos de audio accesibles a través de la red pública.

Cuando use un SDK, si el archivo de audio está almacenado en OSS, no se admiten las URL temporales que comienzan con oss://.

Cuando use una API RESTful, si el archivo de audio está almacenado en OSS, se admiten las URL temporales que comienzan con oss://. Nota:

Importante

  • Las URL temporales son válidas durante 48 horas. Después de su vencimiento, no se pueden utilizar. No las utilice en entornos de producción.
  • La API de credenciales de carga de archivos tiene un límite de tasa de 100 QPS y no se puede escalar. No la utilice en escenarios de producción, alta concurrencia o pruebas de estrés.
  • Para entornos de producción, recomendamos utilizar servicios de almacenamiento estables como Alibaba Cloud OSS para garantizar la disponibilidad de archivos a largo plazo y evitar problemas de limitación de tasa.

rolestring(Obligatorio)

El rol del mensaje de usuario. Configúrelo en user.

asr_optionsobject(Opcional)

Especifica si se deben habilitar ciertas funciones.

asr_options no es un parámetro estándar de OpenAI. Si utiliza un SDK de OpenAI, páselo a través de extra_body.

Propiedades

language string (Opcional) Sin valor predeterminado

Si se conoce el idioma del audio, puede especificarlo mediante este parámetro para mejorar la precisión del reconocimiento.

Solo puede especificar un idioma.

Si el idioma del audio es incierto o incluye múltiples idiomas (como una mezcla de chino, inglés, japonés y coreano), no especifique este parámetro.

Valores válidos

  • zh: Chino (Mandarín, Sichuanés, Minnan y Wu)
  • yue: Cantonés
  • en: Inglés
  • ja: Japonés
  • de: Alemán
  • ko: Coreano
  • ru: Ruso
  • fr: Francés
  • pt: Portugués
  • ar: Árabe
  • it: Italiano
  • es: Español
  • hi: Hindi
  • id: Indonesio
  • th: Tailandés
  • tr: Turco
  • uk: Ucraniano
  • vi: Vietnamita
  • cs: Checo
  • da: Danés
  • fil: Filipino
  • fi: Finés
  • is: Islandés
  • ms: Malayo
  • no: Noruego
  • pl: Polaco
  • sv: Sueco

enable_itnboolean (Opcional) Valor predeterminado: false

Especifica si se debe habilitar la Normalización Inversa de Texto (ITN). Esta función solo aplica a audio en chino e inglés.

  • true
  • false (predeterminado)

streamboolean(Opcional) Valor predeterminado: false

Especifica si se debe usar salida en streaming. Consulte Salida en streaming.

Valores válidos:

  • false: El modelo devuelve el contenido completo después de la generación.
  • true: El modelo genera y emite contenido simultáneamente. Se devuelve un bloque de datos (chunk) cada vez que se genera una parte del contenido. Debe leer estos bloques en tiempo real para ensamblar la respuesta completa.

Configúrelo en true para reducir el riesgo de tiempos de espera de solicitud.

stream_optionsobject(Opcional)

Los elementos de configuración para la salida en streaming. Este parámetro solo tiene efecto cuando stream está establecido en true.

Propiedades

include_usageboolean(Opcional) Valor predeterminado: false

Especifica si se debe incluir información de consumo de tokens en el último bloque de datos de la respuesta.

Valores válidos:

  • true
  • false (predeterminado)

Durante la salida en streaming, la información de consumo de tokens aparece únicamente en el último bloque de datos de la respuesta.

Ejemplos de solicitud

Entrada: URL del archivo de audio

SDK de Python

from openai import OpenAI
import os

try:
    client = OpenAI(
        # The API Key differs between the Singapore/US regions and the Beijing region. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
        # If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: api_key = "sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
        base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
    )

    stream_enabled = False  # Whether to enable streaming output
    completion = client.chat.completions.create(
        model="qwen3-asr-flash",
        messages=[
            {
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": "{YOUR_AUDIO_URL}"
                        }
                    }
                ],
                "role": "user"
            }
        ],
        stream=stream_enabled,
        # When stream is set to False, the stream_options parameter cannot be set
        # stream_options={"include_usage": True},
        extra_body={
            "asr_options": {
                # "language": "zh",
                "enable_itn": False
            }
        }
    )
    if stream_enabled:
        full_content = ""
        print("The streaming output is:")
        for chunk in completion:
            # If stream_options.include_usage is True, the choices field of the last chunk is an empty list and needs to be skipped (you can get the Token usage via chunk.usage)
            print(chunk)
            if chunk.choices and chunk.choices[0].delta.content:
                full_content += chunk.choices[0].delta.content
        print(f"The complete content is: {full_content}")
    else:
        print(f"The non-streaming output is: {completion.choices[0].message.content}")
except Exception as e:
    print(f"Error message: {e}")

SDK de Node.js

// Preparations before running:
// Common to Windows/Mac/Linux:
// 1. Make sure Node.js is installed (version >= 14 recommended)
// 2. Run the following command to install the required dependencies: npm install openai

import OpenAI from "openai";

const client = new OpenAI({
  // The API Key differs between the Singapore/US regions and the Beijing region. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
  // If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
  // The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
  baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
});

async function main() {
  try {
    const streamEnabled = false; // Whether to enable streaming output
    const completion = await client.chat.completions.create({
      model: "qwen3-asr-flash",
      messages: [
        {
          role: "user",
          content: [
            {
              type: "input_audio",
              input_audio: {
                data: "{YOUR_AUDIO_URL}"
              }
            }
          ]
        }
      ],
      stream: streamEnabled,
      // When stream is set to False, the stream_options parameter cannot be set
      // stream_options: {
      //   "include_usage": true
      // },
      asr_options: {
        // language: "zh",
        enable_itn: false
      }
    });

    if (streamEnabled) {
      let fullContent = "";
      console.log("The streaming output is:");
      for await (const chunk of completion) {
        console.log(JSON.stringify(chunk));
        if (chunk.choices && chunk.choices.length > 0) {
          const delta = chunk.choices[0].delta;
          if (delta && delta.content) {
            fullContent += delta.content;
          }
        }
      }
      console.log(`The complete content is: ${fullContent}`);
    } else {
      console.log(`The non-streaming output is: ${completion.choices[0].message.content}`);
    }
  } catch (err) {
    console.error(`Error message: ${err}`);
  }
}

main();

cURL

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/compatible-mode/v1/chat/completions' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-asr-flash",
    "messages": [
        {
            "content": [
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": "{YOUR_AUDIO_URL}"
                    }
                }
            ],
            "role": "user"
        }
    ],
    "stream":false,
    "asr_options": {
        "enable_itn": false
    }
}'

Entrada: Archivo de audio codificado en Base64

Pase datos codificados en Base64 como una URL de datos en el formato data:<mediatype>;base64,<data>.

  • <mediatype>: el tipo MIME.

    El tipo MIME varía según el formato de audio. Por ejemplo:

    • WAV: audio/wav
    • MP3: audio/mpeg
  • <data>: la cadena codificada en Base64 del audio.

    La codificación Base64 aumenta el tamaño de los datos. Mantenga el archivo fuente lo suficientemente pequeño para que el resultado codificado cumpla con el límite de tamaño de audio de entrada (10 MB).

  • Ejemplo: data:audio/wav;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA//PAxABQ/BXRbMPe4IQAhl9

    Haga clic para ver código de ejemplo

    import base64, pathlib
    
    # input.mp3 is the local audio file used for voice cloning. Replace it with the path to your own audio file and make sure it meets the audio requirements.
    file_path = pathlib.Path("{YOUR_AUDIO_FILE}")
    base64_str = base64.b64encode(file_path.read_bytes()).decode()
    data_uri = f"data:audio/mpeg;base64,{base64_str}"
    
    import java.nio.file.*;
    import java.util.Base64;
    
    public class Main {
        /**
         * filePath is the local audio file used for voice cloning. Replace it with the path to your own audio file and make sure it meets the audio requirements.
         */
        public static String toDataUrl(String filePath) throws Exception {
            byte[] bytes = Files.readAllBytes(Paths.get(filePath));
            String encoded = Base64.getEncoder().encodeToString(bytes);
            return "data:audio/mpeg;base64," + encoded;
        }
    
        // Usage example
        public static void main(String[] args) throws Exception {
            System.out.println(toDataUrl("{YOUR_AUDIO_FILE}"));
        }
    }
    
import base64
from openai import OpenAI
import os
import pathlib

try:
    # Replace with the actual audio file path
    file_path = "{YOUR_AUDIO_FILE}"
    # Replace with the actual MIME type of the audio file
    audio_mime_type = "audio/mpeg"

    file_path_obj = pathlib.Path(file_path)
    if not file_path_obj.exists():
        raise FileNotFoundError(f"Audio file does not exist: {file_path}")

    base64_str = base64.b64encode(file_path_obj.read_bytes()).decode()
    data_uri = f"data:{audio_mime_type};base64,{base64_str}"

    client = OpenAI(
        # The API Key differs between the Singapore/US regions and the Beijing region. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
        # If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: api_key = "sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
        base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
    )

    stream_enabled = False  # Whether to enable streaming output
    completion = client.chat.completions.create(
        model="qwen3-asr-flash",
        messages=[
            {
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": data_uri
                        }
                    }
                ],
                "role": "user"
            }
        ],
        stream=stream_enabled,
        # When stream is set to False, the stream_options parameter cannot be set
        # stream_options={"include_usage": True},
        extra_body={
            "asr_options": {
                # "language": "zh",
                "enable_itn": False
            }
        }
    )
    if stream_enabled:
        full_content = ""
        print("The streaming output is:")
        for chunk in completion:
            # If stream_options.include_usage is True, the choices field of the last chunk is an empty list and needs to be skipped (you can get the Token usage via chunk.usage)
            print(chunk)
            if chunk.choices and chunk.choices[0].delta.content:
                full_content += chunk.choices[0].delta.content
        print(f"The complete content is: {full_content}")
    else:
        print(f"The non-streaming output is: {completion.choices[0].message.content}")
except Exception as e:
    print(f"Error message: {e}")
// Preparations before running:
// Common to Windows/Mac/Linux:
// 1. Make sure Node.js is installed (version >= 14 recommended)
// 2. Run the following command to install the required dependencies: npm install openai

import OpenAI from "openai";
import { readFileSync } from 'fs';

const client = new OpenAI({
  // The API Key differs between the Singapore/US regions and the Beijing region. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
  // If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
  // The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
  baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
});

const encodeAudioFile = (audioFilePath) => {
    const audioFile = readFileSync(audioFilePath);
    return audioFile.toString('base64');
};

// Replace with the actual audio file path
const dataUri = `data:audio/mpeg;base64,${encodeAudioFile("{YOUR_AUDIO_FILE}")}`;

async function main() {
  try {
    const streamEnabled = false; // Whether to enable streaming output
    const completion = await client.chat.completions.create({
      model: "qwen3-asr-flash",
      messages: [
        {
          role: "user",
          content: [
            {
              type: "input_audio",
              input_audio: {
                data: dataUri
              }
            }
          ]
        }
      ],
      stream: streamEnabled,
      // When stream is set to False, the stream_options parameter cannot be set
      // stream_options: {
      //   "include_usage": true
      // },
      asr_options: {
        // language: "zh",
        enable_itn: false
      }
    });

    if (streamEnabled) {
      let fullContent = "";
      console.log("The streaming output is:");
      for await (const chunk of completion) {
        console.log(JSON.stringify(chunk));
        if (chunk.choices && chunk.choices.length > 0) {
          const delta = chunk.choices[0].delta;
          if (delta && delta.content) {
            fullContent += delta.content;
          }
        }
      }
      console.log(`The complete content is: ${fullContent}`);
    } else {
      console.log(`The non-streaming output is: ${completion.choices[0].message.content}`);
    }
  } catch (err) {
    console.error(`Error message: ${err}`);
  }
}

main();

Cuerpo de respuesta

idstring

El identificador único para esta llamada.

choicesarray

La información de salida del modelo.

Propiedades

finish_reasonstring

Valores válidos:

  • null: La salida aún se está generando.
  • stop: La salida finalizó naturalmente o fue terminada por una condición de parada.
  • length: La salida excedió el límite de longitud máxima.

indexinteger

El índice del objeto actual en el arreglo choices.

messageobject

El objeto de mensaje generado por el modelo.

Propiedades

rolestring

El rol del mensaje de salida. Configúrelo en assistant.

contentarray

El resultado del reconocimiento de voz.

annotationsarray

La información de anotación de salida, como el idioma.

Propiedades

languagestring

El idioma del audio reconocido. Si se especifica el parámetro de solicitud language, este valor es el mismo que el parámetro especificado.

Valores válidos

  • zh: Chino (Mandarín, Sichuanés, Minnan y Wu)
  • yue: Cantonés
  • en: Inglés
  • ja: Japonés
  • de: Alemán
  • ko: Coreano
  • ru: Ruso
  • fr: Francés
  • pt: Portugués
  • ar: Árabe
  • it: Italiano
  • es: Español
  • hi: Hindi
  • id: Indonesio
  • th: Tailandés
  • tr: Turco
  • uk: Ucraniano
  • vi: Vietnamita
  • cs: Checo
  • da: Danés
  • fil: Filipino
  • fi: Finés
  • is: Islandés
  • ms: Malayo
  • no: Noruego
  • pl: Polaco
  • sv: Sueco

typestring

Configúrelo en audio_info, que indica información de audio.

emotionstring

La emoción del audio reconocido. Se admiten las siguientes emociones:

  • surprised: sorprendido
  • neutral: neutro
  • happy: feliz
  • sad: triste
  • disgusted: asqueado
  • angry: enojado
  • fearful: temeroso

createdinteger

La marca de tiempo UNIX (en segundos) en la que se creó la solicitud.

modelstring

El modelo utilizado para esta solicitud.

objectstring

Siempre chat.completion.

usageobject

La información de consumo de tokens para esta solicitud.

Propiedades

completion_tokens integer

El número de tokens en la salida del modelo.

completion_tokens_details object

Los detalles detallados de los tokens en la salida del modelo.

Propiedades

text_tokens integer

El número de tokens en el texto de salida del modelo.

prompt_tokens object

El número de tokens en la entrada.

prompt_tokens_details object

Los detalles detallados de los tokens en la entrada.

Propiedades

audio_tokens integer

La longitud del audio de entrada en tokens. Regla de conversión de audio a token: Cada segundo de audio se convierte en 25 tokens. Las duraciones menores a 1 segundo se cuentan como 1 segundo.

text_tokens integer

Puede ignorar este parámetro.

seconds integer

La duración del audio en segundos.

total_tokens integer

El número total de tokens de entrada y salida (total_tokens = completion_tokens + prompt_tokens).

{
    "choices": [
        {
            "finish_reason": "stop",
            "index": 0,
            "message": {
                "annotations": [
                    {
                        "emotion": "neutral",
                        "language": "zh",
                        "type": "audio_info"
                    }
                ],
                "content": "Welcome to Alibaba Cloud.",
                "role": "assistant"
            }
        }
    ],
    "created": 1767683986,
    "id": "chatcmpl-487abe5f-d4f2-9363-a877-xxxxxxx",
    "model": "qwen3-asr-flash",
    "object": "chat.completion",
    "usage": {
        "completion_tokens": 12,
        "completion_tokens_details": {
            "text_tokens": 12
        },
        "prompt_tokens": 42,
        "prompt_tokens_details": {
            "audio_tokens": 42,
            "text_tokens": 0
        },
        "seconds": 1,
        "total_tokens": 54
    }
}
data: {"model":"qwen3-asr-flash","id":"chatcmpl-3fb97803-d27f-9289-8889-xxxxx","created":1767685989,"object":"chat.completion.chunk","usage":null,"choices":[{"logprobs":null,"index":0,"delta":{"content":"","role":"assistant"}}]}

data: {"model":"qwen3-asr-flash","id":"chatcmpl-3fb97803-d27f-9289-8889-xxxxx","choices":[{"delta":{"annotations":[{"type":"audio_info","language":"zh","emotion":"neutral"}],"content":"Welcome","role":null},"index":0}],"created":1767685989,"object":"chat.completion.chunk","usage":null}

data: {"model":"qwen3-asr-flash","id":"chatcmpl-3fb97803-d27f-9289-8889-xxxxx","choices":[{"delta":{"annotations":[{"type":"audio_info","language":"zh","emotion":"neutral"}],"content":" to","role":null},"index":0}],"created":1767685989,"object":"chat.completion.chunk","usage":null}

data: {"model":"qwen3-asr-flash","id":"chatcmpl-3fb97803-d27f-9289-8889-xxxxx","choices":[{"delta":{"annotations":[{"type":"audio_info","language":"zh","emotion":"neutral"}],"content":" Alibaba","role":null},"index":0}],"created":1767685989,"object":"chat.completion.chunk","usage":null}

data: {"model":"qwen3-asr-flash","id":"chatcmpl-3fb97803-d27f-9289-8889-xxxxx","choices":[{"delta":{"annotations":[{"type":"audio_info","language":"zh","emotion":"neutral"}],"content":" Cloud","role":null},"index":0}],"created":1767685989,"object":"chat.completion.chunk","usage":null}

data: {"model":"qwen3-asr-flash","id":"chatcmpl-3fb97803-d27f-9289-8889-xxxxx","choices":[{"delta":{"annotations":[{"type":"audio_info","language":"zh","emotion":"neutral"}],"content":".","role":null},"index":0}],"created":1767685989,"object":"chat.completion.chunk","usage":null}

data: {"model":"qwen3-asr-flash","id":"chatcmpl-3fb97803-d27f-9289-8889-xxxxx","choices":[{"delta":{"role":null},"index":0,"finish_reason":"stop"}],"created":1767685989,"object":"chat.completion.chunk","usage":null}

data: [DONE]

DashScope síncrono

URL

Singapore

Dirección de solicitud HTTP: POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

base_url para llamadas SDK: https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

EE. UU. (Virginia)

Si selecciona el ámbito de implementación de EE. UU., los recursos de cómputo de inferencia del modelo están restringidos a los Estados Unidos. Los datos estáticos se almacenan en la región seleccionada. Región admitida: EE. UU. (Virginia).

Dirección de solicitud HTTP: POST https://{WorkspaceId}.us-east-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

base_url para llamadas SDK: https://{WorkspaceId}.us-east-1.maas.aliyuncs.com/api/v1

China (Beijing)

Dirección de solicitud HTTP: POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

base_url para llamadas SDK: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

ImportanteAlibaba Cloud Model Studio ha lanzado dominios específicos del espacio de trabajo para las regiones China (Pekín) y Singapore. Los nuevos dominios dedicados ofrecen un rendimiento superior y una mayor estabilidad para las solicitudes de inferencia. Recomendamos migrar a los nuevos dominios:

  • China (Pekín): de dashscope.aliyuncs.com a {WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapur: de dashscope-intl.aliyuncs.com a {WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

Reemplace {WorkspaceId} con su ID de espacio de trabajo real. Los dominios existentes permanecen totalmente funcionales.

Cuerpo de la solicitud

modelstring(Obligatorio)

El nombre del modelo. Este parámetro solo aplica al modelo Qwen3-ASR-Flash.

messagesarray(Obligatorio)

La lista de mensajes.

Cuando realice una llamada HTTP, coloque messages en el objeto input.

Tipos de mensajes

Mensaje del sistema object (Opcional)

Se utiliza para proporcionar contexto para el reconocimiento de voz, como texto de fondo y glosarios de entidades. No admite la configuración de roles de modelo u otras indicaciones tradicionales del sistema. Si configura un mensaje del sistema, colóquelo al principio de la lista de mensajes.

Solo Qwen3-ASR-Flash admite este parámetro.

Propiedades

rolestring(Obligatorio)

Establecido en system.

Mensaje de usuario object(Obligatorio)

El mensaje enviado por el usuario al modelo.

Propiedades

contentarray(Obligatorio)

El contenido del mensaje del usuario. Solo se permite un mensaje en la matriz.

Propiedades

audiostring(Obligatorio)

El audio que se va a reconocer. Para obtener más información sobre cómo usar este parámetro, consulte Ejemplos de solicitud.

Cuando use DashScope, el modelo Qwen3-ASR-Flash admite tres formatos de entrada: archivos codificados en Base64, rutas absolutas de archivos locales y URL de archivos de audio accesibles a través de la red pública.

Cuando use un SDK, si el archivo de audio está almacenado en OSS, no se admiten las URL temporales que comienzan con oss://.

Cuando use una API RESTful, si el archivo de audio está almacenado en OSS, se admiten las URL temporales que comienzan con oss://. Nota:

Importante

  • Las URL temporales son válidas durante 48 horas. Después de su vencimiento, no se pueden utilizar. No las utilice en entornos de producción.
  • La API de credenciales de carga de archivos tiene un límite de tasa de 100 QPS y no se puede escalar. No la utilice en escenarios de producción, alta concurrencia o pruebas de estrés.
  • Para entornos de producción, recomendamos utilizar servicios de almacenamiento estables como Alibaba Cloud OSS para garantizar la disponibilidad de archivos a largo plazo y evitar problemas de limitación de tasa.

rolestring(Obligatorio)

El rol del mensaje de usuario. Configúrelo en user.

asr_optionsobject(Opcional)

Especifica si se deben habilitar ciertas funciones.

Este parámetro solo es compatible con el modelo Qwen3-ASR-Flash.

Propiedades

language string (Opcional) Sin valor predeterminado

Si se conoce el idioma del audio, puede especificarlo mediante este parámetro para mejorar la precisión del reconocimiento.

Solo puede especificar un idioma.

Si el idioma del audio es incierto o incluye múltiples idiomas (como una mezcla de chino, inglés, japonés y coreano), no especifique este parámetro.

Valores válidos

  • zh: Chino (Mandarín, Sichuanés, Minnan y Wu)
  • yue: Cantonés
  • en: Inglés
  • ja: Japonés
  • de: Alemán
  • ko: Coreano
  • ru: Ruso
  • fr: Francés
  • pt: Portugués
  • ar: Árabe
  • it: Italiano
  • es: Español
  • hi: Hindi
  • id: Indonesio
  • th: Tailandés
  • tr: Turco
  • uk: Ucraniano
  • vi: Vietnamita
  • cs: Checo
  • da: Danés
  • fil: Filipino
  • fi: Finés
  • is: Islandés
  • ms: Malayo
  • no: Noruego
  • pl: Polaco
  • sv: Sueco

enable_itnboolean (Opcional) Valor predeterminado: false

Especifica si se debe habilitar la Normalización Inversa de Texto (ITN). Esta función solo aplica a audio en chino e inglés.

  • true
  • false (predeterminado)

Ejemplos de solicitud

Qwen3-ASR-Flash admite grabaciones de hasta 5 minutos de duración, acepta una URL de archivo de audio público o una carga de archivo local como entrada, y puede devolver resultados de reconocimiento en modo streaming.

Entrada: URL del archivo de audio

curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-asr-flash",
    "input": {
        "messages": [
            {
                "content": [
                    {
                        "audio": "{YOUR_AUDIO_URL}"
                    }
                ],
                "role": "user"
            }
        ]
    },
    "parameters": {
        "asr_options": {
            "enable_itn": false
        }
    }
}'
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("audio", "{YOUR_AUDIO_URL}")))
                .build();

        Map<String, Object> asrOptions = new HashMap<>();
        asrOptions.put("enable_itn", false);
        // asrOptions.put("language", "zh"); // Optional. If you know the language of the audio, you can use this parameter to specify the language to recognize, to improve recognition accuracy
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // The API Key differs between the Singapore/US regions and the Beijing region. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
                // If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-asr-flash")
                .message(userMessage)
                .parameter("asr_options", asrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(JsonUtils.toJson(result));
    }
    public static void main(String[] args) {
        try {
            // The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
            Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
import os
import dashscope

# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

messages = [
    {"role": "user", "content": [{"audio": "{YOUR_AUDIO_URL}"}]}
]

response = dashscope.MultiModalConversation.call(
    # The API Key differs between the Singapore/US regions and the Beijing region. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
    # If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        #"language": "zh", # Optional. If you know the language of the audio, you can use this parameter to specify the language to recognize, to improve recognition accuracy
        "enable_itn":False
    }
)
print(response)

Entrada: Archivo de audio codificado en Base64

Puede pasar datos codificados en Base64 (Data URL) en el formato data:<mediatype>;base64,<data>.

  • <mediatype>: el tipo MIME.

    Varía según el formato de audio, por ejemplo:

    • WAV: audio/wav
    • MP3: audio/mpeg
  • <data>: la cadena codificada en Base64 del audio.

    La codificación Base64 aumenta el tamaño del archivo, así que mantenga el archivo original lo suficientemente pequeño para que el resultado codificado aún cumpla con el límite de tamaño de audio de entrada (10 MB).

  • Ejemplo: data:audio/wav;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA//PAxABQ/BXRbMPe4IQAhl9

    Haga clic para ver el código de ejemplo

    import base64, pathlib
    
    # input.mp3 is the local audio file used for voice cloning. Replace it with the path to your own audio file and make sure it meets the audio requirements.
    file_path = pathlib.Path("{YOUR_AUDIO_FILE}")
    base64_str = base64.b64encode(file_path.read_bytes()).decode()
    data_uri = f"data:audio/mpeg;base64,{base64_str}"
    
    import java.nio.file.*;
    import java.util.Base64;
    
    public class Main {
        /**
         * filePath is the local audio file used for voice cloning. Replace it with the path to your own audio file and make sure it meets the audio requirements.
         */
        public static String toDataUrl(String filePath) throws Exception {
            byte[] bytes = Files.readAllBytes(Paths.get(filePath));
            String encoded = Base64.getEncoder().encodeToString(bytes);
            return "data:audio/mpeg;base64," + encoded;
        }
    
        // Usage example
        public static void main(String[] args) throws Exception {
            System.out.println(toDataUrl("{YOUR_AUDIO_FILE}"));
        }
    }
    
import base64
import dashscope
import os
import pathlib

# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# Replace with the actual audio file path
file_path = "{YOUR_AUDIO_FILE}"
# Replace with the actual MIME type of the audio file
audio_mime_type = "audio/mpeg"

file_path_obj = pathlib.Path(file_path)
if not file_path_obj.exists():
    raise FileNotFoundError(f"Audio file does not exist: {file_path}")

base64_str = base64.b64encode(file_path_obj.read_bytes()).decode()
data_uri = f"data:{audio_mime_type};base64,{base64_str}"

messages = [
    {"role": "user", "content": [{"audio": data_uri}]}
]
response = dashscope.MultiModalConversation.call(
    # The API Key differs between the Singapore/US regions and the Beijing region. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
    # If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: api_key = "sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        # "language": "zh", # Optional. If you know the language of the audio, you can use this parameter to specify the language to recognize, to improve recognition accuracy
        "enable_itn":False
    }
)
print(response)
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {
    // Replace with the actual audio file path
    private static final String AUDIO_FILE = "{YOUR_AUDIO_FILE}";
    // Replace with the actual MIME type of the audio file
    private static final String AUDIO_MIME_TYPE = "audio/mpeg";

    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException, IOException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("audio", toDataUrl())))
                .build();

        Map<String, Object> asrOptions = new HashMap<>();
        asrOptions.put("enable_itn", false);
        // asrOptions.put("language", "zh"); // Optional. If you know the language of the audio, you can use this parameter to specify the language to recognize, to improve recognition accuracy
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // The API Key differs between the Singapore/US regions and the Beijing region. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
                // If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-asr-flash")
                .message(userMessage)
                .parameter("asr_options", asrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        try {
            // The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
            Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }

    // Generate the data URI
    public static String toDataUrl() throws IOException {
        byte[] bytes = Files.readAllBytes(Paths.get(AUDIO_FILE));
        String encoded = Base64.getEncoder().encodeToString(bytes);
        return "data:" + AUDIO_MIME_TYPE + ";base64," + encoded;
    }
}

Entrada: ruta absoluta de un archivo de audio local

Cuando procese un archivo de audio local con el SDK de DashScope, pase la ruta del archivo. Consulte la siguiente tabla para construir la ruta según su método de llamada y sistema operativo.

System

SDK

Ruta de archivo a pasar

Ejemplo

Linux o macOS

SDK de Python

file://{ruta absoluta del archivo}

file:///home/images/test.png

SDK de Java

Windows

SDK de Python

file://{ruta absoluta del archivo}

file://D:/images/test.png

SDK de Java

file:///{ruta absoluta del archivo}

file:///D:/images/test.png

ImportanteLas llamadas de archivos locales tienen un límite de 100 QPS y no se pueden escalar, por lo que no son adecuadas para escenarios de producción, alta concurrencia o pruebas de estrés. Para mayor concurrencia, cargue el archivo en OSS y llámelo a través de una URL.

import os
import dashscope

# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# Replace ABSOLUTE_PATH/{YOUR_AUDIO_FILE} with the absolute path of your local audio file
audio_file_path = "file://ABSOLUTE_PATH/{YOUR_AUDIO_FILE}"

messages = [
    {"role": "user", "content": [{"audio": audio_file_path}]}
]
response = dashscope.MultiModalConversation.call(
    # The API Key differs between the Singapore/US regions and the Beijing region. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
    # If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        # "language": "zh", # Optional. If you know the language of the audio, you can use this parameter to specify the language to recognize, to improve recognition accuracy
        "enable_itn":False
    }
)
print(response)
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        // Replace ABSOLUTE_PATH/{YOUR_AUDIO_FILE} with the absolute path of your local file
        String localFilePath = "file://ABSOLUTE_PATH/{YOUR_AUDIO_FILE}";
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("audio", localFilePath)))
                .build();

        Map<String, Object> asrOptions = new HashMap<>();
        asrOptions.put("enable_itn", false);
        // asrOptions.put("language", "zh"); // Optional. If you know the language of the audio, you can use this parameter to specify the language to recognize, to improve recognition accuracy
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
                // If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-asr-flash")
                .message(userMessage)
                .parameter("asr_options", asrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(JsonUtils.toJson(result));
    }
    public static void main(String[] args) {
        try {
            // The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
            Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Salida de transmisión

El modelo genera resultados intermedios paso a paso, y el resultado final se ensambla a partir de ellos. Una llamada sin streaming espera a que se generen todos los resultados y luego los devuelve de una vez, mientras que una llamada con streaming devuelve los resultados a medida que se generan, lo que reduce significativamente el tiempo hasta el primer token. Elija el parámetro de streaming que coincida con su método de llamada:

  • 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.

SDK de Python

import os
import dashscope

# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

messages = [
    {"role": "user", "content": [{"audio": "{YOUR_AUDIO_URL}"}]}
]
response = dashscope.MultiModalConversation.call(
    # The API Key differs between the Singapore/US regions and the Beijing region. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
    # If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        # "language": "zh", # Optional. If you know the language of the audio, you can use this parameter to specify the language to recognize, to improve recognition accuracy
        "enable_itn":False
    },
    stream=True
)

for response in response:
    try:
        print(response["output"]["choices"][0]["message"].content[0]["text"])
    except:
        pass

SDK de Java

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import io.reactivex.Flowable;

public class Main {
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("audio", "{YOUR_AUDIO_URL}")))
                .build();

        Map<String, Object> asrOptions = new HashMap<>();
        asrOptions.put("enable_itn", false);
        // asrOptions.put("language", "zh"); // Optional. If you know the language of the audio, you can use this parameter to specify the language to recognize, to improve recognition accuracy
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
                // If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-asr-flash")
                .message(userMessage)
                .parameter("asr_options", asrOptions)
                .build();
        Flowable<MultiModalConversationResult> resultFlowable = conv.streamCall(param);
        resultFlowable.blockingForEach(item -> {
            try {
                System.out.println(item.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
            } catch (Exception e){
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        try {
            // The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
            Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

cURL

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/aigc/multimodal-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
    "model": "qwen3-asr-flash",
    "input": {
        "messages": [
            {
                "content": [
                    {
                        "audio": "{YOUR_AUDIO_URL}"
                    }
                ],
                "role": "user"
            }
        ]
    },
    "parameters": {
        "incremental_output": true,
        "asr_options": {
            "enable_itn": false
        }
    }
}'

Cuerpo de respuesta

request_idstring

El identificador único para esta llamada.

El parámetro devuelto por el SDK de Java es requestId

outputobject

La información del resultado de la llamada.

Propiedades

choicesarray

La salida del modelo. Se devuelve cuando result_format es message.

Propiedades

finish_reasonstring

Valores válidos:

  • null: La salida aún se está generando.
  • stop: La salida finalizó naturalmente o fue terminada por una condición de parada.
  • length: La salida excedió el límite de longitud máxima.

messageobject

El objeto de mensaje generado por el modelo.

Propiedades

rolestring

El rol del mensaje de salida. Configúrelo en assistant.

contentarray

El contenido del mensaje de salida.

Propiedades

textstring

El resultado del reconocimiento de voz.

annotationsarray

La información de anotación de salida, como el idioma.

Propiedades

languagestring

El idioma del audio reconocido. Si se especifica el parámetro de solicitud language, este valor es el mismo que el parámetro especificado.

Valores válidos

  • zh: Chino (Mandarín, Sichuanés, Minnan y Wu)
  • yue: Cantonés
  • en: Inglés
  • ja: Japonés
  • de: Alemán
  • ko: Coreano
  • ru: Ruso
  • fr: Francés
  • pt: Portugués
  • ar: Árabe
  • it: Italiano
  • es: Español
  • hi: Hindi
  • id: Indonesio
  • th: Tailandés
  • tr: Turco
  • uk: Ucraniano
  • vi: Vietnamita
  • cs: Checo
  • da: Danés
  • fil: Filipino
  • fi: Finés
  • is: Islandés
  • ms: Malayo
  • no: Noruego
  • pl: Polaco
  • sv: Sueco

typestring

Configúrelo en audio_info, que indica información de audio.

emotionstring

La emoción del audio reconocido. Se admiten las siguientes emociones:

  • surprised: sorprendido
  • neutral: neutro
  • happy: feliz
  • sad: triste
  • disgusted: asqueado
  • angry: enojado
  • fearful: temeroso

usageobject

La información de consumo de tokens para esta solicitud.

Propiedades

input_tokens_details object

La longitud del contenido de entrada para Qwen3-ASR-Flash en tokens.

Propiedades

text_tokens integer

Puede ignorar este parámetro.

output_tokens_details object

La longitud del contenido de salida de Qwen3-ASR-Flash en tokens.

Propiedades

text_tokens integer

La longitud del texto reconocido generado por Qwen3-ASR-Flash en tokens.

seconds integer

La duración del audio para Qwen3-ASR-Flash en segundos.

{
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "annotations": [
                        {
                            "language": "zh",
                            "type": "audio_info",
                            "emotion": "neutral"
                        }
                    ],
                    "content": [
                        {
                            "text": "Welcome to Alibaba Cloud."
                        }
                    ],
                    "role": "assistant"
                }
            }
        ]
    },
    "usage": {
        "input_tokens_details": {
            "text_tokens": 0
        },
        "output_tokens_details": {
            "text_tokens": 6
        },
        "seconds": 1
    },
    "request_id": "568e2bf0-d6f2-97f8-9f15-a57b11dc6977"
}

Invocación asíncrona de DashScope

Descripción del proceso

La invocación asíncrona está diseñada para archivos de audio largos o tareas que consumen mucho tiempo. Utiliza un proceso de dos pasos "enviar-sondear" para evitar tiempos de espera en las solicitudes:

  1. Paso 1: Enviar una tarea

    • El cliente inicia una solicitud de procesamiento asíncrono.
    • Después de validar la solicitud, el servidor no ejecuta la tarea inmediatamente. En su lugar, devuelve un task_id único, lo que indica que la tarea se ha creado correctamente.
  2. Paso 2: Obtener el resultado

    • El cliente utiliza el task_id para sondear la API de consulta de resultados.
    • Cuando la tarea se completa, la API de consulta de resultados devuelve el resultado final de reconocimiento.

Puede optar por usar un SDK o llamar directamente a la API RESTful según su entorno de integración.

  • Use un SDK. Para código de ejemplo, consulte Ejemplos de solicitud. Para parámetros de solicitud, consulte el Cuerpo de la solicitud de la operación Enviar una tarea. Para información sobre la respuesta, consulte Descripción de los resultados de llamadas asíncronas.

    Los SDK manejan automáticamente los detalles subyacentes de la llamada a la API.

    1. Enviar una tarea: Llame al método async_call() (Python) o asyncCall() (Java) para enviar la tarea. Este método devuelve un objeto de tarea que contiene un task_id.
    2. Obtener el resultado: Use el objeto de tarea devuelto en el paso anterior o el task_id para llamar al método fetch() y recuperar el resultado. El SDK maneja automáticamente la lógica interna de sondeo hasta que la tarea se complete o expire.
  • Utilizar una API RESTful

    Llamar directamente a la API RESTful proporciona la máxima flexibilidad.

    1. Enviar la tarea. Si la solicitud es exitosa, el cuerpo de la respuesta contendrá un task_id.
    2. Use el task_id del paso anterior para recuperar el resultado de ejecución de la tarea.

Ejemplo completo

HTTP

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import okhttp3.*;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class Main {
    // The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
    private static final String API_URL_SUBMIT = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/asr/transcription";
    // The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
    private static final String API_URL_QUERY = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/";
    private static final Gson gson = new Gson();

    public static void main(String[] args) {
        // The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
        // If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: String apiKey = "sk-xxx"
        String apiKey = System.getenv("DASHSCOPE_API_KEY");

        OkHttpClient client = new OkHttpClient();

        // 1. Submit the task
        /*String payloadJson = """
                {
                    "model": "qwen3-asr-flash-filetrans",
                    "input": {
                        "file_url": "{YOUR_AUDIO_URL}"
                    },
                    "parameters": {
                        "channel_id": [0],
                        "enable_itn": false,
                        "language": "zh"
                    }
                }
                """;*/
        String payloadJson = """
                {
                    "model": "qwen3-asr-flash-filetrans",
                    "input": {
                        "file_url": "{YOUR_AUDIO_URL}"
                    },
                    "parameters": {
                        "channel_id": [0],
                        "enable_itn": false,
                        "enable_words": true
                    }
                }
                """;

        RequestBody body = RequestBody.create(payloadJson, MediaType.get("application/json; charset=utf-8"));
        Request submitRequest = new Request.Builder()
                .url(API_URL_SUBMIT)
                .addHeader("Authorization", "Bearer " + apiKey)
                .addHeader("Content-Type", "application/json")
                .addHeader("X-DashScope-Async", "enable")
                .post(body)
                .build();

        String taskId = null;

        try (Response response = client.newCall(submitRequest).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                String respBody = response.body().string();
                ApiResponse apiResp = gson.fromJson(respBody, ApiResponse.class);
                if (apiResp.output != null) {
                    taskId = apiResp.output.taskId;
                    System.out.println("Task submitted, task_id: " + taskId);
                } else {
                    System.out.println("Submission response content: " + respBody);
                    return;
                }
            } else {
                System.out.println("Task submission failed! HTTP code: " + response.code());
                if (response.body() != null) {
                    System.out.println(response.body().string());
                }
                return;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        // 2. Poll the task status
        boolean finished = false;
        while (!finished) {
            try {
                TimeUnit.SECONDS.sleep(2);  // Wait 2 seconds before querying again
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                return;
            }

            String queryUrl = API_URL_QUERY + taskId;
            Request queryRequest = new Request.Builder()
                    .url(queryUrl)
                    .addHeader("Authorization", "Bearer " + apiKey)
                    .addHeader("Content-Type", "application/json")
                    .get()
                    .build();

            try (Response response = client.newCall(queryRequest).execute()) {
                if (response.body() != null) {
                    String queryResponse = response.body().string();
                    ApiResponse apiResp = gson.fromJson(queryResponse, ApiResponse.class);

                    if (apiResp.output != null && apiResp.output.taskStatus != null) {
                        String status = apiResp.output.taskStatus;
                        System.out.println("Current task status: " + status);
                        if ("SUCCEEDED".equalsIgnoreCase(status)
                                || "FAILED".equalsIgnoreCase(status)
                                || "UNKNOWN".equalsIgnoreCase(status)) {
                            finished = true;
                            System.out.println("Task completed, final result: ");
                            System.out.println(queryResponse);
                        }
                    } else {
                        System.out.println("Query response content: " + queryResponse);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
                return;
            }
        }
    }

    static class ApiResponse {
        @SerializedName("request_id")
        String requestId;
        Output output;
    }

    static class Output {
        @SerializedName("task_id")
        String taskId;
        @SerializedName("task_status")
        String taskStatus;
    }
}
import os
import time
import requests
import json

# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
API_URL_SUBMIT = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/asr/transcription"
# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
API_URL_QUERY_BASE = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/"

def main():
    # The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
    # If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: api_key = "sk-xxx"
    api_key = os.getenv("DASHSCOPE_API_KEY")

    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
        "X-DashScope-Async": "enable"
    }

    # 1. Submit the task
    payload = {
        "model": "qwen3-asr-flash-filetrans",
        "input": {
            "file_url": "{YOUR_AUDIO_URL}"
        },
        "parameters": {
            "channel_id": [0],
            # "language": "zh",
            "enable_itn": False,
            "enable_words": True
        }
    }

    print("Submitting ASR transcription task...")
    try:
        submit_resp = requests.post(API_URL_SUBMIT, headers=headers, data=json.dumps(payload))
    except requests.RequestException as e:
        print(f"Failed to request task submission: {e}")
        return

    if submit_resp.status_code != 200:
        print(f"Task submission failed! HTTP code: {submit_resp.status_code}")
        print(submit_resp.text)
        return

    resp_data = submit_resp.json()
    output = resp_data.get("output")
    if not output or "task_id" not in output:
        print("Abnormal submission response content:", resp_data)
        return

    task_id = output["task_id"]
    print(f"Task submitted, task_id: {task_id}")

    # 2. Poll the task status
    finished = False
    while not finished:
        time.sleep(2)  # Wait 2 seconds before querying again

        query_url = API_URL_QUERY_BASE + task_id
        try:
            query_resp = requests.get(query_url, headers={"Authorization": f"Bearer {api_key}"})
        except requests.RequestException as e:
            print(f"Failed to request task query: {e}")
            return

        if query_resp.status_code != 200:
            print(f"Task query failed! HTTP code: {query_resp.status_code}")
            print(query_resp.text)
            return

        query_data = query_resp.json()
        output = query_data.get("output")
        if output and "task_status" in output:
            status = output["task_status"]
            print(f"Current task status: {status}")

            if status.upper() in ("SUCCEEDED", "FAILED", "UNKNOWN"):
                finished = True
                print("Task completed. The final result is as follows:")
                print(json.dumps(query_data, indent=2, ensure_ascii=False))
        else:
            print("Query response content:", query_data)

if __name__ == "__main__":
    main()

SDK de Java

import com.alibaba.dashscope.audio.qwen_asr.*;
import com.alibaba.dashscope.utils.Constants;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        // The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        QwenTranscriptionParam param =
                QwenTranscriptionParam.builder()
                        // The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
                        // If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: .apiKey("sk-xxx")
                        .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                        .model("qwen3-asr-flash-filetrans")
                        .fileUrl("{YOUR_AUDIO_URL}")
                        //.parameter("language", "zh")
                        //.parameter("channel_id", new ArrayList<String>(){{add("0");add("1");}})
                        .parameter("enable_itn", false)
                        .parameter("enable_words", true)
                        .build();
        try {
            QwenTranscription transcription = new QwenTranscription();
            // Submit the task
            QwenTranscriptionResult result = transcription.asyncCall(param);
            System.out.println("create task result: " + result);
            // Check whether the task was submitted successfully
            if (result.getTaskId() == null) {
                System.out.println("Error: " + result.getOutput());
                return;
            }
            // Query the task status
            result = transcription.fetch(QwenTranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
            System.out.println("task status: " + result);
            // Wait for the task to complete
            result =
                    transcription.wait(
                            QwenTranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
            System.out.println("task result: " + result);
            // Get the speech recognition result
            QwenTranscriptionTaskResult taskResult = result.getResult();
            if (taskResult != null) {
                // Get the URL of the recognition result
                String transcriptionUrl = taskResult.getTranscriptionUrl();
                // Get the result corresponding to the URL
                HttpURLConnection connection =
                        (HttpURLConnection) new URL(transcriptionUrl).openConnection();
                connection.setRequestMethod("GET");
                connection.connect();
                BufferedReader reader =
                        new BufferedReader(new InputStreamReader(connection.getInputStream()));
                // Format and output the json result
                Gson gson = new GsonBuilder().setPrettyPrinting().create();
                System.out.println(gson.toJson(gson.fromJson(reader, JsonObject.class)));
            }
        } catch (Exception e) {
            System.out.println("error: " + e);
        }
    }
}

SDK de Python

import json
import os
import sys
from http import HTTPStatus

import dashscope
from dashscope.audio.qwen_asr import QwenTranscription
from dashscope.api_entities.dashscope_response import TranscriptionResponse

# run the transcription script
if __name__ == '__main__':
    # The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
    # If you have not configured the environment variable, replace the following line with your Alibaba Cloud Model Studio API Key: dashscope.api_key = "sk-xxx"
    dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")

    # The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
    dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
    task_response = QwenTranscription.async_call(
        model='qwen3-asr-flash-filetrans',
        file_url='{YOUR_AUDIO_URL}',
        #language="",
        enable_itn=False,
        enable_words=True
    )
    print(f'task_response: {task_response}')
    print(task_response.output.task_id)
    query_response = QwenTranscription.fetch(task=task_response.output.task_id)
    print(f'query_response: {query_response}')
    task_result = QwenTranscription.wait(task=task_response.output.task_id)
    print(f'task_result: {task_result}')

Descargar el resultado de reconocimiento

Una vez que la tarea se completa correctamente, la output.result.transcription_url devuelta por la API de consulta apunta a un archivo JSON descargable públicamente que contiene el resultado completo del reconocimiento. Esta URL es válida durante 24 horas de forma predeterminada, así que descárguela y guárdela a la brevedad.

# Replace {transcription_url} with the transcription_url value returned by the query API
curl -sS '{transcription_url}' -o transcription.json
cat transcription.json | jq .

Enviar una tarea

URL

Singapore

Dirección de solicitud HTTP: POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/asr/transcription

base_url para llamadas SDK: https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

China (Beijing)

Dirección de solicitud HTTP: POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/asr/transcription

base_url para llamadas SDK: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

ImportanteAlibaba Cloud Model Studio ha lanzado dominios específicos del espacio de trabajo para las regiones China (Pekín) y Singapore. Los nuevos dominios dedicados ofrecen un rendimiento superior y una mayor estabilidad para las solicitudes de inferencia. Recomendamos migrar a los nuevos dominios:

  • China (Pekín): de dashscope.aliyuncs.com a {WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapur: de dashscope-intl.aliyuncs.com a {WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

Reemplace {WorkspaceId} con su ID de espacio de trabajo real. Los dominios existentes permanecen totalmente funcionales.

Cuerpo de la solicitud

modelstring(Obligatorio)

El nombre del modelo. Este parámetro solo aplica al modelo Qwen3-ASR-Flash-Filetrans.

inputobject(Obligatorio)

Propiedades

file_url string(Obligatorio)

La URL del archivo de audio que se va a reconocer. La URL debe ser accesible a través de la red pública.

Cuando use un SDK, si el archivo de audio está almacenado en OSS, no se admiten las URL temporales que comienzan con oss://.

Cuando use una API RESTful, si el archivo de audio está almacenado en OSS, se admiten las URL temporales que comienzan con oss://. Nota:

Importante

  • Las URL temporales son válidas durante 48 horas. Después de su vencimiento, no se pueden utilizar. No las utilice en entornos de producción.
  • La API de credenciales de carga de archivos tiene un límite de tasa de 100 QPS y no se puede escalar. No la utilice en escenarios de producción, alta concurrencia o pruebas de estrés.
  • Para entornos de producción, recomendamos utilizar servicios de almacenamiento estables como Alibaba Cloud OSS para garantizar la disponibilidad de archivos a largo plazo y evitar problemas de limitación de tasa.

parametersobject(Opcional)

Propiedades

language string (Opcional) Sin valor predeterminado

Si se conoce el idioma del audio, puede especificarlo mediante este parámetro para mejorar la precisión del reconocimiento.

Solo puede especificar un idioma.

Si el idioma del audio es incierto o incluye múltiples idiomas (como una mezcla de chino, inglés, japonés y coreano), no especifique este parámetro.

Valores válidos

  • zh: Chino (Mandarín, Sichuanés, Minnan y Wu)
  • yue: Cantonés
  • en: Inglés
  • ja: Japonés
  • de: Alemán
  • ko: Coreano
  • ru: Ruso
  • fr: Francés
  • pt: Portugués
  • ar: Árabe
  • it: Italiano
  • es: Español
  • hi: Hindi
  • id: Indonesio
  • th: Tailandés
  • tr: Turco
  • uk: Ucraniano
  • vi: Vietnamita
  • cs: Checo
  • da: Danés
  • fil: Filipino
  • fi: Finés
  • is: Islandés
  • ms: Malayo
  • no: Noruego
  • pl: Polaco
  • sv: Sueco

enable_itnboolean (Opcional) Valor predeterminado: false

Especifica si se debe habilitar la Normalización Inversa de Texto (ITN). Esta función solo aplica a audio en chino e inglés.

  • true
  • false (predeterminado)

enable_wordsboolean(Opcional) Valor predeterminado: false

Especifica si se deben devolver marcas de tiempo a nivel de palabra:

  • false: Devuelve marcas de tiempo a nivel de oración.

  • true: Devuelve marcas de tiempo a nivel de palabra.

    Las marcas de tiempo a nivel de palabra solo son compatibles con los siguientes idiomas: chino, inglés, japonés, coreano, alemán, francés, español, italiano, portugués y ruso. No se puede garantizar la precisión para otros idiomas.

Este parámetro también afecta las reglas de segmentación de oraciones:

  • false: La segmentación de oraciones se basa en la Detección de Actividad de Voz (VAD).
  • true: La segmentación de oraciones se basa en VAD y puntuación.

channel_idarray(Opcional) Valor predeterminado: [0]

Especifica los índices de las pistas de audio que se van a reconocer en un archivo de audio multipista. El índice comienza en 0. Por ejemplo, [0] indica que se reconoce la primera pista de audio, y [0, 1] indica que la primera y la segunda pista de audio se reconocen simultáneamente. Si se omite este parámetro, la primera pista de audio se procesa de forma predeterminada.

ImportanteCada pista de audio especificada se factura por separado. Por ejemplo, solicitar [0, 1] para un solo archivo incurrirá en dos cargos separados.

cURL

# ======= Important =======
# The following configuration is for the Singapore region. Replace "{WorkspaceId}" with your actual workspace ID. The configuration varies by region.
# The API keys for the Singapore and Beijing regions are different. For more information about how to obtain an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key
# === Delete this comment before running the command. ===

curl --location --request POST 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/asr/transcription' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--header "X-DashScope-Async: enable" \
--data '{
    "model": "qwen3-asr-flash-filetrans",
    "input": {
        "file_url": "{YOUR_AUDIO_URL}"
    },
    "parameters": {
        "channel_id":[
            0
        ],
        "enable_itn": false
    }
}'

Java

Para ejemplos de SDK, consulte Ejemplos de solicitud.

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import okhttp3.*;

import java.io.IOException;

public class Main {
    // The following configuration is for the Singapore region. Replace "{WorkspaceId}" with your actual workspace ID. The configuration varies by region.
    private static final String API_URL = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/asr/transcription";

    public static void main(String[] args) {
        // The API keys for the Singapore and Beijing regions are different. For more information about how to obtain an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key
        // If the environment variable is not configured, replace the following line with your Model Studio API key: String apiKey = "sk-xxx"
        String apiKey = System.getenv("DASHSCOPE_API_KEY");

        OkHttpClient client = new OkHttpClient();
        Gson gson = new Gson();

        /*String payloadJson = """
                {
                    "model": "qwen3-asr-flash-filetrans",
                    "input": {
                        "file_url": "{YOUR_AUDIO_URL}"
                    },
                    "parameters": {
                        "channel_id": [0],
                        "enable_itn": false,
                        "language": "zh",
                        "corpus": {
                            "text": ""
                        }
                    }
                }
                """;*/
        String payloadJson = """
                {
                    "model": "qwen3-asr-flash-filetrans",
                    "input": {
                        "file_url": "{YOUR_AUDIO_URL}"
                    },
                    "parameters": {
                        "channel_id": [0],
                        "enable_itn": false
                    }
                }
                """;

        RequestBody body = RequestBody.create(payloadJson, MediaType.get("application/json; charset=utf-8"));
        Request request = new Request.Builder()
                .url(API_URL)
                .addHeader("Authorization", "Bearer " + apiKey)
                .addHeader("Content-Type", "application/json")
                .addHeader("X-DashScope-Async", "enable")
                .post(body)
                .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                String respBody = response.body().string();
                // Parse JSON using Gson
                ApiResponse apiResp = gson.fromJson(respBody, ApiResponse.class);
                if (apiResp.output != null) {
                    System.out.println("task_id: " + apiResp.output.taskId);
                } else {
                    System.out.println(respBody);
                }
            } else {
                System.out.println("task failed! HTTP code: " + response.code());
                if (response.body() != null) {
                    System.out.println(response.body().string());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static class ApiResponse {
        @SerializedName("request_id")
        String requestId;

        Output output;
    }

    static class Output {
        @SerializedName("task_id")
        String taskId;

        @SerializedName("task_status")
        String taskStatus;
    }
}

Python

Para ejemplos de SDK, consulte Ejemplos de solicitud.

import requests
import json
import os

# The following configuration is for the Singapore region. Replace "{WorkspaceId}" with your actual workspace ID. The configuration varies by region.
url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/asr/transcription"

# The API keys for the Singapore and Beijing regions are different. For more information about how to obtain an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key
# If the environment variable is not configured, replace the following line with your Model Studio API key: DASHSCOPE_API_KEY = "sk-xxx"
DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")

headers = {
    "Authorization": f"Bearer {DASHSCOPE_API_KEY}",
    "Content-Type": "application/json",
    "X-DashScope-Async": "enable"
}

payload = {
    "model": "qwen3-asr-flash-filetrans",
    "input": {
        "file_url": "{YOUR_AUDIO_URL}"
    },
    "parameters": {
        "channel_id": [0],
        # "language": "zh",
        "enable_itn": False
        # "corpus": {
        #     "text": ""
        # }
    }
}

response = requests.post(url, headers=headers, data=json.dumps(payload))
if response.status_code == 200:
    print(f"task_id: {response.json()["output"]["task_id"]}")
else:
    print("task failed!")
    print(response.json())

Cuerpo de respuesta

request_idstring

El identificador único para esta llamada.

outputobject

La información del resultado de la llamada.

Propiedades

task_idstring

El ID de la tarea. Este ID se pasa como parámetro de solicitud en la API para consultar tareas de reconocimiento de voz.

task_statusstring

El estado de la tarea:

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • UNKNOWN: La tarea no existe o se desconoce su estado.
{
    "request_id": "92e3decd-0c69-47a8-************",
    "output": {
        "task_id": "8fab76d0-0eed-4d20-************",
        "task_status": "PENDING"
    }
}

Obtener el resultado de ejecución de la tarea

URL

Singapore

Dirección de solicitud HTTP: GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}

base_url para llamadas SDK: https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

China (Beijing)

Dirección de solicitud HTTP: GET https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}

base_url para llamadas SDK: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

ImportanteAlibaba Cloud Model Studio ha lanzado dominios específicos del espacio de trabajo para las regiones China (Pekín) y Singapore. Los nuevos dominios dedicados ofrecen un rendimiento superior y una mayor estabilidad para las solicitudes de inferencia. Recomendamos migrar a los nuevos dominios:

  • China (Pekín): de dashscope.aliyuncs.com a {WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapur: de dashscope-intl.aliyuncs.com a {WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

Reemplace {WorkspaceId} con su ID de espacio de trabajo real. Los dominios existentes permanecen totalmente funcionales.

Cuerpo de la solicitud

task_idstring(Obligatorio)

El ID de la tarea. Pase el task_id de la respuesta de la operación Enviar una tarea para consultar el resultado de reconocimiento de voz.

cURL

# ======= Important =======
# The following configuration is for the Singapore region. Replace "{WorkspaceId}" with your actual workspace ID. The configuration varies by region.
# The API keys for the Singapore and Beijing regions are different. For more information about how to obtain an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key
# === Delete this comment before running the command. ===

curl --location --request GET 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json"

Java

Para ejemplos de SDK, consulte Ejemplos de solicitud.

import okhttp3.*;

import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        // Replace with the actual task_id.
        String taskId = "xxx";
        // The API keys for the Singapore and Beijing regions are different. For more information about how to obtain an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key
        // If the environment variable is not configured, replace the following line with your Model Studio API key: String apiKey = "sk-xxx"
        String apiKey = System.getenv("DASHSCOPE_API_KEY");

        // The following configuration is for the Singapore region. Replace "{WorkspaceId}" with your actual workspace ID. The configuration varies by region.
        String apiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/" + taskId;

        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url(apiUrl)
                .addHeader("Authorization", "Bearer " + apiKey)
                .addHeader("Content-Type", "application/json")
                .get()
                .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.body() != null) {
                System.out.println(response.body().string());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Python

Para ejemplos de SDK, consulte Ejemplos de solicitud.

import os
import requests

# The API keys for the Singapore and Beijing regions are different. For more information about how to obtain an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key
# If the environment variable is not configured, replace the following line with your Model Studio API key: DASHSCOPE_API_KEY = "sk-xxx"
DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")

# Replace with the actual task_id.
task_id = "xxx"
# The following configuration is for the Singapore region. Replace "{WorkspaceId}" with your actual workspace ID. The configuration varies by region.
url = f"https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}"

headers = {
    "Authorization": f"Bearer {DASHSCOPE_API_KEY}",
    "Content-Type": "application/json"
}

response = requests.get(url, headers=headers)
print(response.json())

Cuerpo de respuesta

request_idstring

El identificador único para esta llamada.

outputobject

La información del resultado de la llamada.

Propiedades

task_idstring

El ID de la tarea. Este ID se pasa como parámetro de solicitud en la API para consultar tareas de reconocimiento de voz.

task_statusstring

El estado de la tarea:

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • UNKNOWN: La tarea no existe o se desconoce su estado.

resultobject

El resultado del reconocimiento de voz.

Propiedades

transcription_urlstring

La URL de descarga para el archivo de resultados de reconocimiento. El enlace es válido durante 24 horas. Una vez que el enlace caduca, no puede consultar la tarea ni descargar el resultado utilizando la URL anterior.
El resultado de reconocimiento se guarda como un archivo JSON. Puede descargar el archivo desde este enlace o leer el contenido del archivo directamente mediante una solicitud HTTP.

Para más información, consulte Descripción de los resultados de llamadas asíncronas.

submit_timestring

La hora en que se envió la tarea.

schedule_timestring

El momento en que se programó la tarea, que corresponde a la hora de inicio de la ejecución.

end_timestring

La hora en que finalizó la tarea.

task_metricsobject

Métricas de la tarea, que incluyen estadísticas sobre el estado de las subtareas.

Propiedades

TOTALinteger

El número total de subtareas.

SUCCEEDEDinteger

El número de subtareas exitosas.

FAILEDinteger

El número de subtareas fallidas.

codestring

El código de error. Esto se devuelve solo cuando la tarea falla.

messagestring

El mensaje de error. Esto se devuelve solo cuando la tarea falla.

usageobject

La información de consumo de tokens para esta solicitud.

Propiedades

seconds integer

La duración del audio para Qwen3-ASR-Flash en segundos.

{
    "request_id": "6769df07-2768-4fb0-ad59-************",
    "output": {
        "task_id": "9be1700a-0f8e-4778-be74-************",
        "task_status": "RUNNING",
        "submit_time": "2025-10-27 14:19:31.150",
        "scheduled_time": "2025-10-27 14:19:31.233",
        "task_metrics": {
            "TOTAL": 1,
            "SUCCEEDED": 0,
            "FAILED": 0
        }
    }
}
{
    "request_id": "1dca6c0a-0ed1-4662-aa39-************",
    "output": {
        "task_id": "8fab76d0-0eed-4d20-929f-************",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-10-27 13:57:45.948",
        "scheduled_time": "2025-10-27 13:57:46.018",
        "end_time": "2025-10-27 13:57:47.079",
        "result": {
            "transcription_url": "http://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/pre/pre-funasr-mlt-v1/20251027/13%3A57/7a3a8236-ffd1-4099-a280-0299686ac7da.json?Expires=1761631066&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE&response-content-disposition=attachment%3Bfilename%3D7a3a8236-ffd1-4099-a280-0299686ac7da.json"
        }
    },
    "usage": {
        "seconds": 3
    }
}
{
    "request_id": "3d141841-858a-466a-9ff9-************",
    "output": {
        "task_id": "c58c7951-7789-4557-9ea3-************",
        "task_status": "FAILED",
        "submit_time": "2025-10-27 15:06:06.915",
        "scheduled_time": "2025-10-27 15:06:06.967",
        "end_time": "2025-10-27 15:06:07.584",
        "code": "FILE_403_FORBIDDEN",
        "message": "FILE_403_FORBIDDEN"
    }
}

Descripción de los resultados de llamadas asíncronas

file_url string

La URL del archivo de audio reconocido.

audio_infoobject

Información sobre el archivo de audio reconocido.

Propiedades

format string

El formato de audio.

sample_rate integer

La tasa de muestreo del audio.

transcriptsarray

Una lista de resultados de reconocimiento completos. Cada elemento corresponde al contenido reconocido de una pista de audio.

Propiedades

channel_idinteger

El índice de la pista de audio, comenzando desde 0.

textstring

El texto reconocido.

sentencesobject

Una lista de resultados de reconocimiento a nivel de oración.

Propiedades

begin_time integer

La marca de tiempo inicial de la oración en milisegundos.

end_time integer

La marca de tiempo final de la oración en milisegundos.

textstring

El texto reconocido.

sentence_idinteger

El índice de la oración, comenzando desde 0.

languagestring

El idioma del audio reconocido. Si se especifica el parámetro de solicitud language, este valor es el mismo que el parámetro especificado.

Valores válidos

  • zh: Chino (Mandarín, Sichuanés, Minnan y Wu)
  • yue: Cantonés
  • en: Inglés
  • ja: Japonés
  • de: Alemán
  • ko: Coreano
  • ru: Ruso
  • fr: Francés
  • pt: Portugués
  • ar: Árabe
  • it: Italiano
  • es: Español
  • hi: Hindi
  • id: Indonesio
  • th: Tailandés
  • tr: Turco
  • uk: Ucraniano
  • vi: Vietnamita
  • cs: Checo
  • da: Danés
  • fil: Filipino
  • fi: Finés
  • is: Islandés
  • ms: Malayo
  • no: Noruego
  • pl: Polaco
  • sv: Sueco

emotionstring

La emoción del audio reconocido. Se admiten las siguientes emociones:

  • surprised
  • neutral
  • happy
  • sad
  • disgusted
  • angry
  • fearful

wordsobject

Una lista de resultados de reconocimiento a nivel de palabra. Este resultado se muestra cuando el parámetro de solicitud enable_words se establece en true.

Propiedades

begin_time integer

La marca de tiempo inicial en milisegundos.

end_time integer

La marca de tiempo final en milisegundos.

textstring

El texto reconocido.

punctuationstring

El signo de puntuación.

{
    "file_url": "https://***.wav",
    "audio_info": {
        "format": "wav",
        "sample_rate": 16000
    },
    "transcripts": [
        {
            "channel_id": 0,
            "text": "Senior staff, Principal Doris Jackson, Wakefield faculty, and of course my fellow classmates.I am honored to have been chosen to speak before my classmates along with the students across America today.",
            "sentences": [
                {
                    "sentence_id": 0,
                    "begin_time": 240,
                    "end_time": 6720,
                    "language": "en",
                    "emotion": "happy",
                    "text": "Senior staff, Principal Doris Jackson, Wakefield faculty, and of course my fellow classmates.",
                    "words": [
                        {
                            "begin_time": 240,
                            "end_time": 1120,
                            "text": "Senior ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 1120,
                            "end_time": 1200,
                            "text": "staff",
                            "punctuation": ","
                        },
                        {
                            "begin_time": 1680,
                            "end_time": 1920,
                            "text": " Principal ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 2000,
                            "end_time": 2320,
                            "text": "Doris ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 2320,
                            "end_time": 2960,
                            "text": "Jackson",
                            "punctuation": ","
                        },
                        {
                            "begin_time": 3360,
                            "end_time": 3840,
                            "text": " Wakefield ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 3840,
                            "end_time": 4480,
                            "text": "faculty",
                            "punctuation": ","
                        },
                        {
                            "begin_time": 4800,
                            "end_time": 4960,
                            "text": " and ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 4960,
                            "end_time": 5040,
                            "text": "of ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 5040,
                            "end_time": 5520,
                            "text": "course ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 5520,
                            "end_time": 5680,
                            "text": "my ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 5760,
                            "end_time": 6000,
                            "text": "fellow ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 6000,
                            "end_time": 6720,
                            "text": "classmates",
                            "punctuation": "."
                        }
                    ]
                },
                {
                    "sentence_id": 1,
                    "begin_time": 12268,
                    "end_time": 17388,
                    "language": "en",
                    "emotion": "neutral",
                    "text": "I am honored to have been chosen to speak before my classmates along with the students across America today.",
                    "words": [
                        {
                            "begin_time": 12268,
                            "end_time": 12428,
                            "text": "I ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 12428,
                            "end_time": 12508,
                            "text": "am ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 12588,
                            "end_time": 12828,
                            "text": "honored ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 12908,
                            "end_time": 12908,
                            "text": "to ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 12908,
                            "end_time": 13068,
                            "text": "have ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 13068,
                            "end_time": 13228,
                            "text": "been ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 13228,
                            "end_time": 13628,
                            "text": "chosen ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 13628,
                            "end_time": 13708,
                            "text": "to ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 13708,
                            "end_time": 14028,
                            "text": "speak ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 14028,
                            "end_time": 14268,
                            "text": "before ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 14268,
                            "end_time": 14428,
                            "text": "my ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 14428,
                            "end_time": 15148,
                            "text": "classmates ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 15308,
                            "end_time": 15468,
                            "text": "as ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 15468,
                            "end_time": 15628,
                            "text": "well ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 15628,
                            "end_time": 15788,
                            "text": "as ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 15788,
                            "end_time": 15788,
                            "text": "the ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 15788,
                            "end_time": 16188,
                            "text": "students ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 16188,
                            "end_time": 16588,
                            "text": "across ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 16588,
                            "end_time": 16988,
                            "text": "America ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 16988,
                            "end_time": 17388,
                            "text": "today",
                            "punctuation": "."
                        }
                    ]
                }
            ]
        }
    ]
}