Todos los productos
Search
Centro de documentos

Alibaba Cloud Model Studio:SDK de Python

Última actualización: Oct 12, 2026

Las interfaces clave y los parámetros de solicitud para Qwen-Omni en tiempo real mediante el SDK de Python de DashScope.

Requisitos previos

Su versión del SDK debe ser 1.26.5 o posterior. Antes de comenzar, consulte Flujo de interacción multimodal en tiempo real.

Introducción

Para usar qwen3.8-omni-flash-realtime, establezca el parámetro model del constructor de sesión en este nombre de modelo. La voz predeterminada es Tina. Para ejemplos de configuración de sesión y agregación de video del SDK de Python, consulte la guía de tiempo real.

Descargue el código de ejemplo de GitHub. Hay tres métodos de llamada disponibles:

  1. Ejemplo de conversación de audio: Captura entrada de audio en tiempo real desde el micrófono, habilita el modo VAD para detectar automáticamente el inicio y el final del habla, y admite interrupción de voz.

    El parámetro enable_turn_detection debe establecerse en True.

    Recomendamos usar auriculares para la reproducción de audio y evitar que los ecos activen la interrupción de voz.

  2. Ejemplo de conversación de audio y video: Captura entrada de audio y video en tiempo real desde el micrófono y la cámara, habilita el modo VAD para detectar automáticamente el inicio y el final del habla, y admite interrupción de voz.

    El parámetro enable_turn_detection debe establecerse en True.

    Recomendamos usar auriculares para la reproducción de audio y evitar que los ecos activen la interrupción de voz.

  3. Llamada local: Utiliza audio e imágenes locales como entrada y habilita el Modo manual, que le permite controlar manualmente el ritmo de envío.

    El parámetro enable_turn_detection debe establecerse en False.

Parámetros de solicitud

Establezca los siguientes parámetros de solicitud en el constructor (init) de la clase OmniRealtimeConversation.

Parámetro

Tipo

Descripción

model

str

El modelo Qwen-Omni a utilizar. Consulte la Lista de modelos.

callback

OmniRealtimeCallback

Instancia de callback que maneja eventos del lado del servidor.

url

str

La dirección de llamada:

  • Región de Singapur: wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime.

  • Región de Pekín: wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime

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

ImportanteAlibaba Cloud Model Studio ha lanzado dominios específicos de espacio de trabajo para las regiones de China (Beijing) y Singapur. 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 wss://dashscope.aliyuncs.com a wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapur: de wss://dashscope-intl.aliyuncs.com a wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

{WorkspaceId} es su ID de espacio de trabajo, que se encuentra en la página Workspace Details de la consola de Alibaba Cloud Model Studio. Qwen3.8-Omni-Flash-Realtime requiere los dominios específicos del espacio de trabajo mencionados anteriormente. Los modelos anteriores pueden continuar usando los dominios originales.

Configure los siguientes parámetros de solicitud con el método update_session.

Parámetro

Tipo

Descripción

output_modalities

list[MultiModality]

La modalidad de salida del modelo. Establezca [MultiModality.TEXT] para solo texto, o [MultiModality.TEXT, MultiModality.AUDIO] para ambos audio y texto.

voice

str

La voz para la salida de audio. Para ver las voces compatibles, consulte la Lista de voces.

Voces predeterminadas:

  • Modelo de la serie Qwen3.5-Omni : "Tina"

  • Modelo de la serie qwen3-omni-flash-realtime-2025-09-15: "Cherry"

input_audio_config

AudioFormatConfig

Configuración de formato de audio de entrada. Use AudioFormatConfig para establecer type (pcm o wav) y sample_rate (8000, 16000, 24000 o 48000; predeterminado: 16000 Hz) juntos.

Se aplica a qwen3.5-omni-plus-realtime y qwen3.5-omni-flash-realtime.

output_audio_config

AudioFormatConfig

Configuración de formato de audio de salida. Use AudioFormatConfig para establecer type (pcm o wav) y sample_rate (8000, 16000, 24000 o 48000) juntos. La clase usa como valor predeterminado 16000 Hz si no se proporciona ninguna frecuencia de muestreo; establezca explícitamente la tasa de salida deseada, como 24000 Hz.

