Tradução de apoio para consulta. Código e identificadores técnicos preservados. Consultar referência original ↗
SDK do LiveTranslate para Python
SDK Python do LiveTranslate
Use o DashScope SDK para Python para chamar Qwen-LiveTranslate para tradução de fala em tempo real.
Guia do usuário: Para tutoriais e exemplos completos, consulte Tradução em tempo real.
Pré-requisitos
- Instale o SDK. Certifique-se de que a versão do SDK do DashScope seja 1.25.6 ou posterior.
- Obtenha uma chave API.
Parâmetros de solicitação
Defina-os no OmniRealtimeConversation construtor:
Clique para ver o código de amostra.
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',
url='wss://maas.qwencloudapi.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 = conversation
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
model |
str |
Sim | O nome do modelo a ser usado. Defina isso como qwen3.5-livetranslate-flash-realtime (recomendado). |
callback |
OmniRealtimeCallback |
Sim | Objeto de retorno de chamada que manipula eventos do servidor. |
url |
str |
Não | Ponto final do serviço: wss://maas.qwencloudapi.com/api-ws/v1/realtime. O padrão é o endpoint DashScope. |
Defina-os com OmniRealtimeConversation.update_session:
Clique para ver o código de amostra.
# 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 | Obrigatório | Descrição |
|---|---|---|---|
output_modalities |
List[MultiModality] |
Não | Tipos de saída. Padrão: [MultiModality.TEXT, MultiModality.AUDIO]. Valores válidos: [MultiModality.TEXT] (somente texto) ou [MultiModality.TEXT, MultiModality.AUDIO] (texto e áudio). |
voice |
str |
Não | Voz para saída de áudio. Padrão: Tina. Consulte Vozes suportadas. |
input_audio_transcription_model |
str |
Não | Definir como qwen3-asr-flash-realtime para obter resultados de reconhecimento de fala para o idioma de origem. |
translation_params |
TranslationParams |
Não | Configurações de tradução. |
enable_turn_detection |
bool |
Não | Se deve ativar VAD (detecção de atividade de voz). Valor padrão: True, que ativa o modo VAD, onde o servidor detecta automaticamente o início/fim da fala e aciona a tradução. Definir como False para mudar para o modo Manual, onde o cliente envia áudio manualmente por meio do commit método. Para descrições detalhadas dos parâmetros, consulte o turn_detection descrição em Eventos do cliente documento. |
Defina-os no TranslationParams construtor:
Clique para ver o código de amostra.
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 | Obrigatório | Descrição |
|---|---|---|---|
language |
str |
Não | Código do idioma de destino. Padrão: en. Consulte Idiomas suportados. |
corpus |
TranslationParams.Corpus |
Não | Configurações de hotword para melhorar a precisão de termos específicos. |
corpus.phrases |
dict |
Não | Mapa de hotword (chave: termo de origem, valor: tradução de destino). Exemplo: {'Inteligencia Artificial': 'Artificial Intelligence'} |
Interfaces principais
Classe OmniRealtimeConversation
Importar: from dashscope.audio.qwen_omni import OmniRealtimeConversation
| Assinatura do método | Evento do servidor (via retorno de chamada) | Descrição |
|---|---|---|
def connect(self) -> None: |
Evento do servidor: Sessão criada; Evento do servidor: Configuração da sessão atualizada | Conecta-se ao servidor. |
def update_session(self, output_modalities: List[MultiModality], voice: str = None, translation_params: TranslationParams = None, **kwargs) -> None: |
Evento do servidor: Sessão atualizada | Atualiza as configurações da sessão. Ligue logo após conectar. Se não for chamado, os padrões serão aplicados. Veja o OmniRealtimeConversation.update_session parâmetros. |
def end_session(self, timeout: int = 20) -> None: |
sessão.terminada: O servidor finaliza a tradução e encerra a sessão | Termina a sessão. O servidor termina qualquer tradução restante antes de fechar. |
def append_audio(self, audio_b64: str) -> None: |
Nenhum | Envia áudio codificado em Base64 para o buffer de entrada. O servidor detecta automaticamente os limites da fala e aciona a tradução. |
def commit(self) -> None: |
entrada_audio_buffer.comprometido: Buffer de áudio de entrada confirmado | No modo Manual, envie o áudio previamente anexado ao buffer do servidor através do append_audio método. O servidor começa automaticamente a gerar respostas de tradução após o recebimento. No modo VAD, este método não precisa ser chamado, pois o servidor é confirmado automaticamente. |
def clear_appended_audio(self) -> None: |
entrada_audio_buffer.cleared: Buffer de áudio de entrada limpo | Limpe os dados de áudio não confirmados no buffer do servidor atual. |
def close(self) -> None: |
Nenhum | Interrompe a tarefa e fecha a conexão. |
def get_session_id(self) -> str: |
Nenhum | Retorna o ID da sessão atual. |
def get_last_response_id(self) -> str: |
Nenhum | Retorna o último ID de resposta. |
Interface de retorno de chamada (OmniRealtimeCallback)
O servidor envia eventos ao cliente por meio de retornos de chamada. Herde esta classe e implemente seus métodos para lidar com eles.
Importar: from dashscope.audio.qwen_omni import OmniRealtimeCallback
| Assinatura do método | Parâmetros | Descrição |
|---|---|---|
def on_open(self) -> None: |
Nenhum | Chamado quando a conexão WebSocket é aberta. |
def on_event(self, message: dict) -> None: |
mensagem: evento do servidor | Chamado quando um evento do servidor chega. |
def on_close(self, close_status_code, close_msg) -> None: |
close_status_code: Código de status. close_msg: Mensagem de registro. | Chamado quando a conexão WebSocket é fechada. |
Exemplo completo
Este exemplo grava o áudio do microfone e o traduz em tempo real.
Exemplo de código para tradução em tempo real a partir do microfone
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():
if not os.environ.get("DASHSCOPE_API_KEY"):
print("Set the DASHSCOPE_API_KEY environment variable.")
sys.exit(1)
pya = pyaudio.PyAudio()
speaker = pya.open(
format=pyaudio.paInt16,
channels=1,
rate=24000,
output=True,
frames_per_buffer=2400
)
mic = pya.open(
format=pyaudio.paInt16,
channels=1,
rate=16000,
input=True,
frames_per_buffer=1600
)
callback = Callback(speaker=speaker)
conversation = OmniRealtimeConversation(
model="qwen3.5-livetranslate-flash-realtime",
url="wss://maas.qwencloudapi.com/api-ws/v1/realtime",
callback=callback
)
conversation.connect()
translation_params = TranslationParams(
language="en",
corpus=TranslationParams.Corpus(
phrases={
"Source Term 1": "Target Translation 1",
"Source Term 2": "Target Translation 2"
}
)
)
conversation.update_session(
output_modalities=[MultiModality.TEXT, MultiModality.AUDIO],
input_audio_transcription_model="qwen3-asr-flash-realtime",
voice="Tina",
translation_params=translation_params,
)
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.")
while True:
audio_data = mic.read(1600, exception_on_overflow=False)
conversation.append_audio(base64.b64encode(audio_data).decode("ascii"))
if __name__ == "__main__":
main()