Las interfaces clave y los parámetros de solicitud para el SDK de Java DashScope en tiempo real de Qwen-Omni.
Para la conexión y la autenticación, consulte Conexión mediante WebSocket. Para consultar los campos de eventos y los ejemplos JSON, consulte Eventos del cliente y Eventos del servidor.
Su versión del SDK de Java debe ser v2.22.15 o posterior. Antes de comenzar, consulte el Flujo de interacción multimodal en tiempo real.
Para usar
Configure los siguientes parámetros de solicitud mediante los métodos encadenados o setters del objeto
Configure los siguientes parámetros de solicitud mediante los métodos encadenados o setters del objeto
Importe con
El servidor devuelve eventos de respuesta y datos mediante callbacks. Implemente métodos de callback para procesar las respuestas del servidor.
Importe con
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.
En escenarios de interacción en tiempo real, le recomendamos enviar imágenes a una tasa de cuadros de 1 o 2 fps y enviar audio en paquetes de 100 ms.
Cuando turn_detection está habilitado, admite dos modos: server_vad y semantic_vad:
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.
Requisitos previos
Su versión del SDK de Java debe ser v2.22.15 o posterior. Antes de comenzar, consulte el 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 Java, consulte la guía de tiempo real.
Descargue el código de ejemplo de GitHub. Hay tres métodos de llamada disponibles:
-
Ejemplo de conversación de audio: Captura audio en tiempo real desde un micrófono, habilita el modo de Detección de Actividad de Voz (VAD), que detecta automáticamente el inicio y el final del habla, y admite interrupción de voz.
Establezca el parámetro enableTurnDetection en
true.Utilice auriculares para la reproducción de audio y evitar que los ecos provoquen interrupciones de voz.
-
Ejemplo de conversación de audio y video: Captura audio y video en tiempo real desde un micrófono y una cámara, habilita el modo VAD y admite interrupción de voz.
Establezca el parámetro enableTurnDetection en
true.Utilice auriculares para la reproducción de audio y evitar que los ecos provoquen interrupciones de voz.
-
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.
Establezca el parámetro enableTurnDetection en
false.
Parámetros de solicitud
Configure los siguientes parámetros de solicitud mediante los métodos encadenados o setters del objeto OmniRealtimeParam y, a continuación, páselo al constructor OmniRealtimeConversation.
Parámetro | Tipo | Descripción |
|---|---|---|
model | String | El modelo Qwen-Omni a utilizar. Consulte la Lista de modelos. |
url | String | La URL del endpoint:
Reemplace |
OmniRealtimeConfig y, a continuación, páselo al método updateSession.
| Parámetro | Tipo | Descripción |
|---|---|---|
| modalities | List<OmniRealtimeModality> | La modalidad de salida del modelo. Configure [OmniRealtimeModality.TEXT] para solo texto, o [OmniRealtimeModality.TEXT, OmniRealtimeModality.AUDIO] para audio y texto. |
| voice | String | La voz para la salida de audio. Para ver las voces compatibles, consulte la Lista de voces.Voz predeterminada:
|
| inputAudioFormat | OmniRealtimeAudioFormat | El formato del audio de entrada del usuario. Actualmente solo admite PCM_16000HZ_MONO_16BIT, que representa una transmisión de audio PCM con una tasa de muestreo de 16 kHz. |
| outputAudioFormat | OmniRealtimeAudioFormat | El formato del audio de salida del modelo. Actualmente solo admite PCM_24000HZ_MONO_16BIT, que representa una transmisión de audio PCM con una tasa de muestreo de 24 kHz. |
| instructions | String | Un mensaje del sistema que establece el objetivo o rol para el modelo.Ejemplo: "Usted es un agente de servicio al cliente 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 de manera precisa y amable. Responda siempre de forma profesional y útil. No proporcione información no verificada o fuera del alcance de los servicios del hotel". Configure instructions mediante el método parameters de la instancia OmniRealtimeConfig: |
| smooth_output | Boolean | Este parámetro solo es compatible con qwen3-omni-flash-realtime-2025-09-15.
Configure |
| enableInputAudioTranscription | Boolean | Habilita el reconocimiento de voz para el audio de entrada. |
| InputAudioTranscription | String | 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. |
| enableTurnDetection | Boolean | Habilita VAD. Si está deshabilitado, debe enviar manualmente el audio para crear una respuesta. |
| turnDetectionType | String | El tipo de VAD. Valores válidos:
|
| turnDetectionThreshold | Float | Umbral de detección de VAD. Auméntelo en entornos ruidosos y redúzcalo en entornos silenciosos.
|
| turnDetectionSilenceDurationMs | Integer | 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]. |
| turnDetectionParam | Mapa | Parámetros de configuración adicionales de turn_detection. Actualmente admite idle_timeout_ms (Integer): 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: turnDetectionParam(Map.of("idle_timeout_ms", 5000)) |
| enable_search | Boolean | 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.Los parámetros La llamada a herramientas (tools) y la búsqueda web (enable_search) son incompatibles y no pueden habilitarse al mismo tiempo. |
| search_options | Object | Configuración de opciones de búsqueda web. Este parámetro solo surte efecto después de habilitar enable_search. Puede configurar enable_source (Boolean) en true para devolver una lista de fuentes de resultados de búsqueda.
|
| tools | List<Map<String, Object>> | 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 Map que contiene los siguientes campos:
|
| 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.Valores predeterminados de temperature:
Parámetro |
| 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:
|
| 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:
|
| max_tokens | Integer | Número máximo de tokens a devolver.La configuración dePara 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 Lista de modelos 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:
|
| 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:
|
| 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 import com.alibaba.dashscope.audio.omni.OmniRealtimeConversation;.
| Firma del método | Evento de respuesta del servidor (enviado mediante callback) | Descripción |
|---|---|---|
Eventos del servidorSesión creadasession.updated Configuración de sesión actualizada | Crea una conexión con el servidor. | |
session.updatedConfiguració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. | |
| 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.
| |
| 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:
| |
input_audio_buffer.clearedEl audio recibido por el servidor se borra | Elimina el audio en el búfer en la nube actual. | |
input_audio_buffer.committedEl 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.
| |
Eventos del servidorEl servidor comienza a generar una respuestaresponse.output_item.added Nuevo contenido de salida disponible en la respuestaEventos del servidor Se crea un elemento de conversaciónresponse.content_part.added Se añade nuevo contenido de salida al elemento de mensaje del asistenteresponse.audio_transcript.delta Texto transcrito generado incrementalmenteresponse.audio.delta Audio generado incrementalmente por el modeloresponse.audio_transcript.done La transcripción de texto ha terminadoresponse.audio.done La generación de audio ha terminadoresponse.content_part.done La transmisión de contenido de texto o audio para el mensaje del asistente ha terminadoresponse.output_item.done La transmisión del elemento de salida completo para el mensaje del asistente ha terminadoresponse.done La respuesta está completa | Indica al servidor que cree una respuesta del modelo.Cuando la sesión está configurada en modo "turn_detection", el servidor crea automáticamente una respuesta del modelo. | |
| None | Cancela la respuesta en curso. Si no hay ninguna respuesta disponible para cancelar, el servidor devuelve un error. | |
| None | Envía el evento conversation.item.create al servidor.Para un resultado de herramienta de Function Calling, item es un JsonObject con estos campos:
item.type="mcp_approval_response". Consulte Respuesta de aprobación de MCP para ver sus campos. | |
| None | Detiene la tarea y cierra la conexión. | |
| None | Obtiene el ID de sesión de la tarea actual. | |
| None | Obtiene el ID de respuesta de la respuesta más reciente. |
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 import com.alibaba.dashscope.audio.omni.OmniRealtimeCallback;.
| Método | Parámetro | Valor de retorno | Descripción |
|---|---|---|---|
| None | None | Se llama inmediatamente después de establecer una conexión con el servidor. | |
| message: El evento de respuesta del servidor. | None | Contiene respuestas de llamadas a la interfaz y texto y audio generados por el modelo. Consulte Eventos del servidor. | |
| code: El código de estado para cerrar el WebSocket.reason: El motivo del cierre del WebSocket. | None | Se llama después de que se cierra la conexión con el servidor. |
FAQ
P: ¿Cómo se alinean 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, le 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.