Utilisez le SDK DashScope pour Python afin d'appeler Qwen-LiveTranslate pour la traduction vocale en temps réel.
Prérequis
- Installez le SDK. Vérifiez que votre version du SDK DashScope est 1.25.6 ou ultérieure.
- Obtenez une clé API.
ImportantAlibaba Cloud Model Studio a publié des domaines spécifiques aux espaces de travail pour les régions Chine (Pékin) et Singapour. Ces nouveaux domaines dédiés offrent des performances supérieures et une stabilité accrue pour les requêtes d'inférence. Nous vous recommandons de migrer vers ces nouveaux domaines :
- Chine (Pékin) : de
wss://dashscope.aliyuncs.comàwss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com - Singapour : de
wss://dashscope-intl.aliyuncs.comàwss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com
{WorkspaceId} correspond à l'ID de votre espace de travail, disponible sur la page Workspace Details dans la console Alibaba Cloud Model Studio. Le domaine existant reste pleinement fonctionnel.
Paramètres de requête
-
Définissez les paramètres suivants dans le constructeur de la classe
OmniRealtimeConversation.Cliquez pour afficher l'exemple de code
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 = conversationParamètre Type Obligatoire Description modelstrOui
Nom du modèle à utiliser. Définissez cette valeur sur
qwen3.5-livetranslate-flash-realtime(recommandé).callbackOmniRealtimeCallbackOui
Instance de rappel pour gérer les événements côté serveur.
urlstrOui
Endpoint du service pour la traduction en temps réel :
- Chine (Pékin) :
wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime - Singapour :
wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime
Remplacez
{WorkspaceId}par votre véritable ID d'espace de travail. - Chine (Pékin) :
-
Configurez les paramètres ci-dessous via la méthode
update_sessionde la classeOmniRealtimeConversation.Cliquez pour afficher l'exemple de code
# 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, )Paramètre Type Obligatoire Description output_modalitiesList[MultiModality]Non
Format de sortie des résultats de traduction.
Valeur par défaut :
[MultiModality.TEXT, MultiModality.AUDIO].Valeurs valides :
[MultiModality.TEXT]: Sortie texte uniquement[MultiModality.TEXT, MultiModality.AUDIO]: Sortie texte et audio
voicestrNon
Voix utilisée pour la sortie audio.
Valeur par défaut :
- Qwen3.5-LiveTranslate-Flash-Realtime :
Tina
Valeurs valides : Voix prises en charge.
input_audio_transcription_modelstrNon
Définissez ce paramètre sur
qwen3-asr-flash-realtimepour recevoir les résultats de reconnaissance vocale dans la langue source.translation_paramsTranslationParamsNon
Paramètres de traduction (langue cible et mots-clés).
enable_turn_detectionboolNon
Active ou désactive la détection d'activité vocale (VAD).
Valeur par défaut :
True, ce qui active le mode VAD où le serveur détecte automatiquement le début et la fin de la parole pour déclencher la traduction.Définissez cette valeur sur
Falsepour passer en mode manuel, où le client soumet explicitement l'audio via la méthodecommit. Pour une description détaillée des paramètres, consultez la sectionturn_detectiondans le document Événements client. -
Spécifiez les paramètres suivants dans le constructeur de la classe
TranslationParams.Cliquez pour afficher l'exemple de code
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' } ) )Paramètre
Type
Obligatoire
Description
languagestrNon
Langue cible de la traduction.
Valeur par défaut :
en.Valeurs valides : Langues prises en charge.
corpusTranslationParams.CorpusNon
Tableau de mots-clés permettant d'améliorer la précision de traduction pour des termes spécifiques.
corpus.phrasesdictNon
Dictionnaire de correspondance des mots-clés, où les clés sont les termes sources et les valeurs leurs traductions cibles.
Exemple :
{'Inteligencia Artificial': 'Artificial Intelligence'}
Interfaces principales
Classe OmniRealtimeConversation
Importation : from dashscope.audio.qwen_omni import OmniRealtimeConversation
| Signature de la méthode | Événement de réponse serveur (envoyé via rappel) | Description |
|---|---|---|
|
| Établit la connexion au serveur. |
| Session mise à jour
| Met à jour la configuration de la session. Appelez cette méthode immédiatement après la connexion. En son absence, les configurations par défaut s'appliquent. |
|
| Termine la session. Le serveur effectue le dernier traitement de traduction. |
| Aucun | Envoie des fragments audio encodés en Base64 au serveur. La détection de la parole et la traduction s'effectuent automatiquement. |
|
| En mode manuel, valide l'audio précédemment ajouté au tampon serveur via la méthode |
|
| Efface les données audio non validées présentes dans le tampon serveur actuel. |
| Aucun | Arrête la tâche et ferme la connexion. |
| Aucun | Récupère l'ID de session. |
| Aucun | Récupère l'ID de la dernière réponse. |
Interface de rappel (OmniRealtimeCallback)
Recevez les événements et les données du serveur par le biais de rappels.
Héritez de cette classe et implémentez ses méthodes pour traiter les événements provenant du serveur.
Importation : from dashscope.audio.qwen_omni import OmniRealtimeCallback
| Signature de la méthode | Paramètres | Description |
|---|---|---|
| Aucun | Appelé lors de l'ouverture de la connexion WebSocket. |
| message : Événement serveur | Appelé lorsque le serveur envoie un événement. |
| close_status_code : Code d'état. close_msg : Message de journal lors de la fermeture de la connexion WebSocket. | Appelé lors de la fermeture de la connexion WebSocket. |
Exemple complet
Cet exemple capture l'audio du microphone et le traduit en temps réel.
Exemple de code pour la traduction en temps réel depuis un microphone
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()