このトピックでは、DashScope Python SDK を使用して Qwen-Omni-Realtime を呼び出すための主要なインターフェイスとリクエストパラメーターについて説明します。
接続と認証は、WebSocket アクセスをご覧ください。イベントフィールドと JSON の例は、クライアントイベントとサーバーイベントをご覧ください。
SDK のバージョンは 1.23.9 以降である必要があります。開始する前に、「リアルタイムマルチモーダルインタラクションフロー」をご確認ください。
GitHub にアクセスしてサンプルコードをダウンロードしてください。3 つの呼び出しメソッドのサンプルコードを提供しています:
OmniRealtimeConversation クラスのコンストラクターメソッド (init) を使用して、次のリクエストパラメーターを設定できます。
update_session インターフェイスを使用して、次のリクエストパラメーターを構成できます。
サーバーはコールバックを使用して、応答イベントとデータをクライアントに返します。サーバーが返す情報やデータを処理するために、コールバックメソッドを実装する必要があります。
Qwen-Omni-Realtime は、音声を入力のタイムラインとして使用します。イメージは、送信された時間に基づいて音声ストリームに挿入されます。音声タイムライン上の任意のポイントにイメージを挿入できます。
リアルタイムのインタラクションシナリオでは、いつでもビデオ入力を有効または無効にできます。
リアルタイムのインタラクションシナリオでは、1 fps または 2 fps のフレームレートでイメージを、100 ms のパケットで音声を送信できます。
現在、turn_detection が有効な場合、server_vad モードのみがサポートされています:
Qwen-Omni-Realtime はエンドツーエンドのマルチモーダルモデルです。そのテキスト出力は入力に対する応答であるため、入力音声の文字起こしを直接生成しません。文字起こしのためには、別の自動音声認識 (ASR) モデルを統合する必要があります。
前提条件
SDK のバージョンは 1.23.9 以降である必要があります。開始する前に、「リアルタイムマルチモーダルインタラクションフロー」をご確認ください。
使用開始
GitHub にアクセスしてサンプルコードをダウンロードしてください。3 つの呼び出しメソッドのサンプルコードを提供しています:
-
音声会話の例: マイクからリアルタイムの音声入力をキャプチャし、音声アクティビティ検出 (VAD) モードを有効にし、音声による割り込みをサポートします。
enable_turn_detectionパラメーターを True に設定します。エコーによる音声割り込みのトリガーを防ぐため、音声再生にはヘッドフォンを使用してください。
-
音声とビデオの会話の例: マイクとカメラからリアルタイムの音声とビデオの入力をキャプチャし、VAD モードを有効にし、音声による割り込みをサポートします。
enable_turn_detectionパラメーターを True に設定します。エコーによる音声割り込みのトリガーを防ぐため、音声再生にはヘッドフォンを使用してください。
-
ローカル呼び出し: ローカルの音声とイメージを入力として使用し、手動モードを有効にします。これにより、送信ペースを手動でコントロールできます。
enable_turn_detectionパラメーターを False に設定します。
リクエストパラメーター
OmniRealtimeConversation クラスのコンストラクターメソッド (init) を使用して、次のリクエストパラメーターを設定できます。
パラメーター | タイプ | 説明 |
|---|---|---|
model | str | Qwen-Omni モデルの名前。詳細については、「モデルリスト」をご参照ください。 |
url | str | 呼び出しアドレス:
|
| パラメーター | タイプ | 説明 |
|---|---|---|
| output_modalities | list[MultiModality] | モデルの出力モダリティ。テキストのみを出力する場合は [MultiModality.TEXT] に、音声とテキストの両方を出力する場合は [MultiModality.TEXT, MultiModality.AUDIO] に設定します。 |
| voice | str | モデルによって生成される音声の声。サポートされている声のリストについては、「声のリスト」をご参照ください。デフォルトの声:
|
| input_audio_format | AudioFormat | ユーザーの入力音声のフォーマット。現在、PCM_16000HZ_MONO_16BIT のみサポートされています。 |
| output_audio_format | AudioFormat | モデルの出力音声のフォーマット。現在、PCM_24000HZ_MONO_16BIT のみサポートされています。 |
| smooth_output | bool | このパラメーターは qwen3-omni-flash-realtime-2025-09-15 でのみサポートされています。
|
| instructions | str | モデルの目的またはロールを設定するシステムメッセージ。例: あなたは五つ星ホテルの AI エージェントです。客室タイプ、施設、価格、予約ポリシーに関する顧客の質問に答えてください。正確かつフレンドリに対応してください。常にプロフェッショナルで役立つ態度で応答してください。未確認の情報やホテルのサービス範囲外の情報は提供しないでください。 |
| enable_input_audio_transcription | bool | 入力音声の音声認識を有効にするかどうかを指定します。 |
| input_audio_transcription_model | str | 入力音声の文字起こしに使用する音声認識モデルは qwen3-asr-flash-realtime に固定されており、変更できません。 |
| turn_detection_type | str | サーバー側の VAD タイプ。これは「server_vad」に固定されています。 |
| turn_detection_threshold | float | VAD 検出のしきい値。騒がしい環境ではこの値を増やし、静かな環境では減らします。
|
| turn_detection_silence_duration_ms | int | 発話の終了を示す無音の期間。この期間を超えると、モデルは応答をトリガーします。デフォルト値: 800。有効な値: [200, 6000]。 |
主要なインターフェイス
OmniRealtimeConversation クラス
from dashscope.audio.qwen_omni import OmniRealtimeConversation 文を使用して OmniRealtimeConversation クラスをインポートできます。
| メソッドシグネチャ | サーバー応答イベント (コールバック経由で配信) | 説明 |
|---|---|---|
session.createdセッションが作成されましたsession.updated セッション構成が更新されました | サーバーとの接続を作成します。 | |
session.updatedセッション構成が更新されました | 現在のセッションインタラクションのデフォルト構成を更新します。パラメーター構成については、「リクエストパラメーター」セクションをご参照ください。接続を確立すると、サーバーはセッションのデフォルトの入力および出力構成を迅速に返します。デフォルトのセッション構成を更新するには、接続を確立した直後にこのインターフェイスを呼び出します。サーバーが session.update イベントを受信した後、パラメーター検証を実行します。パラメーターが無効な場合はエラーが返されます。それ以外の場合、サーバー側のセッション構成が更新されます。 | |
| None | Base64 エンコードされた音声データセグメントをクラウド入力音声バッファーに追加します。音声バッファーは、書き込み後にコミットできる一時的なストレージです。
| |
| None | Base64 エンコードされたイメージデータをクラウドビデオバッファーに追加します。イメージデータは、ローカルイメージまたはビデオストリームからリアルタイムでキャプチャされたイメージです。イメージ入力には次の制限が適用されます:
| |
input_audio_buffer.clearedサーバーが受信した音声をクリアします | 現在のクラウドバッファーから音声を削除します。 | |
input_audio_buffer.committedサーバーがコミットされた音声を受信しました | append を使用して以前にクラウドバッファーに追加された音声とビデオをコミットします。入力音声バッファーが空の場合、エラーが発生します。
| |
response.createdサーバーが応答の生成を開始しますresponse.output_item.added 応答に新しい出力コンテンツが利用可能ですconversation.item.created 会話アイテムが作成されましたresponse.content_part.added アシスタントメッセージアイテムに新しい出力コンテンツが追加されましたresponse.audio_transcript.delta インクリメンタルに生成された文字起こしテキストresponse.audio.delta モデルからインクリメンタルに生成された音声response.audio_transcript.done テキストの文字起こしが完了しましたresponse.audio.done 音声生成が完了しましたresponse.content_part.done アシスタントメッセージのテキストまたは音声コンテンツのストリーミングが完了しましたresponse.output_item.done アシスタントメッセージの出力アイテム全体のストリーミングが完了しましたresponse.done 応答が完了しました | サーバーにモデルの応答を作成するよう命令します。セッションが「turn_detection」モードで構成されている場合、サーバーは自動的にモデルの応答を作成します。 | |
| None | 進行中の応答をキャンセルします。キャンセルする応答がない場合、サーバーはエラーで応答します。 | |
| None | タスクを終了し、接続を閉じます。 | |
| None | 現在のタスクの session_id を取得します。 | |
| None | 最後の応答の response_id を取得します。 | |
| None | 最後の応答の最初のパケットのテキスト待機時間を取得します。 | |
| None | 最後の応答の最初のパケットの音声待機時間を取得します。 |
OmniRealtimeCallback
サーバーはコールバックを使用して、応答イベントとデータをクライアントに返します。サーバーが返す情報やデータを処理するために、コールバックメソッドを実装する必要があります。
from dashscope.audio.qwen_omni import OmniRealtimeCallback 文を使用してインターフェイスをインポートします。
| メソッド | パラメーター | 戻り値 | 説明 |
|---|---|---|---|
| None | None | このメソッドは、サーバーとの接続が確立された直後に呼び出されます。 | |
| message: サーバーの応答イベント。 | None | インターフェイス呼び出しへの応答と、モデルによって生成されたテキストと音声が含まれます。詳細については、「サーバーイベント」をご参照ください。 | |
| close_status_code: WebSocket を閉じるための状態コード。close_msg: WebSocket のクローズメッセージ。 | None | このメソッドは、サービスが接続を閉じた後に呼び出されます。 |
よくある質問
Q: 入力音声とイメージはどのようにアライメントされますか?
Qwen-Omni-Realtime は、音声を入力のタイムラインとして使用します。イメージは、送信された時間に基づいて音声ストリームに挿入されます。音声タイムライン上の任意のポイントにイメージを挿入できます。
リアルタイムのインタラクションシナリオでは、いつでもビデオ入力を有効または無効にできます。
Q: イメージと音声を入力するための推奨周波数は何ですか?
リアルタイムのインタラクションシナリオでは、1 fps または 2 fps のフレームレートでイメージを、100 ms のパケットで音声を送信できます。
Q: turn_detection スイッチの 2 つのモードの違いは何ですか?
現在、turn_detection が有効な場合、server_vad モードのみがサポートされています:
-
「turn_detection」が有効な場合:
- 入力状態: クラウドベースの VAD は、入力音声に基づいて発話文の終わりを判断します。その後、自動的に Qwen-Omni モデルを呼び出して推論を行い、テキストと音声の応答を送信します。
- 応答状態: この状態では、モデルの応答フェーズ中に音声とビデオの入力を中断することなく継続できます。応答が完了すると、状態は入力状態に戻り、音声入力を待ちます。
- 割り込み: モデルの応答中にユーザーが話し始めると、割り込みがトリガーされます。サービスは現在の応答を直ちに停止し、入力状態に切り替わります。
-
「turn_detection」が無効な場合:
- 音声とビデオの入力ターンの終わりを自分で判断する必要があります。その後、commit と create_response を使用して Qwen-Omni モデルの推論を手動でトリガーし、応答を取得する必要があります。
- モデルの応答状態中は、音声とビデオの入力を停止する必要があります。モデルが応答を終えた後にのみ、次のターンの入力を再開できます。
- モデルの応答を中断するには、cancel_response インターフェイスを使用する必要があります。