Se aplica a qwen3.5-omni-plus-realtime y qwen3.5-omni-flash-realtime.

input_audio_format

AudioFormat

Argumento de formato de entrada heredado. Admite PCM_16000HZ_MONO_16BIT (PCM, 16 kHz). Para nuevas integraciones con qwen3.5-omni-plus-realtime o qwen3.5-omni-flash-realtime, use input_audio_config para establecer el formato y la frecuencia de muestreo juntos.

output_audio_format

AudioFormat

Argumento de formato de salida heredado. Admite PCM_24000HZ_MONO_16BIT (PCM, 24 kHz). Para nuevas integraciones con qwen3.5-omni-plus-realtime o qwen3.5-omni-flash-realtime, use output_audio_config para establecer el formato y la frecuencia de muestreo juntos.

smooth_output

bool

Este parámetro solo es compatible con qwen3-omni-flash-realtime-2025-09-15.

  • True: Obtener una respuesta conversacional.

  • False: Obtener una respuesta más formal, estilo escrito.

    Sin embargo, esto puede resultar en mala calidad si el contenido es difícil de leer en voz alta.
  • None: El modelo selecciona automáticamente un estilo de respuesta conversacional o formal.

instructions

str

Un mensaje del sistema que establece el objetivo o rol del modelo.

Por ejemplo: Usted es un agente de IA para un hotel de cinco estrellas. Responda las preguntas de los clientes sobre tipos de habitaciones, instalaciones, precios y políticas de reserva. Sea preciso y amable. Responda siempre con una actitud profesional y útil. No proporcione información no verificada o fuera del alcance de los servicios del hotel.

enable_input_audio_transcription

bool

Habilita el reconocimiento de voz para el audio de entrada.

input_audio_transcription_model

str

Modelo de reconocimiento de voz para la transcripción de audio de entrada. El valor siempre es qwen3-asr-flash-realtime. Este parámetro no es configurable.

turn_detection_type

str

El tipo de Detección de Actividad de Voz (VAD). Valores válidos:

  • server_vad (predeterminado): Detecta el final del habla del usuario basándose en características acústicas.

  • semantic_vad: Detecta el final del habla del usuario basándose en la validez semántica. Este modo puede filtrar el habla sin sentido, como muletillas y ruido de fondo. Este modo es compatible con Qwen3.8-Omni-Flash-Realtime y la serie Qwen3.5-Omni-Realtime.

turn_detection_threshold

float

Umbral de detección de VAD. Auméntelo en entornos ruidosos y redúzcalo en entornos silenciosos.

  • Cuanto más se acerque el valor a -1, mayor será la probabilidad de que el ruido se detecte como habla.

  • Cuanto más cerca esté el valor de 1, menos probable será que el ruido se detecte como habla.

Predeterminado: 0.2. Valores válidos: [-1.0, 1.0].

turn_detection_silence_duration_ms

int

Duración de silencio que indica el final del habla. Si se supera, el modelo activa una respuesta. Predeterminado: 800. Valores válidos: [200, 6000].

turn_detection_param

dict

Parámetros de configuración adicionales de turn_detection. Actualmente admite idle_timeout_ms (int): el tiempo de espera de inactividad en milisegundos. Se aplica solo aqwen3.5-omni-plus-realtimeyqwen3.5-omni-flash-realtimemodelos enserver_vadmodo. Después de que el servidor finaliza la reproducción de audio y el usuario permanece en silencio más allá de esta duración (sin que se active speech.started), el modelo genera proactivamente una respuesta para indicar al usuario que continúe la conversación. Rango válido: [5000, 30000].

Ejemplo: turn_detection_param={'idle_timeout_ms': 5000}

enable_search

bool

Aplica a los modelos Qwen3.8-Omni-Flash-Realtime y Qwen3.5-Omni-Realtime.

Habilita la búsqueda web. Predeterminado: false. Cuando está habilitado, el modelo puede buscar en la web para responder preguntas en tiempo real.

