跳转到主要内容
Qwen-Livetranslate-Realtime

实时音视频翻译(Qwen-LiveTranslate)Python SDK-API参考

本文档介绍如何使用 DashScope Python SDK 调用实时音视频翻译(Qwen-LiveTranslate)模型。

前提条件

  1. 安装SDK,确保DashScope SDK版本不低于1.25.6。
  2. 获取与配置 API Key。

请求参数

  • 以下参数通过OmniRealtimeConversation的构造方法设置。
from dashscope.audio.qwen_omni import (
    OmniRealtimeConversation,
    OmniRealtimeCallback,
    MultiModality,
)
from dashscope.audio.qwen_omni.omni_realtime import TranslationParams

class MyCallback(OmniRealtimeCallback):
    """实时翻译回调处理"""
    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):
        # 处理增量音频数据
        audio_b64 = response.get('delta', '')
        # 可将音频数据解码后播放或保存

conversation = OmniRealtimeConversation(
    model='qwen3.5-livetranslate-flash-realtime',
    url='wss://maas.qianwenaiapi.com/api-ws/v1/realtime',
    callback=MyCallback(conversation=None)  # 暂时传None,稍后注入
)
# 注入自身到回调
conversation.callback.conversation = conversation
参数类型是否必须说明
modelstr是指定要使用的模型名称,推荐使用qwen3.5-livetranslate-flash-realtime。 > qwen3-livetranslate-flash-realtime为旧版模型。
callback回调接口(OmniRealtimeCallback)是用于处理服务端事件的回调对象实例。
urlstr是服务地址,固定为 wss://maas.qianwenaiapi.com/api-ws/v1/realtime。
  • 以下参数通过OmniRealtimeConversation的update_session方法设置。
# 设置翻译参数
translation_params = TranslationParams(
    language='en',  # 目标语言
    corpus=TranslationParams.Corpus(
        phrases={
            '人工智能': 'Artificial Intelligence',
            '机器学习': 'Machine Learning'
        }
    )
)

# 更新会话配置
conversation.update_session(
    output_modalities=[MultiModality.TEXT, MultiModality.AUDIO],
    voice='Tina',
    translation_params=translation_params,
)
参数类型是否必须说明
output_modalitiesList[MultiModality]否模型输出模态。
默认值:[MultiModality.TEXT, MultiModality.AUDIO]。
取值范围:
  • [MultiModality.TEXT]:仅输出文本
  • [MultiModality.TEXT, MultiModality.AUDIO]:输出文本和音频
voicestr是生成音频的音色。
默认值:
  • Qwen3.5-LiveTranslate-Flash-Realtime默认音色为: Tina
  • Qwen3-LiveTranslate-Flash-Realtime默认音色为: Cherry
可选值:参见支持的音色。
input_audio_transcription_modelstr否将input_audio_transcription_model设为qwen3-asr-flash-realtime,服务端将返回源语言语音识别结果。
translation_paramsTranslationParams否翻译相关配置。
enable_turn_detectionbool否是否启用 VAD(语音活动检测)。
默认值:True,即启用 VAD 模式,服务端自动检测语音起止并自动触发翻译。
设为False可切换为 Manual 模式,由客户端通过commit方法手动提交音频。详细参数说明参见turn_detection object (可选) 语音活动检测(VAD,Voice Activity Detection)配置,用于控制语音起止的检测方式: 设为配置对象(默认值):启用 VAD 模式。服务端自动检测语音起止,自动提交音频缓冲区并触发翻译响应,客户端无需发送input_audio_buffer.commit事件。 设为null:启用 Manual 模式。由客户端通过input_audio_buffer.commit事件手动提交音频缓冲区,服务端收到后自动开始生成翻译响应。 属性 type string (可选) VAD 类型,固定为server_vad。 threshold float (可选) VAD 检测灵敏度。值越低,越容易将微弱声音(包括背景噪音)识别为语音;值越高,需要更清晰、音量更大的语音才能触发。 取值范围:[-1.0, 1.0],默认值为 0.2。 silence_duration_ms integer (可选) 语音结束后需保持静音的最短时长(毫秒)。超过该时长后判定语音结束,服务端自动提交音频缓冲区并触发翻译响应。 取值范围:[200, 6000],默认值为 1000。。
  • 以下参数通过TranslationParams的构造方法设置。
translation_params = TranslationParams(
    language='en',  # 目标语言代码
    corpus=TranslationParams.Corpus(
        phrases={
            '人工智能': 'Artificial Intelligence',  # 源语言词: 目标语言翻译
            '机器学习': 'Machine Learning'
        }
    )
)
参数类型是否必须说明
languagestr否翻译目标语言代码。
默认值:en。
可选值:参见支持的语种。
corpusTranslationParams.Corpus否热词配置,用于提升特定词汇的翻译准确性。
corpus.phrasesdict否热词映射表。key 为源语言词汇,value 为目标语言对应翻译。
示例:{'人工智能': 'Artificial Intelligence'}

