Utilice el SDK de DashScope para Python para llamar a Qwen-LiveTranslate para la traducción de voz en tiempo real.
Requisitos previos
- Instale el SDK. Asegúrese de que su versión del SDK de DashScope sea 1.25.6 o posterior.
- Obtener una clave de API.
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.comawss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com - Singapur: de
wss://dashscope-intl.aliyuncs.comawss://{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. El dominio existente permanece totalmente funcional.
Parámetros de solicitud
-
Establezca los siguientes parámetros en el constructor de la clase
OmniRealtimeConversation.Haga clic para ver código de ejemplo
from dashscope.audio.qwen_omni import ( OmniRealtimeConversation, OmniRealtimeCallback, MultiModality, ) from dashscope.audio.qwen_omni.omni_realtime import TranslationParams class MyCallback(OmniRealtimeCallback): """Callback handler for real-time translation""" def __init__(self, conversation=None): self.conversation = conversation self.handlers = { 'session.created': self._handle_session_created, 'response.audio_transcript.done': self._handle_translation_done, 'response.audio.delta': self._handle_audio_delta, 'response.done': lambda r: print('======Response Done======'), 'input_audio_buffer.speech_started': lambda r: print('======Speech Start======'), 'input_audio_buffer.speech_stopped': lambda r: print('======Speech Stop======'), } def on_open(self): print('Connection opened') def on_close(self, code, msg): print(f'Connection closed, code: {code}, msg: {msg}') def on_event(self, response): try: handler = self.handlers.get(response['type']) if handler: handler(response) except Exception as e: print(f'[Error] {e}') def _handle_session_created(self, response): print(f"Session created: {response['session']['id']}") def _handle_translation_done(self, response): print(f"Translation result: {response['transcript']}") def _handle_audio_delta(self, response): # Process incremental audio data. audio_b64 = response.get('delta', '') # Decode the audio data for playback or to save it. conversation = OmniRealtimeConversation( model='qwen3.5-livetranslate-flash-realtime', # China (Beijing) region. Replace {WorkspaceId} with your Bailian workspace ID. URLs vary by region. url='wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime', callback=MyCallback(conversation=None) # Temporarily pass None. It will be injected later. ) # Inject self into the callback. conversation.callback.conversation = conversationParámetro
Tipo
Obligatorio
Descripción
modelstrSí
El nombre del modelo a utilizar. Defina este valor como
qwen3.5-livetranslate-flash-realtime(recomendado).callbackOmniRealtimeCallbackSí
Una instancia de devolución de llamada para gestionar eventos del lado del servidor.
urlstrSí
El endpoint de servicio para traducción en tiempo real:
China (Pekín):
wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtimeSingapur:
wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime
Reemplace
{WorkspaceId}con su ID de espacio de trabajo real. -
Establezca los siguientes parámetros utilizando el método
update_sessionde la claseOmniRealtimeConversation.Haga clic para ver código de ejemplo
# Set translation parameters translation_params = TranslationParams( language='en', # Target language corpus=TranslationParams.Corpus( phrases={ 'Inteligencia Artificial': 'Artificial Intelligence', 'Aprendizaje Automático': 'Machine Learning' } ) ) # Update session configuration conversation.update_session( output_modalities=[MultiModality.TEXT, MultiModality.AUDIO], voice='Tina', translation_params=translation_params, )Parámetro
Tipo
Obligatorio
Descripción
output_modalitiesList[MultiModality]No
El formato de salida para los resultados de la traducción.
Predeterminado:
[MultiModality.TEXT, MultiModality.AUDIO].Valores válidos:
[MultiModality.TEXT]: Genera salida solo de texto[MultiModality.TEXT, MultiModality.AUDIO]: Genera salida de texto y audio
voicestrNo
La voz para la salida de audio.
Predeterminado:
Qwen3.5-LiveTranslate-Flash-Realtime:
Tina
Valores válidos: Voces compatibles.
input_audio_transcription_modelstrNo
Defina este parámetro como
qwen3-asr-flash-realtimepara recibir resultados de reconocimiento de voz en el idioma de origen.translation_paramsTranslationParamsNo
Configuración de traducción (idioma objetivo y palabras clave).
enable_turn_detectionboolNo
Indica si se debe habilitar VAD (Detección de Actividad de Voz).
Valor predeterminado:
True, que habilita el modo VAD donde el servidor detecta automáticamente el inicio y fin del habla y activa la traducción.Configure como
Falsepara cambiar al modo Manual, donde el cliente envía audio manualmente mediante el métodocommit. Para descripciones detalladas de los parámetros, consulte la descripción deturn_detectionen el documento de Eventos del cliente. -
Establezca los siguientes parámetros en el constructor de la clase
TranslationParams.Haga clic para ver código de ejemplo
translation_params = TranslationParams( language='en', # Target language code corpus=TranslationParams.Corpus( phrases={ 'Inteligencia Artificial': 'Artificial Intelligence', # Source phrase: Target translation 'Aprendizaje Automático': 'Machine Learning' } ) )Parámetro
Tipo
Obligatorio
Descripción
languagestrNo
El idioma de destino para la traducción.
Predeterminado:
en.Valores válidos: Idiomas compatibles.
corpusTranslationParams.CorpusNo
Un mapeo de palabras clave para mejorar la precisión de la traducción de términos específicos.
corpus.phrasesdictNo
La tabla de mapeo de palabras clave donde las claves son términos fuente y los valores son traducciones objetivo.
Ejemplo:
{'Inteligencia Artificial': 'Artificial Intelligence'}
Interfaces clave
Clase OmniRealtimeConversation
Importación: from dashscope.audio.qwen_omni import OmniRealtimeConversation
| Firma del método | Evento de respuesta del lado del servidor (enviado mediante devolución de llamada) | Descripción |
|---|---|---|
|
| Conectarse al servidor. |
| Sesión actualizada
| Actualiza la configuración de la sesión. Llame a este método inmediatamente después de conectarse. Si no llama a este método, se aplicarán las configuraciones predeterminadas. |
|
| Finalizar la sesión. El servidor completa el procesamiento final de la traducción. |
| None | Enviar fragmentos de audio codificados en Base64 al servidor. La detección del habla y la traducción son automáticas. |
|
| En el modo Manual, envíe el audio previamente agregado al búfer del servidor mediante el método |
|
| Borrar datos de audio no confirmados en el búfer actual del servidor. |
| None | Detener la tarea y cerrar la conexión. |
| None | Obtener el ID de sesión. |
| None | Obtener el ID de la última respuesta. |
Interfaz de callback (OmniRealtimeCallback)
Recibir eventos y datos del servidor a través de devoluciones de llamada.
Herde esta clase e implemente sus métodos para gestionar eventos del servidor.
Importación: from dashscope.audio.qwen_omni import OmniRealtimeCallback
| Firma del método | Parámetros | Descripción |
|---|---|---|
| None | Se llama cuando se abre la conexión WebSocket. |
| message: Evento del lado del servidor | Se llama cuando el servidor envía un evento. |
| close_status_code: El código de estado. close_msg: El mensaje de registro cuando se cierra la conexión WebSocket. | Se llama cuando se cierra la conexión WebSocket. |
Ejemplo completo
Este ejemplo graba audio del micrófono y lo traduce en tiempo real.
Código de ejemplo para traducción en tiempo real desde un micrófono
import os
import sys
import base64
import signal
import pyaudio
from dashscope.audio.qwen_omni import (
OmniRealtimeConversation,
OmniRealtimeCallback,
MultiModality,
)
from dashscope.audio.qwen_omni.omni_realtime import TranslationParams
class Callback(OmniRealtimeCallback):
"""Callback handler class for real-time translation"""
def __init__(self, speaker):
self.speaker = speaker
def on_open(self):
print("[Connection established]")
def on_close(self, code, msg):
print(f"[Connection closed] code: {code}, msg: {msg}")
def on_event(self, response):
event_type = response.get("type", "")
if event_type == "input_audio_buffer.speech_started":
print("====== Speech input detected ======")
elif event_type == "input_audio_buffer.speech_stopped":
print("====== Speech input ended ======")
elif event_type == "conversation.item.input_audio_transcription.completed":
print(f"[Original text] {response.get('transcript', '')}")
elif event_type == "response.audio_transcript.done":
print(f"[Translation result] {response.get('transcript', '')}")
elif event_type == "response.audio.delta":
audio_b64 = response.get("delta", "")
if audio_b64:
self.speaker.write(base64.b64decode(audio_b64))
elif event_type == "error":
print(f"[Error] {response.get('error', {}).get('message', '')}")
def main():
# Check for the API key.
if not os.environ.get("DASHSCOPE_API_KEY"):
print("Set the DASHSCOPE_API_KEY environment variable.")
sys.exit(1)
# Initialize PyAudio.
pya = pyaudio.PyAudio()
# Initialize the speaker for playing back the translated audio.
speaker = pya.open(
format=pyaudio.paInt16,
channels=1,
rate=24000,
output=True,
frames_per_buffer=2400
)
# Initialize the microphone for capturing speech input.
mic = pya.open(
format=pyaudio.paInt16,
channels=1,
rate=16000,
input=True,
frames_per_buffer=1600
)
# Create a callback instance.
callback = Callback(speaker=speaker)
# Create a real-time session.
conversation = OmniRealtimeConversation(
model="qwen3.5-livetranslate-flash-realtime",
# The following is the Singapore region URL. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
url="wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime",
callback=callback
)
# Connect to the server.
conversation.connect()
# Configure translation parameters.
translation_params = TranslationParams(
language="en", # Target language for translation: English
corpus=TranslationParams.Corpus(
phrases={
"Source Term 1": "Target Translation 1",
"Source Term 2": "Target Translation 2"
}
)
)
# Update the session configuration.
conversation.update_session(
output_modalities=[MultiModality.TEXT, MultiModality.AUDIO],
input_audio_transcription_model="qwen3-asr-flash-realtime",
voice="Tina",
translation_params=translation_params,
)
# Register the exit signal handler.
def on_exit(sig, frame):
print("\n[Exiting...]")
mic.stop_stream()
mic.close()
speaker.stop_stream()
speaker.close()
pya.terminate()
conversation.end_session()
conversation.close()
sys.exit(0)
signal.signal(signal.SIGINT, on_exit)
print("[Starting real-time translation] Speak into the microphone. Press Ctrl+C to exit.")
# Continuously capture and send microphone audio.
while True:
audio_data = mic.read(1600, exception_on_overflow=False)
conversation.append_audio(base64.b64encode(audio_data).decode("ascii"))
if __name__ == "__main__":
main()