La llamada de herramientas (tools) y la búsqueda web (enable_search) son incompatibles. No puede habilitar ambas al mismo tiempo.

search_options

object

Opciones de búsqueda web. Surte efecto solo cuando enable_search está habilitado.

Actualmente, solo puede establecer enable_source (Boolean), que controla si se devuelven las fuentes de los resultados de búsqueda. Establezca en true para habilitar. Ejemplo: search_options={'enable_source': True}.

tools

list[dict]

Aplica a los modelos Qwen3.8-Omni-Flash-Realtime y Qwen3.5-Omni-Realtime.

Definiciones de herramientas. Cuando se proporcionan, el modelo puede llamar a herramientas externas para responder a las preguntas del usuario. Para Function Calling, el modelo no genera audio y solo devuelve los parámetros de llamada a la herramienta.

Qwen3.8-Omni-Flash-Realtime admite Function Calling y herramientas MCP en la misma sesión. Consulte eventos del cliente para la configuración de MCP y límites de llamadas MCP para cuotas. tools y enable_search son mutuamente excluyentes, incluidas las herramientas MCP.

Los siguientes campos describen las herramientas de Function Calling.

Cada herramienta es un diccionario que contiene los siguientes campos:

  • type (string, requerido): Debe establecerse en "function".

  • function (dict, requerido): La definición de la función de la herramienta. Contiene los siguientes campos:

    • name (string, requerido): El nombre personalizado de la función de la herramienta. Recomendamos usar un nombre que sea igual al nombre de la función, como get_current_weather o get_current_time.

    • description (string, opcional): Una descripción de la función de la herramienta. El modelo usa esta descripción para decidir si llamar a la función.

    • parameters (dict, opcional): Descripciones de parámetros de entrada. El modelo las usa para extraer parámetros. Si la función de la herramienta no requiere parámetros de entrada, no necesita especificar este campo. Contiene los siguientes campos:

      • type (string, requerido): Debe establecerse en "object".

      • properties (dict, opcional): Describe el nombre, el tipo de datos y la descripción de cada parámetro de entrada. La clave es el nombre del parámetro y el valor es un diccionario que contiene el tipo de datos (type) y la descripción (description).

      • required (list, opcional): Especifica qué parámetros de entrada son obligatorios.

temperature

float

Temperatura de muestreo que controla la diversidad del contenido.

Los valores más altos generan contenido más diverso; los valores más bajos generan contenido más determinista.

Valores válidos: [0, 2).

Dado que tanto temperature como top_p controlan la diversidad del contenido, le recomendamos configurar solo uno de ellos.

  • qwen3.8-omni-flash-realtime: 0.6

  • Modelo de la serie Qwen3.5-Omni-Realtime:0.7

  • qwen3-omni-flash-realtime-2025-09-15:0.9

top_p

float

Umbral de probabilidad para el muestreo de núcleo que controla la diversidad del contenido.

Los valores más altos generan contenido más diverso; los valores más bajos generan contenido más determinista.

Valores válidos: (0, 1.0].

Dado que tanto temperature como top_p controlan la diversidad del contenido, le recomendamos configurar solo uno de ellos.

Valores predeterminados de top_p:

  • qwen3.8-omni-flash-realtime: 0.95

  • Modelo de la serie Qwen3.5-Omni-Realtime:0.8

  • qwen3-omni-flash-realtime-2025-09-15:1.0

top_k

integer

Tamaño del conjunto de candidatos para el muestreo. Por ejemplo, 50 significa que solo los 50 tokens con mayor puntuación forman el conjunto de candidatos. Los valores más grandes aumentan la aleatoriedad; los valores más pequeños aumentan el determinismo. Configure en None o un valor mayor que 100 para deshabilitar top_k y usar solo top_p.

El valor debe ser mayor o igual a 0.

Valores predeterminados de top_k:

  • qwen3.8-omni-flash-realtime: 20

  • Modelo de la serie Qwen3.5-Omni-Realtime:20

  • qwen3-omni-flash-realtime-2025-09-15:50

max_tokens

integer

Número máximo de tokens a devolver.

max_tokens no afecta el proceso de generación del LLM. Si la cantidad de tokens generados por el modelo supera max_tokens, el contenido devuelto se trunca.