关键接口

OmniRealtimeConversation类

OmniRealtimeConversation通过from dashscope.audio.qwen_omni import OmniRealtimeConversation方法引入。
方法签名服务端响应事件(通过回调下发)说明
示例 1 请参见表格下方服务端事件 > 会话已创建 服务端事件 > 会话配置已更新和服务端创建连接。
示例 2 请参见表格下方服务端事件 > 会话已更新用于更新会话配置,建议在连接建立后首先调用该方法进行设置。若未调用该方法,系统将使用默认配置。只需关注OmniRealtimeConversation的update_session方法涉及的参数。
示例 3 请参见表格下方session.finished > 服务端完成语音翻译,结束会话通知服务端结束会话,服务端收到会话结束通知后将完成最后的语音翻译。
示例 4 请参见表格下方无将Base64编码后的音频数据片段追加到云端输入音频缓冲区。服务端会自动检测语音起止并触发翻译。
示例 5 请参见表格下方input_audio_buffer.committed > 输入音频缓冲区已提交Manual 模式下,提交之前通过append_audio方法追加到云端缓冲区的音频,服务端收到后自动开始生成翻译响应。VAD 模式下无需调用此方法,服务端会自动提交。
示例 6 请参见表格下方input_audio_buffer.cleared > 输入音频缓冲区已清空清空当前云端缓冲区中尚未提交的音频数据。
示例 7 请参见表格下方无终止任务,并关闭连接。
示例 8 请参见表格下方无获取当前任务的session_id。
示例 9 请参见表格下方无获取最近一次response的response_id。
示例 1(方法签名):
def connect(self) -> None:
示例 2(方法签名):
def update_session(self,
    output_modalities: List[MultiModality],
    voice: str = None,
    translation_params: TranslationParams = None,
    **kwargs) -> None:
示例 3(方法签名):
def end_session(self, timeout: int = 20) -> None:
示例 4(方法签名):
def append_audio(self, audio_b64: str) -> None:
示例 5(方法签名):
def commit(self) -> None:
示例 6(方法签名):
def clear_appended_audio(self) -> None:
示例 7(方法签名):
def close(self) -> None:
示例 8(方法签名):
def get_session_id(self) -> str:
示例 9(方法签名):
def get_last_response_id(self) -> str:

回调接口(OmniRealtimeCallback)

服务端会通过回调的方式,将服务端响应事件和数据返回给客户端。 继承此类并实现相应方法以处理服务端事件。 通过from dashscope.audio.qwen_omni import OmniRealtimeCallback引入。
方法签名参数说明
示例 1 请参见表格下方无WebSocket连接成功建立时触发。
示例 2 请参见表格下方message:服务端事件收到服务端事件时触发。
示例 3 请参见表格下方close_status_code:状态码 close_msg:WebSocket连接关闭时的日志信息WebSocket连接关闭时触发。
示例 1(方法签名):
def on_open(self) -> None:
示例 2(方法签名):
def on_event(self, message: dict) -> None:
示例 3(方法签名):
def on_close(self, close_status_code, close_msg) -> None:

完整示例

以下示例展示如何从麦克风实时录音并进行翻译。
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):
    """实时翻译回调处理类"""

    def __init__(self, speaker):
        self.speaker = speaker

    def on_open(self):
        print("[连接已建立]")

    def on_close(self, code, msg):
        print(f"[连接已关闭] code: {code}, msg: {msg}")

    def on_event(self, response):
        event_type = response.get("type", "")
        if event_type == "input_audio_buffer.speech_started":
            print("====== 检测到语音输入 ======")
        elif event_type == "input_audio_buffer.speech_stopped":
            print("====== 语音输入结束 ======")
        elif event_type == "conversation.item.input_audio_transcription.completed":
            print(f"[原文] {response.get('transcript', '')}")
        elif event_type == "response.audio_transcript.done":
            print(f"[翻译结果] {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"[错误] {response.get('error', {}).get('message', '')}")

def main():
    # 检查 API Key
    if not os.environ.get("DASHSCOPE_API_KEY"):
        print("请设置环境变量 DASHSCOPE_API_KEY")
        sys.exit(1)

    # 初始化 PyAudio
    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.qianwenaiapi.com/api-ws/v1/realtime",
        callback=callback
    )

    # 连接服务端
    conversation.connect()

    # 配置翻译参数
    translation_params = TranslationParams(
        language="en",  # 翻译目标语言:英语
        corpus=TranslationParams.Corpus(
            phrases={
                "人工智能": "Artificial Intelligence",
                "机器学习": "Machine Learning"
            }
        )
    )

    # 更新会话配置
    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[正在退出...]")
        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("[开始实时翻译] 请对着麦克风说话,按 Ctrl+C 退出")

    # 持续采集麦克风音频并发送
    while True:
        audio_data = mic.read(1600, exception_on_overflow=False)
        conversation.append_audio(base64.b64encode(audio_data).decode("ascii"))

if __name__ == "__main__":
    main()