qwen3.5-livetranslate-flash-realtime 是視覺增強型即時翻譯模型,支援 60 種語言互譯(其中 29 種支援音頻+文本輸出、31 種僅支援文本輸出),可同時處理音頻與映像輸入,適用於即時視頻流或本地視頻檔案,利用視覺上下文資訊提升翻譯準確性,並即時輸出高品質的翻譯文本與音頻。
線上體驗參見通過Function Compute一鍵部署。
功能特性
- 多語言支援:支援 60 種語言互譯,其中 29 種支援音頻+文本輸出、31 種僅支援文本輸出,覆蓋中文、英語、法語、德語、俄語、日語、韓語、西班牙語、葡萄牙語、阿拉伯語等主流語種。
- 視覺增強:利用視覺內容提升翻譯準確性。模型通過分析畫面中的口型、動作和文字,改善在嘈雜環境下或一詞多義情境中的翻譯效果。
- 2.3 秒延遲:實現低至 2.3 秒的同傳延遲。
- 即時說話人分離:支援在多人交替發言時區分不同說話人及其發言內容,讓聽眾清楚了解「誰說了什麼」。
- 無損同傳:通過語義單元預測技術,解決跨語言語序問題。即時翻譯品質接近離線翻譯結果。
- 音色自然:產生音色自然的擬人語音。模型能根據源語音內容,自適應調節語氣和情感。
- 配置熱詞:通過熱詞提升特定詞彙的翻譯準確性。
- 聲音複刻:支援複刻發言人音色用於翻譯播報,讓輸出聽起來像本人說外語。支援即時複刻和使用預先複刻的固定音色。
如何使用
1. 配置串連
透過 WebSocket 接入時,需要以下配置項:
支援透過 AOQ、WebRTC 和 WebSocket 協定接入。如果是用戶端對接,且更看重穩定的延遲、弱網下的互動能力、即時雙工的降噪與回聲消除,可優先考慮 AOQ,協議對比與選型請參見Realtime API 概述。
| 配置項 | 說明 |
|---|---|
調用地址 | 華北2(北京)地區:wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime 新加坡地區:wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime 調用時請將 |
查詢參數 | 查詢參數為model,需指定為訪問的模型名。樣本: |
訊息頭 | 使用 Bearer Token 鑒權:Authorization: Bearer DASHSCOPE_API_KEY
|
可通過以下 Python 範例程式碼建立串連。
WebSocket 串連 Python範例程式碼
# pip install websocket-client
import json
import websocket
import os
API_KEY=os.getenv("DASHSCOPE_API_KEY")
API_URL = "wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime?model=qwen3.8-livetranslate-flash-realtime"
headers = [
"Authorization: Bearer " + API_KEY
]
def on_open(ws):
print(f"Connected to server: {API_URL}")
def on_message(ws, message):
data = json.loads(message)
print("Received event:", json.dumps(data, indent=2))
def on_error(ws, error):
print("Error:", error)
ws = websocket.WebSocketApp(
API_URL,
header=headers,
on_open=on_open,
on_message=on_message,
on_error=on_error
)
ws.run_forever()
2. 配置語種、輸出模態與音色
傳送 session.update,收到 session.updated 後再傳送音訊。
-
目標語言:透過
session.translation.language設定,預設為en(英語),可選值見支援的語言。使用qwen3.8-livetranslate-flash-realtime時,來源語言由模型自動識別。說明使用
qwen3.5-livetranslate-flash-realtime時,如需指定來源語言,需透過session.input_audio_transcription.language設定;省略時自動識別。 -
輸出方式:使用
qwen3.8-livetranslate-flash-realtime時,將session.output_modalities設為["text"]可僅傳回譯文,設為["text", "audio"]可同時傳回譯文和譯音(預設)。僅支援文字的目標語言必須使用["text"]。說明使用
qwen3.5-livetranslate-flash-realtime時,輸出模態欄位為session.modalities,可選值及預設值相同。 -
原文識別:使用
qwen3.8-livetranslate-flash-realtime時,原文識別始終開啟,不支援關閉。透過conversation.item.input_audio_transcription.delta接收增量,透過conversation.item.input_audio_transcription.completed接收完整結果。說明使用
qwen3.5-livetranslate-flash-realtime時,原文識別預設開啟。如需調整,需透過session.input_audio_transcription.model設定:qwen3-asr-flash-realtime表示開啟,null表示關閉。增量透過conversation.item.input_audio_transcription.text傳回,完整結果透過conversation.item.input_audio_transcription.completed傳回。 -
音訊與音色:使用
qwen3.8-livetranslate-flash-realtime時,預設輸入為 16000 Hz PCM,輸出為 24000 Hz PCM,預設音色為Tina。可透過 session.created 傳回的session.audio.output.voice查看音色。如需保留說話人的音色,參見聲音複刻。說明使用
qwen3.5-livetranslate-flash-realtime時,透過session.sample_rate、session.input_audio_format和session.output_audio_format設定音訊,透過session.voice設定音色,預設音色同樣為Tina。 -
熱詞:透過
session.translation.corpus.phrases指定品牌拼寫或固定譯法,詳見設定熱詞。說明建議熱詞不超過1000個。
{"type": "session.update", "session": {"output_modalities": ["text", "audio"], "translation": {"language": "en"}}}
3. 輸入音頻與圖片
用戶端通過 input_audio_buffer.append 和 input_image_buffer.append 事件發送 Base 64 編碼的音頻和圖片資料。音頻輸入是必需的;圖片輸入是可選的。
圖片可以來自本地檔案,或從視頻流中即時採集。
使用 qwen3.8-livetranslate-flash-realtime 時,預設採用 session.audio.input.turn_detection.type = speaker_detection,持續傳送音訊後,由服務端自動偵測語音起止並產生翻譯回應,無需逐句手動提交。配置方法與說話人標識的處理見區分發言人。
qwen3.5-livetranslate-flash-realtime:VAD 與 Manual 模式
模型判斷一段語音"說完了"的方式,取決於turn_detection參數配置的 VAD 模式或 Manual 模式:
- VAD 模式(預設):用戶端持續發送input_audio_buffer.append事件;服務端檢測到語音開始/結束時,分別返回input_audio_buffer.speech_started、input_audio_buffer.speech_stopped事件,並自動認可音頻緩衝區、觸發翻譯。翻譯響應基於流式語音同步產生,通常在語音輸入過程中就已開始,無需等待語音結束。
- Manual 模式:將
session.turn_detection設為null。用戶端發送完一段完整的語音後,主動發送input_audio_buffer.commit事件提交音頻緩衝區;服務端返回input_audio_buffer.committed事件確認後,自動開始產生翻譯響應,用戶端無需再發送其他事件觸發響應。提交前若需清空未提交的音頻,可發送input_audio_buffer.clear事件。
4. 接收模型響應
使用 qwen3.8-livetranslate-flash-realtime 時,依輸出模態接收回應:
- 原文:累加
conversation.item.input_audio_transcription.delta,透過conversation.item.input_audio_transcription.completed取得完整原文。 - 譯文:僅文字使用
response.text.delta;文字和音訊使用response.audio_transcript.delta。將同一訊息項目的delta按接收順序累加,不覆蓋先前內容。 - 譯音:將
response.audio.delta的delta欄位從 Base64 解碼,按順序播放或儲存。
response.done 表示本次翻譯回應結束,須檢查 response.status 確認是否成功;會話仍可繼續傳送音訊。
qwen3.5-livetranslate-flash-realtime:回應事件差異
-
輸出源語言識別結果
通過
session.input_audio_transcription.model參數配置。設定為qwen3-asr-flash-realtime後,服務端會在翻譯的同時返回輸入音訊語音辨識結果(源語言原文)。啟用後,服務端會返回以下事件:
conversation.item.input_audio_transcription.text:流式返回識別結果。conversation.item.input_audio_transcription.completed:識別完成後返回最終結果。conversation.item.input_audio_transcription.failed:識別失敗時返回錯誤資訊。
翻譯響應基於流式語音同步產生,通常無需等待語音結束(參見上一節 VAD/Manual 模式說明)。模型的響應格式取決於配置的輸出模態。
-
僅輸出文本
服務端通過response.text.text事件流式返回增量翻譯文本(含已確認文本和待確認的預測文本);翻譯完成後,通過response.text.done事件返回完整的翻譯文本。
-
輸出文本+音頻
-
文本
通過response.audio_transcript.text事件流式返回增量翻譯文本;翻譯完成後,通過response.audio_transcript.done事件返回完整的翻譯文本。
-
音頻
通過response.audio.delta事件返回 Base 64 編碼的增量音頻資料。
-
文本
重要即時語音翻譯模型使用 response.text.text 事件返回增量文本,與全雙工系統語音對話(Omni)模型的 response.text.delta 事件不同,兩者欄位結構和語義有差異,請勿混用。
5. 結束會話
音頻發送完畢後,用戶端必鬚髮送 session.finish 事件通知服務端,然後等待服務端返回 session.finished 事件後再關閉 WebSocket 串連。
重要如果不發送 session.finish,服務端無法得知音頻輸入已完成,會導致最後一段語音的識別和翻譯結果丟失,串連也可能長時間處於等待狀態。請務必在關閉串連前發送該事件。
支援的模型
推薦模型
| 模型名稱 | 版本 | 上下文長度 | 最大輸入 | 最大輸出 |
|---|---|---|---|---|
| (Token數) | ||||
| qwen3.8-livetranslate-flash-realtime | 穩定版 | 53,248 | 49,152 | 4,096 |
qwen3.5-livetranslate-flash-realtime
| 穩定版 | 53,248 | 49,152 | 4,096 |
qwen3.5-livetranslate-flash-realtime-2026-05-19 | 快照版 | |||
快速開始
即時翻譯麥克風輸入
-
使用 Python 3.10 或更高版本,安裝
pyaudio:macOS
brew install portaudio && pip install pyaudioDebian/Ubuntu
sudo apt-get install python3-pyaudioCentOS
sudo yum install -y portaudio portaudio-devel && pip install pyaudioWindows
pip install pyaudio安裝 WebSocket 套件:
pip install websocket-client。 -
設定以下環境變數,API Key 與業務空間需屬於連線位址所用的地區:
DASHSCOPE_API_KEY: 對應地區與業務空間的 API Key,取得方式見取得 API Key。DASHSCOPE_WORKSPACE_ID: 業務空間 ID,詳見業務空間與地區。
-
將下方程式碼儲存為
livetranslate_client.py,執行python livetranslate_client.py,然後對著麥克風說話。
範例使用 qwen3.8-livetranslate-flash-realtime,將麥克風輸入翻譯為英語,即時列印譯文並播放譯音。輸入為 16000 Hz、單聲道、16 位元 PCM,播放的譯音為 24000 Hz、單聲道、16 位元 PCM。按 Ctrl+C 停止錄音後,範例傳送 session.finish,繼續接收並播放剩餘結果,收到 session.finished 後關閉連線。建議使用耳機,避免譯音再次進入麥克風。
import base64
import json
import os
import signal
import threading
import time
import pyaudio
import websocket
model = "qwen3.8-livetranslate-flash-realtime"
workspace_id = os.environ["DASHSCOPE_WORKSPACE_ID"]
api_key = os.environ["DASHSCOPE_API_KEY"]
url = (
f"wss://{workspace_id}.ap-southeast-1.maas.aliyuncs.com"
f"/api-ws/v1/realtime?model={model}"
)
stop_recording = False
send_errors = []
ws = None
audio = None
input_stream = None
output_stream = None
sender = None
previous_sigint_handler = None
def receive():
event = json.loads(ws.recv())
if event.get("type") == "error" or event.get("code"):
raise RuntimeError(event)
return event
def stop_input(signum, frame):
global stop_recording
stop_recording = True
def send_audio():
try:
while not stop_recording:
chunk = input_stream.read(1600)
ws.send(json.dumps({
"type": "input_audio_buffer.append",
"audio": base64.b64encode(chunk).decode("ascii"),
}))
except Exception as error:
send_errors.append(error)
finally:
try:
ws.send(json.dumps({"type": "session.finish"}))
except Exception as error:
send_errors.append(error)
ws.close()
def receive_translation():
while True:
event = receive()
event_type = event.get("type")
if event_type in ("response.text.delta", "response.audio_transcript.delta"):
print(event["delta"], end="", flush=True)
elif event_type == "response.audio.delta":
output_stream.write(base64.b64decode(event["delta"]))
elif event_type == "response.done":
if event["response"]["status"] != "completed":
raise RuntimeError(event["response"])
print()
elif event_type == "session.finished":
return
try:
ws = websocket.create_connection(
url, header={"Authorization": f"Bearer {api_key}"}, timeout=30
)
while receive().get("type") != "session.created":
pass
ws.send(json.dumps({
"type": "session.update",
"session": {
"output_modalities": ["text", "audio"],
"translation": {"language": "en"},
},
}))
while receive().get("type") != "session.updated":
pass
audio = pyaudio.PyAudio()
input_stream = audio.open(
format=pyaudio.paInt16, channels=1, rate=16000,
input=True, frames_per_buffer=1600,
)
output_stream = audio.open(
format=pyaudio.paInt16, channels=1, rate=24000, output=True,
)
print("請開始說話;按 Ctrl+C 停止錄音並等待剩餘翻譯。")
previous_sigint_handler = signal.signal(signal.SIGINT, stop_input)
sender = threading.Thread(target=send_audio, daemon=True)
sender.start()
receive_translation()
stop_recording = True
sender.join()
if send_errors:
raise send_errors[0]
except Exception:
if send_errors:
raise send_errors[0]
raise
finally:
stop_recording = True
if ws is not None:
ws.close()
if sender is not None:
sender.join()
for stream in (input_stream, output_stream):
if stream is not None:
stream.stop_stream()
stream.close()
if audio is not None:
audio.terminate()
if previous_sigint_handler is not None:
signal.signal(signal.SIGINT, previous_sigint_handler)
配置熱詞
對於需要固定譯法或區分同音詞的翻譯場景,新增熱詞可以提升翻譯準確性。例如:
- 固定譯法:阿里雲 slogan「計算,為了無法計算的價值。」約定的英文是「Computing, for the value beyond computation.」,需要保留措辭和語序。
- 同音品牌名稱:Qoder 與普通詞 coder 發音相同。如果說的是產品 Qoder,譯文需要保留品牌拼寫。
以下是兩組測試的輸出對照,每組使用相同音訊,僅改變熱詞配置。
| 輸入音訊內容 | 未配置熱詞 | 配置熱詞 |
|---|---|---|
| 計算,為了無法計算的價值。 | Calculate. For a value that cannot be calculated. | Computing, for the value beyond computation. |
| Qoder 是面向真實工作的 Agentic 平台。 | Coder is an agentic platform designed for real-world work. | Qoder, is an agentic platform designed for real-world work. |
配置方法
熱詞透過 session.translation.corpus.phrases 配置,以 key-value 形式將來源語言詞語或片語映射為目標譯法。
在快速開始的首次 session.update 請求中,將以下 translation 物件合入現有 session,保留會話已有的輸出模態、音色等設定。
{
"event_id": "configure-hotwords",
"type": "session.update",
"session": {
"translation": {
"language": "en",
"corpus": {
"phrases": {
"計算,為了無法計算的價值。": "Computing, for the value beyond computation.",
"Qoder": "Qoder"
}
}
}
}
}
傳送音訊前完成配置,收到伺服器的 session.updated 後,再開始傳送 input_audio_buffer.append。
區分發言人
qwen3.8-livetranslate-flash-realtime 可識別不同發言人,透過 speaker_id 標識。根據該標識關聯原文與譯文後,可以按發言人顯示字幕。
保留預設 speaker_detection,或在 session.update 中明確設定。threshold 用於區分靜音與有效人聲,低於閾值的聲音會被過濾,不會輸入模型。該閾值固定為 0.5。
{"type": "session.update", "session": {"audio": {"input": {"turn_detection": {"type": "speaker_detection", "threshold": 0.5}}}}}
- 從
input_audio_buffer.speech_started取得speaker_id和原文item_id。 - 從
conversation.item.input_audio_transcription.delta取得同一item_id的原文。 - 從譯文的
conversation.item.created取得item.id和事件頂層的previous_item_id,將譯文項目關聯到原文項目。 - 收到譯文增量後,以
item_id找到原文和說話人,再更新字幕。
將以下變數與函式放在快速開始的麥克風範例中,位於 def receive_translation(): 之前。在該函式內,緊接 event = receive() 呼叫 handle_speaker_event(event),並將原本的 print(event["delta"], end="", flush=True) 替換為 pass,由下方片段統一輸出字幕。原文或譯文更新時會列印發言人標識、原文與譯文,方便按發言人顯示字幕。保留原有音訊與會話結束處理。
speaker_by_source = {}
source_by_translation = {}
source_text = {}
translation_text = {}
def show_subtitle(translation_id):
source_id = source_by_translation.get(translation_id)
if source_id not in speaker_by_source or translation_id not in translation_text:
return
print({
"speaker_id": speaker_by_source[source_id],
"source": source_text.get(source_id, ""),
"translation": translation_text[translation_id],
})
def handle_speaker_event(event):
event_type = event.get("type")
if event_type in ("response.text.delta", "response.audio_transcript.delta"):
item_id = event["item_id"]
translation_text[item_id] = translation_text.get(item_id, "") + event["delta"]
show_subtitle(item_id)
return
if event_type == "conversation.item.created":
item = event["item"]
if any(part.get("type") == "input_audio" for part in item.get("content", [])):
return
source_id = event.get("previous_item_id")
if item.get("role") == "assistant" and source_id is not None:
source_by_translation[item["id"]] = source_id
show_subtitle(item["id"])
return
if event_type == "input_audio_buffer.speech_started" and "speaker_id" in event:
source_id = event["item_id"]
speaker_by_source[source_id] = event["speaker_id"]
elif event_type == "conversation.item.input_audio_transcription.delta":
source_id = event["item_id"]
source_text[source_id] = source_text.get(source_id, "") + event["delta"]
elif event_type == "conversation.item.input_audio_transcription.completed":
source_id = event["item_id"]
source_text[source_id] = event["transcript"]
else:
return
for translation_id, mapped_source in source_by_translation.items():
if mapped_source == source_id:
show_subtitle(translation_id)
利用映像提升翻譯準確率
千問即時翻譯系列模型支援圖像輸入,輔助音訊翻譯,適用於同音異義、低頻專有名詞識別情境。建議每秒傳送不超過2張圖片。
複用快速開始的麥克風輸入與連線設定:
- 安裝圖像處理套件:
pip install Pillow。 - 將
translation.language改為zh,執行範例時對著麥克風說What is mask?。 - 在麥克風範例的
def send_audio():之前加入下方圖片讀取程式碼,並用新的send_audio()替換原函式。片段使用已有的input_stream、stop_recording、ws、send_errors和匯入項目。
import io
from PIL import Image
IMAGE_PATH = "medical-mask.png"
# IMAGE_PATH = "masquerade-mask.png"
with Image.open(IMAGE_PATH) as image:
buffer = io.BytesIO()
image.convert("RGB").save(buffer, format="JPEG")
image_bytes = buffer.getvalue()
if len(image_bytes) > 500_000:
raise ValueError("JPEG > 500 KB")
image_b64 = base64.b64encode(image_bytes).decode("ascii")
def send_audio():
try:
last_image_time = None
while not stop_recording:
chunk = input_stream.read(1600)
ws.send(json.dumps({
"type": "input_audio_buffer.append",
"audio": base64.b64encode(chunk).decode("ascii"),
}))
now = time.monotonic()
if last_image_time is None or now - last_image_time >= 0.5:
ws.send(json.dumps({
"type": "input_image_buffer.append",
"image": image_b64,
}))
last_image_time = now
except Exception as error:
send_errors.append(error)
finally:
try:
ws.send(json.dumps({"type": "session.finish"}))
except Exception as error:
send_errors.append(error)
ws.close()
圖片與音訊交錯傳送,每 0.5 秒最多一張圖片。分別使用兩張圖片,比較 mask 是否譯成相應物品;按 Ctrl+C 停止錄音後,範例會請求結束會話並接收剩餘結果。
聲音複刻
模型支援發言人聲音複刻功能,支援使用預先複刻的固定音色,也支援在翻譯過程中即時複刻,讓翻譯播報聽起來像本人說外語。適用於跨語言演講、個人主播、視頻翻譯等需要保留個人音色的情境。
即時複刻:qwen3.8-livetranslate-flash-realtime 和 qwen3.5-livetranslate-flash-realtime 在翻譯過程中從輸入音訊複刻音色,不額外收取複刻費用;模型呼叫仍按 Token 用量計費。
預先建立音色:透過聲音複刻 API建立音色,按 $0.01/個計費,建立失敗不計費;免費額度的地區、次數與有效期限見該計費說明。使用已建立的音色翻譯時,仍按模型呼叫的 Token 用量計費。
在 session.update 中設定以下參數啟用:
-
session.enable_voice_clone:設定為true,啟用聲音複刻。 -
session.voice_clone_options.frequency:控制聲音複刻時機,取值如下:never:使用預先建立的固定音色,本次翻譯不重新提取音色。將session.voice設為自己的複刻音色 ID。once:在會話開始時從輸入音訊提取一次音色,本次會話後續翻譯複用該音色。「一次」指提取次數,並非只生成一次譯音。適合單人演講,session.voice必須設為default。always:每次生成翻譯音訊前重新提取音色,讓譯音跟隨發言人變化。適合多人對話,session.voice必須設為default。
-
session.voice:指定輸出音色,取值取決於frequency的設定。- 設定為
default:搭配frequency為once或always使用,複刻輸入音訊音色,複刻完成前使用預設音色過渡。 - 設定為使用者複刻的音色 ID(如
qwen-translate-vc-xxx-yyy-zzz):搭配frequency為never使用。需提前通過聲音複刻API準備音色,target_model需指定為實際使用的翻譯模型。
- 設定為
當
frequency為once或always時,voice必須設定為default,不可設定為其他預設音色,否則服務端會返回錯誤。
聲音複刻配置樣本
使用 qwen3.8-livetranslate-flash-realtime 時,將對應的 session.update 配置替換到快速開始的該模型範例中。
說明使用 qwen3.5-livetranslate-flash-realtime 時,將範例中的 session.output_modalities 替換為 session.modalities,其餘複刻參數相同。連線時需將 model 指定為該模型,並依接收模型回應中的對應說明處理回應事件。
使用預先複刻的音色(適合需要固定音色的情境):
{
"type": "session.update",
"session": {
"output_modalities": ["text","audio"],
"voice": "qwen-translate-vc-xxx-yyy-zzz",
"translation": {
"language": "en"
},
"enable_voice_clone": true,
"voice_clone_options": {
"frequency": "never"
}
}
}
在目前會話中複用同一音色(適合單人演講):
{
"type": "session.update",
"session": {
"output_modalities": ["text","audio"],
"voice": "default",
"translation": {
"language": "en"
},
"enable_voice_clone": true,
"voice_clone_options": {
"frequency": "once"
}
}
}
讓譯音跟隨發言人變化(適合多人對話):
{
"type": "session.update",
"session": {
"output_modalities": ["text","audio"],
"voice": "default",
"translation": {
"language": "en"
},
"enable_voice_clone": true,
"voice_clone_options": {
"frequency": "always"
}
}
}
通過Function Compute一鍵部署
控制台暫不支援體驗。可通過以下方式一鍵部署:
-
開啟我們寫好的Function Compute模板,填入 API Key, 單擊建立並部署預設環境即可線上體驗。
-
等待約一分鐘,在 環境詳情 > 環境資訊 中擷取訪問網域名稱,將訪問網域名稱的
http改成https(例如https://qwen-livetranslate-flash-realtime-intl.fcv3.xxx.ap-southeast-1.fc.devsapp.net/),通過該連結與模型互動。重要此連結使用自我簽署憑證,僅用於臨時測試。首次訪問時,瀏覽器會顯示安全警告,這是預期行為,請勿在生產環境使用。如需繼續,請按瀏覽器提示操作(如點擊“進階” → “繼續前往(不安全)”)。
如需開通存取控制許可權,請跟隨頁面指引操作。
通過資源資訊-函數資源查看專案原始碼。
Function Compute與阿里雲百鍊均為新使用者提供免費額度,可以覆蓋簡單調試所需成本,額度耗盡後隨用隨付。只有在訪問的情況下會產生費用。
互動流程
使用 qwen3.8-livetranslate-flash-realtime 時,主要互動流程如下:
| 階段 | 用戶端 | 伺服器 |
|---|---|---|
| 建立連線 | 位址與驗證 | session.created |
| 設定翻譯 | session.update | session.updated 或 error |
| 輸入 | 持續傳送 input_audio_buffer.append,按需傳送圖片 | 說話人標識與原文識別事件 |
| 接收 | 累加譯文、解碼譯音 | 增量事件,response.done 表示本次回應結束 |
| 結束 | 停止輸入、傳送 session.finish,繼續接收 | session.finished 後關閉連線,等待播放結束 |
qwen3.5-livetranslate-flash-realtime:互動流程
即時語音翻譯的互動流程遵循標準的 WebSocket 事件驅動模型。語音起止的判斷方式取決於 VAD 模式或 Manual 模式(參見3. 輸入音頻與圖片),下表以 VAD 模式(預設)為主線,並標註了 Manual 模式下不同的服務端事件。
| 生命週期 | 用戶端事件 | 服務端事件 |
|---|---|---|
會話初始化 | session.update
| session.created
session.updated
|
使用者音頻輸入 | input_audio_buffer.append
input_image_buffer.append
input_audio_buffer.commit
| VAD 模式: input_audio_buffer.speech_started
input_audio_buffer.speech_stopped
Manual 模式: input_audio_buffer.committed
|
服務端音訊輸出 | 無 | response.created
response.output_item.added
conversation.item.created
response.content_part.added
response.text.text
response.audio_transcript.text
response.audio.delta
response.text.done
response.audio_transcript.done
response.audio.done
response.content_part.done
response.output_item.done
response.done
|
會話結束 | session.finish
| session.finished
|
重要音頻發送結束後,必鬚髮送 session.finish 事件並等待 session.finished 響應後再中斷連線。如果直接關閉 WebSocket 而不發送 session.finish,服務端無法得知音頻輸入已結束,將導致最後一段語音的識別和翻譯結果丟失。
API 參考
- 即時音視頻翻譯(Qwen-Livetranslate-Realtime)。
- AOQ用戶端API
- Realtime API 概述(WebRTC 協議說明)
計費說明
-
Qwen3.8-LiveTranslate-Flash-Realtime / Qwen3.5-LiveTranslate-Flash-Realtime
- 音頻:輸入每秒音頻消耗 7 Token,輸出每秒音頻消耗 12.5 Token。
- 圖片:每輸入 32*32 像素消耗 0.5 Token。
- 文本:啟用源語言語音辨識功能後,服務除返回翻譯結果外,還會返回輸入音訊語音辨識文本(即源語言原文),該識別文本將按輸出文本的 Token 標準計費。 Token 費用請參見選擇模型。
即時複刻:qwen3.8-livetranslate-flash-realtime 和 qwen3.5-livetranslate-flash-realtime 在翻譯過程中從輸入音訊複刻音色,不額外收取複刻費用;模型呼叫仍按 Token 用量計費。
預先建立音色:透過聲音複刻 API建立音色,按 $0.01/個計費,建立失敗不計費;免費額度的地區、次數與有效期限見該計費說明。使用已建立的音色翻譯時,仍按模型呼叫的 Token 用量計費。
限流說明
模型的限流規則請參見限流。
支援的語種
下表中的語種代碼可用於指定源語種與目標語種。
部分目標語種僅支援輸出文本,不支援輸出音頻。
語種代碼 | 語種 | 支援的輸出模態 |
|---|---|---|
zh | 中文 | 音頻+文本 |
en | 英語 | 音頻+文本 |
ar | 阿拉伯語 | 音頻+文本 |
de | 德語 | 音頻+文本 |
fr | 法語 | 音頻+文本 |
es | 西班牙語 | 音頻+文本 |
pt | 葡萄牙語 | 音頻+文本 |
id | 印尼語 | 音頻+文本 |
it | 意大利語 | 音頻+文本 |
ko | 韓語 | 音頻+文本 |
ru | 俄語 | 音頻+文本 |
th | 泰語 | 音頻+文本 |
vi | 越南語 | 音頻+文本 |
ja | 日語 | 音頻+文本 |
tr | 土耳其語 | 音頻+文本 |
hi | 印地語 | 音頻+文本 |
ms | 馬來語 | 音頻+文本 |
nl | 荷蘭語 | 音頻+文本 |
ur | 烏爾都語 | 音頻+文本 |
nb | 挪威語 | 音頻+文本 |
sv | 瑞典語 | 音頻+文本 |
da | 丹麥語 | 音頻+文本 |
he | 希伯來語 | 音頻+文本 |
fi | 芬蘭語 | 音頻+文本 |
pl | 波蘭語 | 音頻+文本 |
is | 冰島語 | 音頻+文本 |
cs | 捷克語 | 音頻+文本 |
fil | 菲律賓語 | 音頻+文本 |
fa | 波斯語 | 音頻+文本 |
yue | 粵語 | 文本 |
el | 希臘語 | 文本 |
af | 南非荷蘭語 | 文本 |
ast | 阿斯圖里亞斯語 | 文本 |
be | 白俄羅斯語 | 文本 |
bg | 保加利亞語 | 文本 |
bn | 孟加拉語 | 文本 |
bs | 波斯尼亞語 | 文本 |
ca | 加泰羅尼亞語 | 文本 |
ceb | 宿務語 | 文本 |
et | 愛沙尼亞語 | 文本 |
gl | 加利西亞語 | 文本 |
gu | 古吉拉特語 | 文本 |
hr | 克羅地亞語 | 文本 |
hu | 匈牙利語 | 文本 |
jv | 爪哇語 | 文本 |
kk | 哈薩克語 | 文本 |
kn | 卡納達語 | 文本 |
ky | 柯爾克孜語 | 文本 |
lv | 拉脫維亞語 | 文本 |
mk | 馬其頓語 | 文本 |
ml | 馬拉雅拉姆語 | 文本 |
mr | 馬拉地語 | 文本 |
pa | 旁遮普語 | 文本 |
ro | 羅馬尼亞語 | 文本 |
sk | 斯洛伐克語 | 文本 |
sl | 斯洛文尼亞語 | 文本 |
sw | 斯瓦希裡語 | 文本 |
tg | 塔吉克語 | 文本 |
az | 阿塞拜疆語 | 文本 |
uk | 烏克蘭語 | 文本 |
支援的音色
即時翻譯支援的音色與voice參數取值參見音色列表。