Para qwen3.8-omni-flash-realtime, el rango válido es [1, 65536]. Para otros modelos, los valores predeterminados y máximos equivalen a la longitud máxima de salida del modelo. Consulte la consola de Model Studio para más detalles.

Utilice max_tokens para limitar la longitud de salida al generar resúmenes, palabras clave, controlar costos o reducir el tiempo de respuesta.

repetition_penalty

float

Controla la repetición en secuencias generadas. Los valores más altos reducen la repetición. 1.0 significa sin penalización. qwen3.8-omni-flash-realtime también acepta 0. Para otros modelos, el valor debe ser mayor que 0.

Valores predeterminados de repetition_penalty:

  • qwen3.8-omni-flash-realtime: 0

  • Modelo de la serie Qwen3.5-Omni-Realtime:1.0

  • Otros modelos: 1.05

presence_penalty

float

Controla la repetición de contenido en la salida del modelo.

Valores válidos: [-2.0, 2.0]. Los valores positivos reducen la repetición; los valores negativos la aumentan.

Valores predeterminados de presence_penalty:

  • qwen3.8-omni-flash-realtime: 1

  • Modelo de la serie Qwen3.5-Omni-Realtime:1.5

  • Otros modelos: 0.0

Escenarios:

Los valores más altos son adecuados para escenarios que requieren diversidad o creatividad, como escritura creativa o lluvia de ideas.

Los valores más bajos son adecuados para escenarios que requieren consistencia o precisión técnica, como documentos técnicos.

seed

integer

Hace que la generación sea más determinista, asegurando resultados consistentes entre ejecuciones.

Pasar la misma semilla con parámetros idénticos produce el mismo resultado en la medida de lo posible.

Valores válidos: 0 a 231−1. Valor predeterminado: -1.

Interfaces clave

Clase OmniRealtimeConversation

Importe con from dashscope.audio.qwen_omni import OmniRealtimeConversation.

Firma del método

Evento de respuesta del lado del servidor (entregado mediante callback)

Descripción

def connect(self,) -> None

Evento del lado del servidor

Sesión creada

session.updated

Configuración de sesión actualizada

Crea una conexión con el servidor.

def update_session(self,
                       output_modalities: List[MultiModality],
                       voice: str = None,
                       input_audio_format: AudioFormat = AudioFormat.PCM_16000HZ_MONO_16BIT,
                       output_audio_format: AudioFormat = AudioFormat.PCM_24000HZ_MONO_16BIT,
                       enable_input_audio_transcription: bool = True,
                       input_audio_transcription_model: str = None,
                       enable_turn_detection: bool = True,
                       turn_detection_type: str = "server_vad",
                       prefix_padding_ms: int = 300,
                       turn_detection_threshold: float = 0.2,
                       turn_detection_silence_duration_ms: int = 800,
                       turn_detection_param: dict = None,
                       input_audio_config: AudioFormatConfig = None,
                       output_audio_config: AudioFormatConfig = None,
                       **kwargs) -> None

session.updated

Configuración de sesión actualizada

Actualiza la configuración de la sesión. Para obtener detalles sobre los parámetros, consulte Parámetros de solicitud.

Después de conectarse, el servidor devuelve configuraciones de sesión predeterminadas. Llame a este método inmediatamente después de conectarse para actualizar la configuración.

Cuando el servidor recibe el evento session.update, valida los parámetros. Los parámetros no válidos devuelven un error; de lo contrario, el servidor actualiza la configuración de la sesión.

def append_audio(self, audio_b64: str) -> None

None

Anexa audio codificado en Base64 al búfer de entrada en la nube. El búfer es un almacenamiento temporal en el que se puede escribir y confirmar posteriormente.

  • Si "turn_detection" está habilitado, el búfer de audio se usa para la detección de voz y el servidor decide cuándo confirmar.
  • Si "turn_detection" está deshabilitado, el cliente puede enviar hasta 15 MiB de audio por evento. Transmitir bloques más pequeños hace que el VAD sea más receptivo.
def append_video(self, video_b64: str) -> None

