すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:Python SDK

最終更新日:Sep 02, 2026

このトピックでは、DashScope Python SDK を使用して Qwen-Omni-Realtime を呼び出すための主要なインターフェイスとリクエストパラメーターについて説明します。

前提条件

SDK のバージョンは 1.23.9 以降である必要があります。開始する前に、「リアルタイムマルチモーダルインタラクションフロー」をご確認ください。

使用開始

GitHub にアクセスしてサンプルコードをダウンロードしてください。3 つの呼び出しメソッドのサンプルコードを提供しています:

  1. 音声会話の例: マイクからリアルタイムの音声入力をキャプチャし、音声アクティビティ検出 (VAD) モードを有効にし、音声による割り込みをサポートします。

    enable_turn_detection パラメーターを True に設定します。

    エコーによる音声割り込みのトリガーを防ぐため、音声再生にはヘッドフォンを使用してください。

  2. 音声とビデオの会話の例: マイクとカメラからリアルタイムの音声とビデオの入力をキャプチャし、VAD モードを有効にし、音声による割り込みをサポートします。

    enable_turn_detection パラメーターを True に設定します。

    エコーによる音声割り込みのトリガーを防ぐため、音声再生にはヘッドフォンを使用してください。

  3. ローカル呼び出し: ローカルの音声とイメージを入力として使用し、手動モードを有効にします。これにより、送信ペースを手動でコントロールできます。

    enable_turn_detection パラメーターを False に設定します。

リクエストパラメーター

OmniRealtimeConversation クラスのコンストラクターメソッド (init) を使用して、次のリクエストパラメーターを設定できます。

パラメーター

タイプ

説明

model

str

Qwen-Omni モデルの名前。詳細については、「モデルリスト」をご参照ください。

url

str

呼び出しアドレス:

  • シンガポールリージョン: wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime

  • 北京リージョン: wss://dashscope.aliyuncs.com/api-ws/v1/realtime

update_session インターフェイスを使用して、次のリクエストパラメーターを構成できます。

パラメータータイプ説明

output_modalities

list[MultiModality]

モデルの出力モダリティ。テキストのみを出力する場合は [MultiModality.TEXT] に、音声とテキストの両方を出力する場合は [MultiModality.TEXT, MultiModality.AUDIO] に設定します。

voice

str

モデルによって生成される音声の声。サポートされている声のリストについては、「声のリスト」をご参照ください。

デフォルトの声:

  • Qwen3-Omni-Flash-Realtime: "Cherry"
  • Qwen-Omni-Turbo-Realtime: "Chelsie"

input_audio_format

AudioFormat

ユーザーの入力音声のフォーマット。現在、PCM_16000HZ_MONO_16BIT のみサポートされています。

output_audio_format

AudioFormat

モデルの出力音声のフォーマット。現在、PCM_24000HZ_MONO_16BIT のみサポートされています。

smooth_output

bool

このパラメーターは Qwen3-Omni-Flash-Realtime シリーズでのみサポートされています。

  • True: 会話的な応答を取得します。

  • False: よりフォーマルな書き言葉スタイルの応答を取得します。

    ただし、コンテンツが音読しにくい場合、品質が低下する可能性があります。

  • None: モデルが会話的またはフォーマルな応答スタイルを自動的に選択します。

instructions

str

モデルの目的またはロールを設定するシステムメッセージ。

例: あなたは五つ星ホテルの AI エージェントです。客室タイプ、施設、価格、予約ポリシーに関する顧客の質問に答えてください。正確かつフレンドリに対応してください。常にプロフェッショナルで役立つ態度で応答してください。未確認の情報やホテルのサービス範囲外の情報は提供しないでください。

enable_input_audio_transcription

bool

入力音声の音声認識を有効にするかどうかを指定します。

input_audio_transcription_model

str

入力音声を文字起こしするために使用される音声認識モデル。現在、「gummy-realtime-v1」のみがサポートされています。

turn_detection_type

str

サーバー側の VAD タイプ。これは「server_vad」に固定されています。

turn_detection_threshold

float

VAD 検出のしきい値。騒がしい環境ではこの値を増やし、静かな環境では減らします。

  • 値が -1 に近いほど、ノイズが音声として検出されやすくなります。
  • 値が 1 に近いほど、ノイズが音声として検出されにくくなります。

デフォルト値: 0.2。有効な値: [-1.0, 1.0]。

turn_detection_silence_duration_ms

int

発話の終了を示す無音の期間。この期間を超えると、モデルは応答をトリガーします。デフォルト値: 800。有効な値: [200, 6000]。

主要なインターフェイス

OmniRealtimeConversation クラス

from dashscope.audio.qwen_omni import OmniRealtimeConversation 文を使用して OmniRealtimeConversation クラスをインポートできます。

メソッドシグネチャ

サーバー応答イベント (コールバック経由で配信)

説明

def connect(self,) -> None

session.created

セッションが作成されました

session.updated

セッション構成が更新されました

サーバーとの接続を作成します。

