Qwen-Omni-Realtime 是通义千问推出的一款实时音视频聊天模型。它能够同时理解流式的音频与图像输入(例如从视频流中实时抽取的连续图像帧),并实时输出高质量的文本与音频。
在线体验请参见如何在线体验 Qwen-Omni-Realtime 模型?
如何使用
1. 建立连接
Qwen-Omni-Realtime 模型通过 WebSocket 协议接入,可通过以下 Python 示例代码建立连接。也可通过DashScope SDK 建立连接。
WebSocket 原生连接
连接时需要以下配置项:
配置项 | 说明 |
调用地址 | 中国大陆(北京):wss://dashscope.aliyuncs.com/api-ws/v1/realtime 国际(新加坡):wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime |
查询参数 | 查询参数为model,需指定为访问的模型名。示例: |
请求头 | 使用 Bearer Token 鉴权:Authorization: Bearer DASHSCOPE_API_KEY DASHSCOPE_API_KEY 是您在百炼上申请的API Key。 |
# pip install websocket-client
import json
import websocket
import os
API_KEY=os.getenv("DASHSCOPE_API_KEY")
API_URL = "wss://dashscope.aliyuncs.com/api-ws/v1/realtime?model=qwen3-omni-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()DashScope SDK
# SDK 版本不低于1.23.9
import os
import json
from dashscope.audio.qwen_omni import OmniRealtimeConversation,OmniRealtimeCallback
import dashscope
# 若没有配置 API Key,请将下行改为 dashscope.api_key = "sk-xxx"
dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
class PrintCallback(OmniRealtimeCallback):
def on_open(self) -> None:
print("Connected Successfully")
def on_event(self, response: dict) -> None:
print("Received event:")
print(json.dumps(response, indent=2, ensure_ascii=False))
def on_close(self, close_status_code: int, close_msg: str) -> None:
print(f"Connection closed (code={close_status_code}, msg={close_msg}).")
callback = PrintCallback()
conversation = OmniRealtimeConversation(
model="qwen3-omni-flash-realtime",
callback=callback,
# 以下为北京地域url,若使用新加坡地域的模型,需将url替换为:wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime
url="wss://dashscope.aliyuncs.com/api-ws/v1/realtime"
)
try:
conversation.connect()
print("Conversation started. Press Ctrl+C to exit.")
conversation.thread.join()
except KeyboardInterrupt:
conversation.close()// SDK 版本不低于 2.20.9
import com.alibaba.dashscope.audio.omni.*;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.google.gson.JsonObject;
import java.util.concurrent.CountDownLatch;
public class Main {
public static void main(String[] args) throws InterruptedException, NoApiKeyException {
CountDownLatch latch = new CountDownLatch(1);
OmniRealtimeParam param = OmniRealtimeParam.builder()
.model("qwen3-omni-flash-realtime")
.apikey(System.getenv("DASHSCOPE_API_KEY"))
// 以下为北京地域url,若使用新加坡地域的模型,需将url替换为:wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime
.url("wss://dashscope.aliyuncs.com/api-ws/v1/realtime")
.build();
OmniRealtimeConversation conversation = new OmniRealtimeConversation(param, new OmniRealtimeCallback() {
@Override
public void onOpen() {
System.out.println("Connected Successfully");
}
@Override
public void onEvent(JsonObject message) {
System.out.println(message);
}
@Override
public void onClose(int code, String reason) {
System.out.println("connection closed code: " + code + ", reason: " + reason);
latch.countDown();
}
});
conversation.connect();
latch.await();
conversation.close(1000, "bye");
System.exit(0);
}
}2. 配置会话
发送客户端事件session.update:
{
// 该事件的id,由客户端生成
"event_id": "event_ToPZqeobitzUJnt3QqtWg",
// 事件类型,固定为session.update
"type": "session.update",
// 会话配置
"session": {
// 输出模态,支持设置为["text"](仅输出文本)或["text","audio"](输出文本与音频)。
"modalities": [
"text",
"audio"
],
// 输出音频的音色
"voice": "Chelsie",
// 输入音频格式,仅支持设为pcm16。
"input_audio_format": "pcm16",
// 输出音频格式,仅支持设为pcm24。
"output_audio_format": "pcm24",
// 系统消息,用于设定模型的目标或角色。
"instructions": "你是某五星级酒店的AI客服专员,请准确且友好地解答客户关于房型、设施、价格、预订政策的咨询。请始终以专业和乐于助人的态度回应,杜绝提供未经证实或超出酒店服务范围的信息。",
// 是否开启语音活动检测。若需启用,需传入一个配置对象,服务端将据此自动检测语音起止。
// 设置为null表示由客户端决定何时发起模型响应。
"turn_detection": {
// VAD类型,需设置为server_vad。
"type": "server_vad",
// VAD检测阈值。建议在嘈杂的环境中增加,在安静的环境中降低。
"threshold": 0.5,
// 检测语音停止的静音持续时间,超过此值后会触发模型响应
"silence_duration_ms": 800
}
}
}3. 输入音频与图片
客户端通过input_audio_buffer.append和 input_image_buffer.append 事件发送 Base64 编码的音频和图片数据到服务端缓冲区。音频输入是必需的;图片输入是可选的。
图片可以来自本地文件,或从视频流中实时采集。
启用服务端VAD时,服务端会在检测到语音结束时自动提交数据并触发响应。禁用VAD时(手动模式),客户端必须在发送完数据后,主动调用input_audio_buffer.commit事件来提交。
4. 接收模型响应
模型的响应格式取决于配置的输出模态。
仅输出文本
通过response.text.delta事件接收流式文本,response.text.done事件获取完整文本。
输出文本+音频
文本:通过response.audio_transcript.delta事件接收流式文本,response.audio_transcript.done事件获取完整文本。
音频:通过response.audio.delta事件获取 Base64 编码的流式输出音频数据。response.audio.done事件标志音频数据生成完成。
模型列表
Qwen3-Omni-Flash-Realtime 是通义千问最新推出的实时多模态模型,相比于上一代的 Qwen-Omni-Turbo-Realtime(后续不再更新):
支持的语言
增加至 10 种,包括汉语(支持普通话及多种主流方言,如上海话、粤语、四川话等)、英语,法语、德语、俄语、意语、西语、葡语、日语、韩语,Qwen-Omni-Turbo-Realtime 仅支持 2 种(汉语(普通话)和英语)。
支持的音色
增加至 17 种,Qwen-Omni-Turbo-Realtime 仅支持 4 种。音色列表
中国大陆(北京)
模型名称 | 版本 | 上下文长度 | 最大输入 | 最大输出 | 免费额度 |
(Token数) | |||||
qwen3-omni-flash-realtime 当前能力等同 qwen3-omni-flash-realtime-2025-09-15 | 稳定版 | 65,536 | 49,152 | 16,384 | 各100万Token(不区分模态) 有效期:百炼开通后90天内 |
qwen3-omni-flash-realtime-2025-09-15 | 快照版 | ||||
国际(新加坡)
模型名称 | 版本 | 上下文长度 | 最大输入 | 最大输出 | 免费额度 |
(Token数) | |||||
qwen3-omni-flash-realtime 当前能力等同 qwen3-omni-flash-realtime-2025-09-15 | 稳定版 | 65,536 | 49,152 | 16,384 | 无免费额度 |
qwen3-omni-flash-realtime-2025-09-15 | 快照版 | ||||
快速开始
请选择您熟悉的编程语言,通过以下步骤快速体验与 Realtime 模型实时对话的功能。
DashScope Python SDK
准备运行环境
您的 Python 版本需要不低于 3.10。
首先根据您的操作系统安装 pyaudio。
macOS
brew install portaudio && pip install pyaudioDebian/Ubuntu
若未使用虚拟环境,可直接通过系统包管理器安装:
sudo apt-get install python3-pyaudio若使用虚拟环境,需先安装编译依赖:
sudo apt update sudo apt install -y python3-dev portaudio19-dev然后在已激活的虚拟环境中使用 pip 安装:
pip install pyaudio
CentOS
sudo yum install -y portaudio portaudio-devel && pip install pyaudioWindows
pip install pyaudio安装完成后,通过 pip 安装依赖:
pip install websocket-client dashscope选择交互模式
VAD 模式(Voice Activity Detection,自动检测语音起止)
服务端自动判断用户何时开始与停止说话并作出回应。
Manual 模式(按下即说,松开即发送)
客户端控制语音起止。用户说话结束后,客户端需主动发送消息至服务端。
VAD 模式
新建一个 python 文件,命名为vad_dash.py,并将以下代码复制到文件中:
运行
vad_dash.py,通过麦克风即可与 Qwen-Omni-Realtime 模型实时对话,系统会检测您的音频起始位置并自动发送到服务器,无需您手动发送。Manual 模式
新建一个 python 文件,命名为
manual_dash.py,并将以下代码复制进文件中:运行
manual_dash.py,按 Enter 键开始说话,再按一次获取模型响应的音频。
DashScope Java SDK
选择交互模式
VAD 模式(Voice Activity Detection,自动检测语音起止)
Realtime API 自动判断用户何时开始与停止说话并作出回应。
Manual 模式(按下即说,松开即发送)
客户端控制语音起止。用户说话结束后,客户端需主动发送消息至服务端。
VAD 模式
运行OmniServerVad.main()方法,通过麦克风即可与 Realtime 模型实时对话,系统会检测您的音频起始位置并自动发送到服务器,无需您手动发送。
Manual 模式
运行OmniWithoutServerVad.main()方法,按 Enter 键开始录音,录音过程中再次按 Enter 键停止录音并发送,随后将接收并播放模型响应。
WebSocket(Python)
准备运行环境
您的 Python 版本需要不低于 3.10。
首先根据您的操作系统来安装 pyaudio。
macOS
brew install portaudio && pip install pyaudioDebian/Ubuntu
sudo apt-get install python3-pyaudio 或者 pip install pyaudio推荐使用
pip install pyaudio。如果安装失败,请先根据您的操作系统安装portaudio依赖。CentOS
sudo yum install -y portaudio portaudio-devel && pip install pyaudioWindows
pip install pyaudio安装完成后,通过 pip 安装 websocket 相关的依赖:
pip install websockets==15.0.1创建客户端
在本地新建一个 python 文件,命名为
omni_realtime_client.py,并将以下代码复制进文件中:选择交互模式
VAD 模式(Voice Activity Detection,自动检测语音起止)
Realtime API 自动判断用户何时开始与停止说话并作出回应。
Manual 模式(按下即说,松开即发送)
客户端控制语音起止。用户说话结束后,客户端需主动发送消息至服务端。
VAD 模式
在
omni_realtime_client.py的同级目录下新建另一个 python 文件,命名为vad_mode.py,并将以下代码复制进文件中:运行
vad_mode.py,通过麦克风即可与 Realtime 模型实时对话,系统会检测您的音频起始位置并自动发送到服务器,无需您手动发送。Manual 模式
在
omni_realtime_client.py的同级目录下新建另一个 python 文件,命名为manual_mode.py,并将以下代码复制进文件中:运行
manual_mode.py,按 Enter 键开始说话,再按一次获取模型响应的音频。
交互流程
VAD 模式
将session.update事件的session.turn_detection 设为"server_vad"以启用 VAD 模式。此模式下,服务端自动检测语音起止并进行响应。适用于语音通话场景。
交互流程如下:
服务端检测到语音开始,发送input_audio_buffer.speech_started 事件。
客户端随时发送 input_audio_buffer.append与input_image_buffer.append事件追加音频与图片至缓冲区。
发送 input_image_buffer.append 事件前,至少发送过一次 input_audio_buffer.append 事件。
服务端检测到语音结束,发送input_audio_buffer.speech_stopped事件。
服务端发送input_audio_buffer.committed 事件提交音频缓冲区。
服务端发送 conversation.item.created事件,包含从缓冲区创建的用户消息项。
生命周期 | 客户端事件 | 服务端事件 |
会话初始化 | 会话配置 | 会话已创建 会话配置已更新 |
用户音频输入 | 添加音频到缓冲区 添加图片到缓冲区 | input_audio_buffer.speech_started 检测到语音开始 input_audio_buffer.speech_stopped 检测到语音结束 服务器收到提交的音频 |
服务器音频输出 | 无 | 服务端开始生成响应 响应时有新的输出内容 对话项被创建 新的输出内容添加到assistant message response.audio_transcript.delta 增量生成的转录文字 模型增量生成的音频 response.audio_transcript.done 文本转录完成 音频生成完成 Assistant message 的文本或音频内容流式输出完成 Assistant message 的整个输出项流式传输完成 响应完成 |
Manual 模式
将session.update事件的session.turn_detection 设为 null 以启用 Manual 模式。此模式下,客户端通过显式发送input_audio_buffer.commit 和response.create事件请求服务器响应。适用于按下即说场景,如聊天软件中的发送语音。
交互流程如下:
客户端随时发送 input_audio_buffer.append与input_image_buffer.append事件追加音频与图片至缓冲区。
发送 input_image_buffer.append 事件前,至少发送过一次 input_audio_buffer.append 事件。
客户端发送input_audio_buffer.commit事件提交音频缓冲区与图像缓冲区,告知服务端本轮的用户输入(音频及图片)已全部发送完毕。
服务端响应 input_audio_buffer.committed事件。
客户端发送response.create事件,等待服务端返回模型的输出。
服务端响应conversation.item.created事件。
生命周期 | 客户端事件 | 服务端事件 |
会话初始化 | 会话配置 | 会话已创建 会话配置已更新 |
用户音频输入 | 添加音频到缓冲区 添加图片到缓冲区 提交音频与图片到服务器 创建模型响应 | 服务器收到提交的音频 |
服务器音频输出 | 清除缓冲区的音频 | 服务端开始生成响应 响应时有新的输出内容 对话项被创建 新的输出内容添加到assistant message 项 response.audio_transcript.delta 增量生成的转录文字 模型增量生成的音频 response.audio_transcript.done 完成文本转录 完成音频生成 Assistant message 的文本或音频内容流式输出完成 Assistant message 的整个输出项流式传输完成 响应完成 |
API 参考
计费与限流
计费规则
Qwen-Omni-Realtime 模型根据不同模态(音频、图像)对应的Token数计费。计费详情请参见模型列表。
限流
模型限流规则请参见限流。
常见问题
Q1:如何在线体验 Qwen-Omni-Realtime 模型?
A:您可以通过以下方式一键部署:
访问函数计算模板,部署类型选择直接部署,百炼 API-KEY 填入您的 API Key;单击创建并部署默认环境。
等待约一分钟,在环境详情的环境信息中获取访问域名,将访问域名的
http改成https(示例:https://omni-realtime.fcv3.xxxx.cn-hangzhou.fc.devsapp.net),修改后的 HTTPS 链接指向一个可在线体验的 Web 应用,可通过它与模型进行实时视频或语音通话。
此链接使用自签名证书,仅用于临时测试。首次访问时,浏览器会显示安全警告,这是预期行为,请勿在生产环境使用。如需继续,请按浏览器提示操作(如点击“高级” → “继续前往(不安全)”)。
通过资源信息-函数资源查看项目源代码。
函数计算与阿里云百炼均为新用户提供免费额度,可以覆盖简单调试所需成本,额度耗尽后按量计费。只有在访问的情况下会产生费用。
Q2:怎么向模型输入图片?
A:通过客户端发送input_image_buffer.append事件。
VAD 模式
该模式会根据语音检测情况自动提交音频与图片,请在服务端响应input_audio_buffer.speech_stopped前发送input_image_buffer.append事件。
Manual 模式
参见Manual 模式代码,将图片输入与提交的两部分代码取消注释,即可传入本地图片。
若用于视频通话场景,可以对视频抽帧,以不超过每秒两帧的速度发送input_image_buffer.append 事件。 DashScope SDK 代码请参见Omni-Realtime 示例代码。
错误码
如果模型调用失败并返回报错信息,请参见错误信息进行解决。
音色列表
Qwen3-Omni-Flash-Realtime
音色名 |
| 音色效果 | 描述 | 支持的语种 |
芊悦 | Cherry | 阳光积极、亲切自然小姐姐。 | 中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
晨煦 | Ethan | 标准普通话,带部分北方口音。阳光、温暖、活力、朝气。 | 中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
不吃鱼 | Nofish | 不会翘舌音的设计师。 | 中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
詹妮弗 | Jennifer | 品牌级、电影质感般美语女声。 | 中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
甜茶 | Ryan | 节奏拉满,戏感炸裂,真实与张力共舞。 | 中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
卡捷琳娜 | Katerina | 御姐音色,韵律回味十足。 | 中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
墨讲师 | Elias | 既保持学科严谨性,又通过叙事技巧将复杂知识转化为可消化的认知模块。 | 中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
上海-阿珍 | Jada | 风风火火的沪上阿姐。 | 中文(上海话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
北京-晓东 | Dylan | 北京胡同里长大的少年。 | 中文(北京话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
四川-晴儿 | Sunny | 甜到你心里的川妹子。 | 中文(四川话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
南京-老李 | Li | 耐心的瑜伽老师 | 中文(南京话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
陕西-秦川 | Marcus | 面宽话短,心实声沉——老陕的味道。 | 中文(陕西话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
闽南-阿杰 | Roy | 诙谐直爽、市井活泼的台湾哥仔形象。 | 中文(闽南语)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
天津-李彼得 | Peter | 天津相声,专业捧人。 | 中文(天津话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
粤语-阿强 | Rocky | 幽默风趣的阿强,在线陪聊。 | 中文(粤语)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
粤语-阿清 | Kiki | 甜美的港妹闺蜜。 | 中文(粤语)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | |
四川-程川 | Eric | 一个跳脱市井的四川成都男子。 | 中文(四川话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 |
Qwen-Omni-Turbo-Realtime
音色名 |
| 音色效果 | 描述 | 支持的语种 |
芊悦 | Cherry | 阳光积极、亲切自然小姐姐。 | 中文、英语 | |
苏瑶 | Serena | 温柔小姐姐。 | 中文、英语 | |
晨煦 | Ethan | 标准普通话,带部分北方口音。阳光、温暖、活力、朝气。 | 中文、英语 | |
千雪 | Chelsie | 二次元虚拟女友。 | 中文、英语 |