None

Agrega datos de imagen codificados en Base64 al búfer de video en la nube. Acepta imágenes locales o capturas de transmisiones de video en tiempo real.

Límites de entrada de imagen:

  • El formato de imagen debe ser JPG o JPEG. La resolución de imagen recomendada es 480p o 720p, con un máximo de 1080p.
  • Una sola imagen después de la codificación Base64 no debe exceder 256 KB. Recomendamos mantener el tamaño de la imagen sin procesar por debajo de 190 KB antes de la codificación.
  • Los datos de la imagen deben estar codificados en Base64.
  • Le recomendamos enviar imágenes al servidor con una frecuencia de 1 imagen por segundo.
def clear_appended_audio(self, ) -> None

input_audio_buffer.cleared

Elimina el audio recibido por el servidor

Elimina el audio del búfer en la nube actual.

def commit(self, ) -> None

input_audio_buffer.committed

El servidor recibió el audio confirmado

Confirma el audio y el video desde el búfer en la nube. Devuelve un error si el búfer está vacío.

  • Si "turn_detection" está habilitado, el cliente no necesita enviar este evento. El servidor confirma automáticamente el búfer de audio.
  • Si "turn_detection" está deshabilitado, el cliente debe confirmar el búfer de audio para crear un elemento de mensaje de usuario.

Nota:

  1. Si la transcripción de audio está configurada para la sesión mediante input_audio_transcription, el sistema transcribe el audio.
  2. Confirmar el búfer de audio de entrada no genera una respuesta del modelo.
def create_response(self,
        instructions: str = None,
        output_modalities: list[MultiModality] = None) -> None

Evento del lado del servidor

El servidor comienza a generar una respuesta

response.output_item.added

Nuevo contenido de salida disponible en la respuesta

Evento del lado del servidor

Elemento de conversación creado

response.content_part.added

Nuevo contenido de salida agregado al elemento de mensaje del asistente

response.audio_transcript.delta

Texto transcrito generado incrementalmente

response.audio.delta

Audio generado incrementalmente por el modelo

response.audio_transcript.done

Transcripción de texto completada

response.audio.done

Generación de audio completada

response.content_part.done

La transmisión de contenido de texto o audio para el mensaje del asistente ha terminado

response.output_item.done

La transmisión del elemento de salida completo para el mensaje del asistente ha terminado

response.done

Respuesta completada

Indica al servidor que cree una respuesta del modelo.

Cuando configura una sesión en modo "turn_detection", el servidor crea automáticamente una respuesta del modelo.

def cancel_response(self, ) -> None

None

Cancela la respuesta en curso. Si no hay ninguna respuesta que cancelar, el servidor responde con un error.

def create_item(self, item: dict) -> None

None

Envía un evento conversation.item.create al servidor.

Para un resultado de herramienta de Function Calling, item es un diccionario con estos campos:

  • type: Debe ser function_call_output.
  • call_id: El call_id del evento response.function_call_arguments.done.
  • output: Una cadena que contiene el resultado de la ejecución de la herramienta.

Para la aprobación de MCP, el mismo evento utiliza item.type="mcp_approval_response". Consulte Respuesta de aprobación de MCP para ver sus campos.

def close(self, ) -> None

None

Finaliza la tarea y cierra la conexión.

def get_session_id(self) -> str

None

Obtiene el session_id de la tarea actual.

def get_last_response_id(self) -> str

None

Obtiene el response_id de la última respuesta.

Clase de configuración AudioFormatConfig

Importe AudioFormatConfig, AudioFormatType y AudioSampleRate desde dashscope.audio.qwen_omni. La clase establece el formato de audio y la frecuencia de muestreo juntos. Se aplica a qwen3.5-omni-plus-realtime y qwen3.5-omni-flash-realtime.

En una OmniRealtimeConversation ya conectada, use valores enum o valores literales:

from dashscope.audio.qwen_omni import (
    AudioFormatConfig, AudioFormatType, AudioSampleRate, MultiModality,
)

