WebSocket を介して音声を Qwen-ASR-Realtime にストリーミングし、DashScope Python SDK を使ってリアルタイムの文字起こし結果を受信します。
サポートされているモデル、機能、および完全なサンプルコードの概要については、「リアルタイム音声認識」をご参照ください。
前提条件
作業を開始する前に、以下の項目が準備済みであることを確認してください。
- DashScope SDK 1.25.6 以降
- API キー
- インタラクションフロー の理解
重要Alibaba Cloud Model Studio は、中国 (北京) リージョンおよびシンガポールリージョン向けにワークスペース専用ドメインをリリースしました。この新しい専用ドメインは、推論リクエストに対して優れたパフォーマンスと高い安定性を提供します。新しいドメインへの移行を推奨します。
- 中国 (北京):
dashscope.aliyuncs.comから{WorkspaceId}.cn-beijing.maas.aliyuncs.comへ - シンガポール:
dashscope-intl.aliyuncs.comから{WorkspaceId}.ap-southeast-1.maas.aliyuncs.comへ
{WorkspaceId} は、実際の ワークスペース ID に置き換えてください。既存のドメインは引き続き完全に機能します。
リクエストパラメーター
OmniRealtimeConversation コンストラクター
以下のパラメーターを使用して OmniRealtimeConversation インスタンスを作成します。
サンプルコードを表示
from dashscope.audio.qwen_omni import OmniRealtimeConversation, OmniRealtimeCallback
class MyCallback(OmniRealtimeCallback):
"""リアルタイム認識用コールバック"""
def __init__(self, conversation):
self.conversation = conversation
self.handlers = {
'session.created': self._handle_session_created,
'conversation.item.input_audio_transcription.completed': self._handle_final_text,
'conversation.item.input_audio_transcription.text': self._handle_stash_text,
'input_audio_buffer.speech_started': lambda r: print('======Speech Start======'),
'input_audio_buffer.speech_stopped': lambda r: print('======Speech Stop======')
}
def on_open(self):
print('Connection opened')
def on_close(self, code, msg):
print(f'Connection closed, code: {code}, msg: {msg}')
def on_event(self, response):
try:
handler = self.handlers.get(response['type'])
if handler:
handler(response)
except Exception as e:
print(f'[Error] {e}')
def _handle_session_created(self, response):
print(f"Start session: {response['session']['id']}")
def _handle_final_text(self, response):
print(f"Final recognized text: {response['transcript']}")
def _handle_stash_text(self, response):
print(f"Got stash result: {response['stash']}")
conversation = OmniRealtimeConversation(
model='qwen3-asr-flash-realtime',
# 以下の URL は中国本土向けです。中国本土以外のリージョンでは、
# wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime を使用してください。
url='wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime',
callback=MyCallback(conversation=None) # 一時的に None を渡し、後で注入します。
)
# コールバックに自身を注入します。
conversation.callback.conversation = conversation
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
model | str | はい | モデル を指定します。 |
callback | OmniRealtimeCallback | はい | サーバー側イベントを処理するコールバックオブジェクトです。 |
url | str | はい | WebSocket エンドポイントです。 中国 (北京): wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtimeシンガポール: wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime。{WorkspaceId} は、実際の ワークスペース ID に置き換えてください。 |
セッション構成
接続後、update_session を呼び出してセッションパラメーターを構成します。
サンプルコードを表示
from dashscope.audio.qwen_omni import TranscriptionParams, MultiModality
transcription_params = TranscriptionParams(
language='zh',
sample_rate=16000,
input_audio_format="pcm"
)
conversation.update_session(
output_modalities=[MultiModality.TEXT],
enable_turn_detection=True,
turn_detection_type="server_vad",
turn_detection_threshold=0.0,
turn_detection_silence_duration_ms=400,
enable_input_audio_transcription=True,
transcription_params=transcription_params
)
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
output_modalities | List[MultiModality] | はい | 出力モダリティです。固定値:[MultiModality.TEXT]。 |
enable_turn_detection | bool | いいえ | サーバー側の音声アクティビティ検出 (VAD) を有効にします。デフォルト:True。False の場合、認識をトリガーするために commit() を手動で呼び出す必要があります。 |
turn_detection_type | str | いいえ | サーバー側 VAD のタイプです。固定値:server_vad。 |
turn_detection_threshold | float | いいえ | VAD の感度しきい値です。デフォルト:0.2。推奨値:0.0。有効範囲:[-1, 1]。値が低いほど感度が高くなり(バックグラウンドノイズでもトリガーされる可能性あり)、値が高いほどノイズ環境での誤トリガーが少なくなります。 |
turn_detection_silence_duration_ms | int | いいえ | 文の終了を示すサイレンス持続時間 (ミリ秒) です。デフォルト:800。推奨値:400。有効範囲:[200, 6000]。値が小さい (例:300 ms) ほど応答が速くなりますが、自然なポーズが分割される可能性があります。値が大きい (例:1200 ms) ほど長文のポーズを適切に処理できますが、レイテンシが高くなります。 |
transcription_params | TranscriptionParams | いいえ | 音声認識の構成です。「TranscriptionParams」をご参照ください。 |
TranscriptionParams
TranscriptionParams コンストラクターを使用して音声認識設定を構成します。
サンプルコードを表示
transcription_params = TranscriptionParams(
language='zh',
sample_rate=16000,
input_audio_format="pcm"
)
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
language | str | いいえ | 音声のソース言語です。サポートされる値:zh (中国語:普通話、四川語、閩南語、呉語)、yue (広東語)、en (英語)、ja (日本語)、ko (韓国語)、de (ドイツ語)、fr (フランス語)、es (スペイン語)、pt (ポルトガル語)、it (イタリア語)、ru (ロシア語)、ar (アラビア語)、hi (ヒンディー語)、id (インドネシア語)、th (タイ語)、tr (トルコ語)、uk (ウクライナ語)、vi (ベトナム語)、cs (チェコ語)、da (デンマーク語)、fi (フィンランド語)、fil (フィリピン語)、is (アイスランド語)、ms (マレー語)、no (ノルウェー語)、pl (ポーランド語)、sv (スウェーデン語) |
sample_rate | int | いいえ | 音声のサンプリングレート (Hz) です。デフォルト:16000。サポートされる値:16000、8000。8000 を使用すると、サーバーが認識前に 16,000 Hz にアップサンプリングするため、わずかなレイテンシが発生する可能性があります。電話録音など 8 kHz ソース音声の場合のみ、8000 を使用してください。 |
input_audio_format | str | いいえ | 音声フォーマットです。デフォルト:pcm。サポートされる値:pcm、opus。 |
corpus_text | str | いいえ | コンテキストバイアシング用の背景テキスト、エンティティ語彙、またはその他のリファレンス情報。最大:10,000 トークン。詳細については、「コンテキストバイアシング」をご参照ください。 |
主要インターフェイス
OmniRealtimeConversation クラス
from dashscope.audio.qwen_omni import OmniRealtimeConversation
| メソッド | サーバー応答イベント | 説明 |
|---|---|---|
connect() | session.created、session.updated | サーバーへの WebSocket 接続を開きます。 |
update_session(...) | session.updated | connect() 後に呼び出してセッションを構成します。省略した場合はデフォルト値が適用されます。パラメーターの詳細については、「セッション構成」をご参照ください。 |
append_audio(audio_b64: str) | なし | Base64 エンコードされた音声チャンクをサーバーの入力バッファーに送信します。enable_turn_detection=True の場合、サーバーが音声境界を検出し自動的にコミットします。enable_turn_detection=False の場合、クライアントがコミットタイミングを制御します (1 イベントあたり最大 15 MiB)。チャンクサイズを小さくすると VAD の応答性が向上します。 |
commit() | input_audio_buffer.committed | バッファリングされた音声を認識のためにコミットします。バッファーが空の場合、エラーを返します。enable_turn_detection=True の場合は無効になります。 |
end_session(timeout: int = 20) | session.finished | サーバーが最終認識を完了した後にセッションを終了します。VAD モード (デフォルト) の場合、すべての音声送信後に呼び出します。マニュアルモード の場合、commit() 後に呼び出します。非同期バリアント:end_session_async()。 |
close() | なし | タスクを終了し、接続を閉じます。 |
get_session_id() | なし | 現在のセッション ID を返します。 |
get_last_response_id() | なし | 最新の応答 ID を返します。 |
OmniRealtimeCallback インターフェイス
OmniRealtimeCallback をサブクラス化し、そのメソッドを実装してサーバーイベントを処理します。
from dashscope.audio.qwen_omni import OmniRealtimeCallback
| メソッド | パラメーター | 説明 |
|---|---|---|
on_open() | なし | WebSocket 接続が確立されたときに呼び出されます。 |
on_event(message: dict) | message: サーバーイベント | サーバーイベントを受信したときに呼び出されます。 |
on_close(close_status_code, close_msg) | close_status_code: 状態コード;close_msg: ログメッセージ | WebSocket 接続が閉じられたときに呼び出されます。 |