def update_session(self,
                       output_modalities: list[MultiModality],
                       voice: str,
                       input_audio_format: AudioFormat = AudioFormat.
                       PCM_16000HZ_MONO_16BIT,
                       output_audio_format: AudioFormat = AudioFormat.
                       PCM_24000HZ_MONO_16BIT,
                       enable_input_audio_transcription: bool = True,
                       input_audio_transcription_model: str = None,
                       enable_turn_detection: bool = True,
                       turn_detection_type: str = 'server_vad',
                       prefix_padding_ms: int = 300,
                       turn_detection_threshold: float = 0.2,
                       turn_detection_silence_duration_ms: int = 800,
                       turn_detection_param: dict = None,
                       smooth_output: bool = True
                       **kwargs) -> None

session.updated

セッション構成が更新されました

現在のセッションインタラクションのデフォルト構成を更新します。パラメーター構成については、「リクエストパラメーター」セクションをご参照ください。

接続を確立すると、サーバーはセッションのデフォルトの入力および出力構成を迅速に返します。デフォルトのセッション構成を更新するには、接続を確立した直後にこのインターフェイスを呼び出します。

サーバーが session.update イベントを受信した後、パラメーター検証を実行します。パラメーターが無効な場合はエラーが返されます。それ以外の場合、サーバー側のセッション構成が更新されます。

def append_audio(self, audio_b64: str) -> None

None

Base64 エンコードされた音声データセグメントをクラウド入力音声バッファーに追加します。音声バッファーは、書き込み後にコミットできる一時的なストレージです。

  • 「turn_detection」が有効な場合、音声バッファーは音声検出に使用され、サーバーがコミットするタイミングを決定します。
  • 「turn_detection」が無効な場合、クライアントは各イベントに配置する音声の量を選択でき、最大 15 MiB までです。たとえば、クライアントからより小さなデータブロックをストリーミングすると、VAD の応答性が向上します。
def append_video(self, video_b64: str) -> None

None

Base64 エンコードされたイメージデータをクラウドビデオバッファーに追加します。イメージデータは、ローカルイメージまたはビデオストリームからリアルタイムでキャプチャされたイメージです。

イメージ入力には次の制限が適用されます:

  • イメージフォーマットは JPG または JPEG である必要があります。推奨されるイメージ解像度は 480p または 720p で、最大 1080p です。
  • 単一のイメージのサイズは 500 KB (Base64 エンコーディング前) を超えることはできません。
  • イメージデータは Base64 エンコードされている必要があります。
  • 1 イメージ/秒の周波数でサーバーにイメージを送信します。
def clear_appended_audio(self, ) -> None

input_audio_buffer.cleared

サーバーが受信した音声をクリアします

現在のクラウドバッファーから音声を削除します。

def commit(self, ) -> None

input_audio_buffer.committed

サーバーがコミットされた音声を受信しました

append を使用して以前にクラウドバッファーに追加された音声とビデオをコミットします。入力音声バッファーが空の場合、エラーが発生します。

  • 「turn_detection」が有効な場合、クライアントはこのイベントを送信する必要はありません。サーバーは自動的に音声バッファーをコミットします。
  • 「turn_detection」が無効な場合、クライアントはユーザーメッセージアイテムを作成するために音声バッファーをコミットする必要があります。

注意 ⚠️:

  1. input_audio_transcription を使用してセッションに音声文字起こしが構成されている場合、システムは音声を文字起こしします。
  2. 入力音声バッファーをコミットしても、モデルからの応答は作成されません。
def create_response(self,
        instructions: str = None,
        output_modalities: list[MultiModality] = None) -> None

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」モードで構成されている場合、サーバーは自動的にモデルの応答を作成します。

def cancel_response(self, ) -> None

None

進行中の応答をキャンセルします。キャンセルする応答がない場合、サーバーはエラーで応答します。

def close(self, ) -> None

None

タスクを終了し、接続を閉じます。

def get_session_id(self) -> str

None

現在のタスクの session_id を取得します。

def get_last_response_id(self) -> str

None

最後の応答の response_id を取得します。

def get_last_first_text_delay(self)

None

最後の応答の最初のパケットのテキスト待機時間を取得します。

def get_last_first_audio_delay(self)

None

最後の応答の最初のパケットの音声待機時間を取得します。

OmniRealtimeCallback

サーバーはコールバックを使用して、応答イベントとデータをクライアントに返します。サーバーが返す情報やデータを処理するために、コールバックメソッドを実装する必要があります。

from dashscope.audio.qwen_omni import OmniRealtimeCallback 文を使用してインターフェイスをインポートします。

メソッド

パラメーター

戻り値

説明

def on_open(self) -> None

None

None

このメソッドは、サーバーとの接続が確立された直後に呼び出されます。

def on_event(self, message: str) -> None

message: サーバーの応答イベント。

None

インターフェイス呼び出しへの応答と、モデルによって生成されたテキストと音声が含まれます。詳細については、「サーバーイベント」をご参照ください。

def on_close(self, close_status_code, close_msg) -> 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 インターフェイスを使用する必要があります。

「turn_detection」が有効な場合でも、commit と create_response を使用して応答をアクティブにトリガーし、cancel_response を使用してアクティブに中断できることに注意してください。

Q: なぜ input_audio_transcription に別のモデルを選択するのですか?

Qwen-Omni-Realtime はエンドツーエンドのマルチモーダルモデルです。そのテキスト出力は入力に対する応答であるため、入力音声の文字起こしを直接生成しません。文字起こしのためには、別の自動音声認識 (ASR) モデルを統合する必要があります。