# Option 1: use enum values.
conversation.update_session(
    output_modalities=[MultiModality.AUDIO, MultiModality.TEXT],
    voice="Tina",
    input_audio_config=AudioFormatConfig(
        type=AudioFormatType.PCM,
        sample_rate=AudioSampleRate.SAMPLE_RATE_16K,
    ),
    output_audio_config=AudioFormatConfig(
        type=AudioFormatType.WAV,
        sample_rate=AudioSampleRate.SAMPLE_RATE_24K,
    ),
)

# Option 2: use literal values.
conversation.update_session(
    output_modalities=[MultiModality.AUDIO, MultiModality.TEXT],
    voice="Tina",
    input_audio_config=AudioFormatConfig(type="pcm", sample_rate=16000),
    output_audio_config=AudioFormatConfig(type="wav", sample_rate=24000),
)

Interfaz de callback (OmniRealtimeCallback)

El servidor devuelve eventos de respuesta y datos mediante callbacks. Implemente métodos de callback para procesar las respuestas del servidor.

Importe con from dashscope.audio.qwen_omni import OmniRealtimeCallback.

Método

Parámetros

Valor de retorno

Descripción

def on_open(self) -> None

None

None

Llamado después de establecer la conexión con el servidor.

def on_event(self, message: str) -> None

message: Un evento de respuesta del lado del servidor.

None

Contiene respuestas de llamadas a la interfaz y texto y audio generados por el modelo. Consulte Eventos del lado del servidor.

def on_close(self, close_status_code, close_msg) -> None

close_status_code: El código de estado para cerrar el WebSocket.

close_msg: El mensaje de cierre para el WebSocket.

None

Llamado después de que el servidor cierra la conexión.

FAQ

P: ¿Cómo alineo el audio de entrada y las imágenes?

El modelo en tiempo real Qwen-Omni utiliza la transmisión de audio como línea de tiempo de entrada. Las imágenes se insertan en la transmisión de audio según el momento en que se envían. Puede agregar imágenes en cualquier punto de la línea de tiempo de audio.

En escenarios de interacción en tiempo real, puede habilitar o deshabilitar la entrada de video en cualquier momento.

P: ¿Cuál es la frecuencia recomendada para ingresar imágenes y audio?

En escenarios de interacción en tiempo real, recomendamos enviar imágenes a una tasa de cuadros de 1 o 2 fps y enviar audio en paquetes de 100 ms.

P: ¿Cuáles son las diferencias entre los dos modos del interruptor turn_detection?

Cuando turn_detection está habilitado, admite dos modos: server_vad y semantic_vad:

  • Habilitar "turn_detection":

    • Estado de entrada: El VAD basado en la nube detecta el final de una oración en el audio de entrada y activa inmediatamente la inferencia de Qwen-Omni para devolver el texto y el habla de respuesta.
    • Estado de respuesta: En este estado, puede continuar enviando entradas de audio y video sin interrupción mientras el modelo responde. Una vez completada la respuesta, el estado vuelve al estado de entrada para esperar la siguiente entrada de voz.
    • Interrupción: Si el usuario comienza a hablar mientras el modelo responde, se activa una interrupción. El servicio detiene inmediatamente la respuesta actual y cambia al estado de entrada.
  • Deshabilitar "turn_detection":

    • Debe determinar manualmente el final de una ronda de entrada de audio y video y activar la inferencia de Qwen-Omni para obtener una respuesta utilizando commit y create_response.
    • Mientras el modelo responde, debe dejar de enviar entradas de audio y video. Solo puede reanudar la entrada para la siguiente ronda después de que el modelo haya terminado de responder.
    • Debe usar el método cancel_response para interrumpir la respuesta del modelo.

Tenga en cuenta que cuando turn_detection está habilitado, aún puede activar activamente una respuesta usando commit y create_response, e interrumpirla activamente usando cancel_response.

P: ¿Por qué necesito seleccionar otro modelo para input_audio_transcription?

Qwen-Omni real-time es un modelo multimodal de extremo a extremo. Su salida de texto es una respuesta a la entrada, no una transcripción directa del audio de entrada. Se requiere un modelo ASR independiente para la transcripción. Actualmente, el modelo está determinado por la configuración integrada y no es configurable.