本文介绍 DashScope Python SDK 调用 Qwen-Omni 实时模型 时的关键接口与请求参数。
前期准备
SDK 版本需要不低于 1.26.5。请先阅读实时多模态交互流程。
快速开始
请访问GitHub下载示例代码。我们提供了三种调用方式的示例代码:
-
音频对话示例:麦克风采集实时音频输入,开启VAD 模式(自动检测语音起止),支持语音打断。
enable_turn_detection参数需设为 True。推荐使用耳机播放音频,避免回声触发语音打断。
-
音视频对话示例:麦克风和摄像头采集实时音视频输入,开启VAD 模式(自动检测语音起止),支持语音打断。
enable_turn_detection参数需设为 True。推荐使用耳机播放音频,避免回声触发语音打断。
-
本地调用:本地音频和图片作为输入,开启Manual 模式(手动控制发送节奏)。
enable_turn_detection参数需设为 False。
请求参数
下述请求参数可以通过OmniRealtimeConversation的构造方法(init)进行设置。
参数 | 类型 | 说明 |
|---|---|---|
model | str | Qwen-Omni系列模型名称。参见模型列表。 |
callback |
| 用于处理服务端事件的回调对象实例。 |
url | str | 调用地址:
调用时请将 |
| 参数 | 类型 | 说明 |
|---|---|---|
| output_modalities | list[MultiModality] | 模型输出模态设置,支持设置[MultiModality.TEXT](仅输出文本)或[MultiModality.TEXT, MultiModality.AUDIO](输出音频和文本)。 |
| voice | str | 模型生成音频的音色,支持的音色参见音色列表。默认音色:
|
| input_audio_config | AudioFormatConfig | 用户输入音频格式配置。通过 AudioFormatConfig 同时设置格式(type:pcm/wav)和采样率(sample_rate:8000/16000/24000/48000,默认 16000 Hz)。适用模型:qwen3.5-omni-plus-realtime、qwen3.5-omni-flash-realtime。 |
| output_audio_config | AudioFormatConfig | 模型输出音频格式配置。通过 AudioFormatConfig 同时设置格式(type:pcm/wav)和采样率(sample_rate:8000/16000/24000/48000,默认 24000 Hz)。适用模型:qwen3.5-omni-plus-realtime、qwen3.5-omni-flash-realtime。 |
| input_audio_format | AudioFormat | 历史兼容字段,新增接入建议使用 input_audio_config 同时配置输入格式和采样率。 |
| output_audio_format | AudioFormat | 历史兼容字段,新增接入建议使用 output_audio_config 同时配置输出格式和采样率。 |
| smooth_output | bool | 仅Qwen3-Omni-Flash-Realtime系列模型支持设置。
|
| instructions | str | 系统消息,用于设定模型的目标或角色。例如:你是某五星级酒店的AI客服专员,请准确且友好地解答客户关于房型、设施、价格、预订政策的咨询。请始终以专业和乐于助人的态度回应,杜绝提供未经证实或超出酒店服务范围的信息。 |
| enable_input_audio_transcription | bool | 是否开启输入音频的语音识别。 |
| input_audio_transcription_model | str | 用于输入音频转录的语音识别模型,固定为qwen3-asr-flash-realtime,不支持修改。 |
| turn_detection_type | str | VAD类型,取值如下:
|
| turn_detection_threshold | float | VAD检测阈值。建议在嘈杂的环境中增加, 在安静的环境中降低。
|
| turn_detection_silence_duration_ms | int | 检测语音停止的静音持续时间,超过此值后会触发模型响应。默认值为800,参数范围[200, 6000]。 |
| turn_detection_param | dict | VAD 扩展参数字典,用于传入 turn_detection 的额外配置项。当前支持传入 idle_timeout_ms(int):静默超时时间(毫秒)。仅在使用qwen3.5-omni-plus-realtime或qwen3.5-omni-flash-realtime模型且 VAD 类型为server_vad时生效。服务端完成音频播报且用户持续静默超过该时间(未触发 speech.started)后,模型将主动触发一轮响应,基于当前上下文引导用户继续对话。取值范围:[5000, 30000]。示例:turn_detection_param={'idle_timeout_ms': 5000} |
| enable_search | bool | 仅在使用 Qwen3.5-Omni-Realtime 系列模型时生效。是否启用联网搜索功能。设置为 true 启用,默认为 false。启用后,模型可自主判断是否需要搜索来回应用户的即时问题。工具调用(tools)和联网搜索(enable_search)不兼容,不可同时开启。 |
| search_options | object | 联网搜索选项配置。需启用 enable_search 后才生效。目前仅支持设置 enable_source(Boolean),表示是否返回搜索结果来源列表,设置为 true 启用。示例:search_options={'enable_source': True}。 |
| tools | list[dict] | 仅在使用 Qwen3.5-Omni-Realtime 系列模型时生效。工具定义列表。启用后,模型可自主判断是否需要调用外部工具来回应用户的问题。命中工具调用时,模型不生成音频,仅返回工具调用参数。每个工具为一个字典,包含以下字段:
|
| temperature | float | 采样温度,控制模型生成内容的多样性。temperature越高,生成的内容更多样,反之,生成的内容更确定。取值范围: [0, 2)由于temperature与top_p均可以控制生成内容的多样性,因此建议只设置其中一个值。
|
| top_p | float | 核采样的概率阈值,控制模型生成内容的多样性。top_p越高,生成的内容更多样。反之,生成的内容更确定。取值范围:(0,1.0]由于temperature与top_p均可以控制生成内容的多样性,因此建议只设置其中一个值。top_p默认值:
|
| top_k | integer | 生成过程中采样候选集的大小。例如,取值为50时,仅将单次生成中得分最高的50个Token组成随机采样的候选集。取值越大,生成的随机性越高;取值越小,生成的确定性越高。取值为None或当top_k大于100时,表示不启用top_k策略,此时仅有top_p策略生效。取值需要大于或等于0。top_k默认值:
|
| max_tokens | integer | 本次请求返回的最大 Token 数。默认值和最大值都是模型的最大输出长度。关于各模型的最大输出长度,请参见百炼控制台。max_tokens参数适用于需要限制字数(如生成摘要、关键词)、控制成本或减少响应时间的场景。
|
| repetition_penalty | float | 模型生成时连续序列中的重复度。提高repetition_penalty时可以降低模型生成的重复度,1.0表示不做惩罚。没有严格的取值范围,只要大于0即可。repetition_penalty默认值:
|
| presence_penalty | float | 控制模型生成内容的重复度。取值范围:[-2.0, 2.0]。正数会减少重复度,负数会增加重复度。presence_penalty默认值:
|
| seed | integer | 设置seed参数会使模型生成过程更具有确定性,通常用于使模型每次运行的结果一致。在每次模型调用时传入相同的seed值(自行指定),并保持其他参数不变,模型将尽可能返回相同的结果。取值范围:0到231−1,默认值-1。
|
关键接口
OmniRealtimeConversation类
OmniRealtimeConversation通过from dashscope.audio.qwen_omni import OmniRealtimeConversation方法引入。
| 方法签名 | 服务端响应事件(通过回调下发) | 说明 |
|---|---|---|
服务端事件会话已创建session.updated 会话配置已更新 | 和服务端创建连接。 | |
session.updated会话配置已更新 | 更新本次会话交互的默认配置。参数配置请参考《请求参数》章节。在建立链接后,服务端会及时返回用于此会话的默认输出输入配置。如果需要更新默认会话配置,推荐总是在建立链接后即刻调用此接口。服务端在收到session.update事件后,会进行参数校验,如果参数不合法则返回错误,否则更新服务端侧的会话配置。 | |
| 无 | 将base64编码后的音频数据片段追加到云端输入音频缓冲区。 音频缓冲区是可以写入并稍后提交的临时存储。
| |
| 无 | 将base64编码后的图片数据添加到云端视频缓冲区。图片数据可以是本地的图片,或从视频流实时采集的图片数据。目前对图片输入有以下限制:
| |
input_audio_buffer.cleared清空服务端收到的音频 | 删除当前云端缓冲区的音频。 | |
input_audio_buffer.committed服务端收到提交的音频 | 提交之前通过append添加到云端缓冲区的音视频,如果输入的音频缓冲区为空将产生错误。
| |
服务端事件服务端开始生成响应response.output_item.added 响应时有新的输出内容服务端事件 对话项被创建response.content_part.added 新的输出内容添加到assistant message 项response.audio_transcript.delta 增量生成的转录文字response.audio.delta 模型增量生成的音频response.audio_transcript.done 完成文本转录response.audio.done 完成音频生成response.content_part.done Assistant message 的文本或音频内容流式输出完成response.output_item.done Assistant message 的整个输出项流式传输完成response.done 响应完成 | 指示服务端创建模型响应。打开"turn_detection"模式下配置会话时,服务端会自动创建模型响应。 | |
| 无 | 取消正在进行的响应。如果没有任何响应可供取消,服务端将以一个错误进行响应。 | |
| 无 | 向服务端发送 conversation.item.create 事件。在工具调用场景中,用于将工具执行结果回传给服务端。item 参数为 dict,需包含以下字段:
| |
| 无 | 终止任务,并关闭连接。 | |
| 无 | 获取当前任务的session_id。 | |
| 无 | 获取最近一次response的response_id。 |
AudioFormatConfig 配置类
通过 from dashscope.audio.qwen_omni import AudioFormatConfig, AudioFormatType, AudioSampleRate 引入。用于同时配置音频格式和采样率。
适用模型:qwen3.5-omni-plus-realtime、qwen3.5-omni-flash-realtime。
回调接口(OmniRealtimeCallback)
服务端会通过回调的方式,将服务端响应事件和数据返回给客户端。需要实现回调方法,处理服务端返回的信息或者数据。
通过from dashscope.audio.qwen_omni import OmniRealtimeCallback引入。
| 方法 | 参数 | 返回值 | 描述 |
|---|---|---|---|
| 无 | 无 | 当和服务端建立连接完成后,该方法立刻被回调。 | |
| message:服务端响应事件。 | 无 | 包括对接口调用的回复响应和模型生成的文本和音频。具体可以参考:服务端事件 | |
| close_status_code:关闭websocket的状态码。close_msg:关闭websocket的关闭信息。 | 无 | 当服务已经关闭连接后进行回调。 |
常见问题
Q:输入的音频和图片要如何对齐?
Qwen-Omni实时模型的输入将音频作为时间轴,图片会按照发送的时间,插入到音频中。可以在音频时间轴的任意时刻添加图片。
在实时交互场景下,可以在任意时刻打开或关闭视频输入。
Q:输入图片和音频的推荐频率?
在实时交互场景,推荐按照1 fps或2 fps的帧率发送图片,按照100ms一包的音频发送音频。
Q:turn_detection开关两种模式的区别?
turn_detection打开后支持server_vad和semantic_vad两种模式:
-
打开"turn_detection":
- 输入状态:云端的VAD(语音事件监测)会根据输入音频判断输入的一句话结束,并且立刻自动调用Qwen-Omni的推理下发回复文本和语音。
- 回复状态:在此状态下,音视频可以继续输入,不需要在模型回复阶段中断。回复结束后会回到输入状态等待语音。
- 打断:如果在模型回复期间,如果检测到用户开始说话则会触发打断,服务会立刻停止这一次的回复并且转换到输入状态。
-
关闭"turn_detection":
- 需要自行判断一轮音视频输入的结束,并手动通过commit和create_response触发Qwen-Omni的推理,获得回复。
- 在模型回复状态,需要停止音视频的输入。在模型回复结束后才可以继续输入下一轮音视频。
- 需要通过cancel_response接口打断模型回复。