この Topic では、 Qwen-Omni リアルタイムモデル で DashScope Java SDK を使用するための主要なインターフェイスとリクエストパラメーターについて説明します。
前提条件
Java SDK のバージョンは 2.20.9 以降である必要があります。開始する前に、「リアルタイムマルチモーダルインタラクションフロー」をお読みください。
使用開始
GitHub にアクセスしてサンプルコードをダウンロードしてください。サンプルコードには、次の 3 つの呼び出しメソッドの例が含まれています。
-
音声会話の例: マイクからリアルタイムの音声入力をキャプチャし、VAD モード (自動音声区間検出) を有効にし、音声割り込みをサポートします。
enableTurnDetection パラメーターを
trueに設定します。音声割り込みのトリガーとなるエコーを防ぐため、音声再生にはヘッドフォンを使用してください。
-
音声およびビデオ会話の例: マイクとカメラからリアルタイムの音声およびビデオ入力をキャプチャし、VAD モード (自動音声区間検出) を有効にし、音声割り込みをサポートします。
enableTurnDetection パラメーターを
trueに設定します。音声割り込みのトリガーとなるエコーを防ぐため、音声再生にはヘッドフォンを使用してください。
-
ローカル呼び出し: ローカルの音声とイメージを入力として使用し、手動モード (送信ペースの手動制御) を有効にします。
enableTurnDetection パラメーターを
falseに設定します。
リクエストパラメーター
次のリクエストパラメーターを OmniRealtimeParam オブジェクトのチェーンメソッドまたはセッターを使用して設定します。次に、このオブジェクトをパラメーターとして OmniRealtimeConversation コンストラクターに渡します。
パラメーター | タイプ | 説明 |
|---|---|---|
model | String | Qwen-Omni リアルタイムモデルの名前。詳細については、「モデルリスト」をご参照ください。 |
url | String | エンドポイント URL:
|
次のリクエストパラメーターを OmniRealtimeConfig オブジェクトのチェーンメソッドまたはセッターを使用して設定します。次に、このオブジェクトをパラメーターとして updateSession インターフェイスに渡します。
| パラメーター | タイプ | 説明 |
|---|---|---|
modalities | List<OmniRealtimeModality> | モデルの出力モダリティ。テキスト出力のみの場合は [OmniRealtimeModality.TEXT] に、音声とテキストの両方を出力する場合は [OmniRealtimeModality.TEXT, OmniRealtimeModality.AUDIO] に設定します。 |
voice | String | モデルによって生成される音声の声。サポートされている声のリストについては、「声のリスト」をご参照ください。 デフォルトの声:
|
inputAudioFormat | OmniRealtimeAudioFormat | ユーザーの入力音声のフォーマット。現在、PCM_16000HZ_MONO_16BIT のみがサポートされています。 |
outputAudioFormat | OmniRealtimeAudioFormat | モデルの出力音声のフォーマット。現在、PCM_24000HZ_MONO_16BIT のみがサポートされています。 |
smooth_output | Boolean | このパラメーターは Qwen3-Omni-Flash-Realtime シリーズでのみサポートされています。
注記 |
instructions | String | モデルの目標やロールを設定するシステムメッセージ。 例: 「あなたは 5 つ星ホテルの AI カスタマーサービスエージェントです。客室タイプ、施設、価格、予約ポリシーに関する顧客の質問に、正確かつフレンドリな態度で答えてください。常にプロフェッショナルで役立つ対応を心がけてください。未確認の情報やホテルのサービスの範囲外の情報は提供しないでください。」 注記 |
enableInputAudioTranscription | Boolean | 入力音声の音声認識を有効にするかどうかを指定します。 |
InputAudioTranscription | String | 入力音声を文字起こしするために使用される音声認識モデル。現在、「gummy-realtime-v1」のみがサポートされています。 |
enableTurnDetection | Boolean | 音声区間検出 (VAD) を有効にするかどうかを指定します。無効にした場合、ユーザーは手動で音声を送信して omni 応答を作成する必要があります。 |
turnDetectionType | String | サーバー側の VAD タイプ。これは「server_vad」に固定されています。 |
turnDetectionThreshold | Float | VAD 検出のしきい値。騒がしい環境ではこの値を大きくし、静かな環境では小さくします。
デフォルト値: 0.2。有効値: [-1.0, 1.0]。 |
turnDetectionSilenceDurationMs | Integer | 発話の終了を示す無音の期間。この期間を超えると、モデルは応答をトリガーします。デフォルト値: 800。有効値: [200, 6000]。 |
主要なインターフェイス
OmniRealtimeConversation クラス
import com.alibaba.dashscope.audio.omni.OmniRealtimeConversation; を使用して OmniRealtimeConversation クラスをインポートします。
メソッドシグネチャ | サーバー応答イベント (コールバック経由で送信) | 説明 |
|---|---|---|
|
| サーバーとの接続を作成します。 |
|
| 現在のセッションのデフォルト構成を更新します。パラメーター構成については、「リクエストパラメーター」セクションをご参照ください。 接続を確立すると、サーバーはセッションのデフォルトの入力および出力構成を即座に返します。デフォルトのセッション構成を更新するには、接続を確立した直後にこのインターフェイスを呼び出すことをお勧めします。 session.update イベントを受信した後、サーバーはパラメーター検証を実行します。パラメーターが無効な場合、エラーが返されます。それ以外の場合、サーバー側のセッション構成が更新されます。 |
| なし | Base64 でエンコードされた音声データセグメントをクラウドの入力音声バッファーに追加します。音声バッファーは、データを書き込んで後で送信できる一時的なストレージです。
|
| なし | Base64 でエンコードされたイメージデータをクラウドのビデオバッファーに追加します。イメージデータは、ローカルイメージまたはビデオストリームからリアルタイムでキャプチャされたイメージです。 イメージ入力には次の制限が適用されます。
|
|
| 現在のクラウドバッファー内の音声を削除します。 |
|
| append を使用して以前にクラウドバッファーに追加された音声とビデオを送信します。入力音声バッファーが空の場合、エラーが発生します。
注 ⚠️:
|
|
response.audio_transcript.delta
response.audio_transcript.done
| サーバーにモデルの応答を作成するよう命令します。 セッションが「turn_detection」モードを有効にして構成されている場合、サーバーは自動的にモデルの応答を作成します。 |
| なし | 進行中の応答をキャンセルします。キャンセルする応答がない場合、サーバーはエラーを返します。 |
| なし | タスクを停止し、接続を閉じます。 |
| なし | 現在のタスクの session_id を取得します。 |
| なし | 最新の応答の response_id を取得します。 |
| なし | 最新の応答の最初のパケットのテキスト待機時間を取得します。 |
| なし | 最新の応答の最初のパケットの音声待機時間を取得します。 |
コールバックインターフェイス (OmniRealtimeCallback)
サーバーはコールバックを使用して、イベントとデータをクライアントに返します。サーバーから返されたイベントとデータを処理するために、コールバックメソッドを実装します。
import com.alibaba.dashscope.audio.omni.OmniRealtimeCallback; を使用してインターフェイスをインポートします。
メソッド | パラメーター | 戻り値 | 説明 |
|---|---|---|---|
| なし | なし | このメソッドは、サーバーとの接続が確立された直後に呼び出されます。 |
| message: サーバー応答イベント。 | なし | インターフェイス呼び出しへの応答と、モデルによって生成されたテキストおよび音声が含まれます。詳細については、「サーバーイベント」をご参照ください。 |
| code: WebSocket を閉じるための状態コード。 reason: WebSocket を閉じる理由。 | なし | このメソッドは、サービスへの接続が閉じた後に呼び出されます。 |
よくある質問
Q: 入力音声とイメージはどのようにアライメントされますか?
A: omni-realtime モデルは、音声ストリームをタイムラインとして使用します。イメージは、送信された時間に基づいて音声ストリームに関連付けられます。音声タイムライン上の任意の時点でイメージを追加できます。
リアルタイムのインタラクションシナリオでは、いつでもビデオ入力を有効または無効にできます。
Q: イメージと音声を入力するための推奨周波数は何ですか?
A: リアルタイムのインタラクションシナリオでは、1 fps または 2 fps のフレームレートでイメージを送信し、100 ms のパケットで音声を送信できます。
Q: turn_detection スイッチの 2 つのモードの違いは何ですか?
A: 現在、turn_detection が有効な場合、server_vad モードのみがサポートされています。
-
turn_detection が有効な場合:
- 入力状態: クラウドベースの VAD が入力音声を分析して、発話された文の終わりを判断します。その後、サービスは自動的に omni モデルを呼び出して推論を行い、テキストと音声の応答を送信します。
- 応答状態: この状態では、モデルの応答フェーズ中に音声とビデオの入力を中断することなく継続できます。応答が完了すると、状態は入力状態に戻り、さらなる音声入力を待ちます。
- 割り込み: モデルの応答中にユーザーが話し始めると、割り込みがトリガーされます。サービスは現在の応答を直ちに停止し、入力状態に切り替わります。
-
turn_detection が無効な場合:
- 音声とビデオの入力ターンの終わりを判断し、commit と create_response を使用して手動で omni モデルの推論をトリガーして応答を取得する必要があります。
- モデルが応答を生成している間は、音声とビデオの送信を停止する必要があります。次のターンの入力を再開できるのは、応答が完了した後のみです。
- モデルの応答を中断するには、response_cancel メソッドを使用する必要があります。
turn_detection が有効な場合でも、commit と create_response を使用して手動で応答をトリガーし、response_cancel を使用して中断できることに注意してください。
Q: input_audio_transcription に別のモデルを選択する必要があるのはなぜですか?
A: omni モデルは、エンドツーエンドのマルチモーダル大規模モデルです。そのテキスト出力は入力に対する応答であり、入力音声の直接的な文字起こしではありません。したがって、文字起こしには別の自動音声認識 (ASR) モデルを使用する必要があります。