Nodes and media
トークモード
トークモードには2つのランタイム形態があります。
- ネイティブ macOS/iOS/Android トークは、ローカル音声認識、Gateway チャット、
talk.speakTTS を使用します。ノードはtalkcapability を公開し、対応するtalk.*コマンドを宣言します。 - iOS トークは、
webrtcを選択するか transport を省略する OpenAI リアルタイム設定に対して、クライアント所有の WebRTC を使用します。明示的なgateway-relay、provider-websocket、および OpenAI 以外のリアルタイム設定は Gateway 所有のリレーのままです。非リアルタイム設定はネイティブ音声ループを使用します。 - ブラウザートークは、クライアント所有の
webrtcおよびprovider-websocketセッションにはtalk.client.createを使用し、Gateway 所有のgateway-relayセッションにはtalk.session.createを使用します。managed-roomは Gateway ハンドオフとトランシーバールーム用に予約されています。 - Android トークは、
talk.realtime.mode: "realtime"とtalk.realtime.transport: "gateway-relay"で Gateway 所有のリアルタイムリレーセッションを選択できます。それ以外の場合は、ネイティブ音声認識、Gateway チャット、talk.speakのままです。 - 文字起こしのみのクライアントは、アシスタントの音声応答なしでキャプションやディクテーションが必要な場合に、
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" })を使用し、その後talk.session.appendAudio、talk.session.cancelTurn、talk.session.closeを使用します。
ネイティブトークは、継続的な音声会話ループです。
- 音声を聞き取る
- アクティブなセッションを通じてトランスクリプトをモデルに送信する
- 応答を待つ
- 設定済みのトークプロバイダー(
talk.speak)経由で読み上げる
クライアント所有のリアルタイムトークは、プロバイダーのツール呼び出しを talk.client.toolCall 経由で転送します。これらのクライアントは、リアルタイム相談で chat.send を直接呼び出しません。
リアルタイム相談がアクティブな間、トーククライアントは talk.client.steer または
talk.session.steer を使用して、発話入力を status、steer、cancel、または
followup として分類できます。受け入れられたステアリングはアクティブな埋め込み実行にキューされ、拒否された
ステアリングは no_active_run、not_streaming、
または compacting などの構造化された理由を返します。
文字起こしのみのトークは、リアルタイムおよび STT/TTS セッションと同じ共通トークイベントエンベロープを発行しますが、mode: "transcription" と brain: "none" を使用します。これはキャプション、ディクテーション、観察のみの音声キャプチャ用です。単発でアップロードされたボイスメモは、引き続きメディア/音声パスを使用します。
動作(macOS)
- トークモードが有効な間は 常時オンのオーバーレイ。
- 聞き取り中 → 考え中 → 発話中 のフェーズ遷移。
- 短い一時停止(無音ウィンドウ)で、現在のトランスクリプトが送信されます。
- 返信は WebChat に書き込まれます(入力した場合と同じ)。
- 発話で割り込み(デフォルトはオン): アシスタントが話している間にユーザーが話し始めた場合、再生を停止し、次のプロンプト用に割り込みタイムスタンプを記録します。
返信内の音声ディレクティブ
アシスタントは、音声を制御するために返信の先頭に 単一の JSON 行 を付けることがあります。
{ "voice": "<voice-id>", "once": true }ルール:
- 最初の空でない行のみ。
- 不明なキーは無視されます。
once: trueは現在の返信にのみ適用されます。onceがない場合、その音声がトークモードの新しいデフォルトになります。- JSON 行は TTS 再生前に取り除かれます。
対応キー:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
設定(~/.openclaw/openclaw.json)
{ talk: { provider: "elevenlabs", providers: { elevenlabs: { voiceId: "elevenlabs_voice_id", modelId: "eleven_v3", outputFormat: "mp3_44100_128", apiKey: "elevenlabs_api_key", }, mlx: { modelId: "mlx-community/Soprano-80M-bf16", }, system: {}, }, speechLocale: "ru-RU", silenceTimeoutMs: 1500, interruptOnSpeech: true, realtime: { provider: "openai", providers: { openai: { apiKey: "openai_api_key", model: "gpt-realtime-2", voice: "cedar", }, }, instructions: "Speak warmly and keep answers brief.", mode: "realtime", transport: "webrtc", brain: "agent-consult", }, },}デフォルト:
interruptOnSpeech: truesilenceTimeoutMs: 未設定の場合、トークはトランスクリプト送信前にプラットフォームのデフォルト一時停止ウィンドウを維持します(macOS と Android では 700 ms、iOS では 900 ms)provider: アクティブなトークプロバイダーを選択します。macOS ローカル再生パスにはelevenlabs、mlx、またはsystemを使用します。providers.<provider>.voiceId: ElevenLabs ではELEVENLABS_VOICE_ID/SAG_VOICE_IDにフォールバックします(または API キーが利用可能な場合は最初の ElevenLabs 音声)。providers.elevenlabs.modelId: 未設定の場合はeleven_v3がデフォルトです。providers.mlx.modelId: 未設定の場合はmlx-community/Soprano-80M-bf16がデフォルトです。providers.elevenlabs.apiKey:ELEVENLABS_API_KEYにフォールバックします(または利用可能な場合は Gateway シェルプロファイル)。consultThinkingLevel: リアルタイムopenclaw_agent_consult呼び出しの背後にある完全な OpenClaw エージェント実行に対する任意の thinking level オーバーライド。consultFastMode: リアルタイムopenclaw_agent_consult呼び出しに対する任意の fast-mode オーバーライド。realtime.provider: アクティブなリアルタイム音声プロバイダーを選択します。WebRTC にはopenai、プロバイダー WebSocket にはgoogle、または Gateway リレー経由のブリッジ専用プロバイダーを使用します。realtime.providers.<provider>は、プロバイダー所有のリアルタイム設定を保存します。ブラウザーが受け取るのはエフェメラルまたは制限付きセッション認証情報のみで、標準 API キーは受け取りません。realtime.providers.openai.voice: 組み込みの OpenAI Realtime 音声 ID。現在のgpt-realtime-2音声はalloy、ash、ballad、coral、echo、sage、shimmer、verse、marin、cedarです。最高品質にはmarinとcedarが推奨されます。realtime.transport:webrtcは iOS とブラウザーでクライアント所有の OpenAI WebRTC を使用します。provider-websocketはブラウザー所有ですが、iOS では Gateway リレーのままです。gateway-relayはプロバイダー音声を Gateway 上に保持します。Android はこの transport の場合のみリアルタイムを使用し、それ以外はネイティブ STT/TTS ループを維持します。realtime.brain:agent-consultはリアルタイムツール呼び出しを Gateway ポリシー経由でルーティングします。direct-toolsはレガシーの直接ツール互換動作です。noneは文字起こしまたは外部オーケストレーション用です。realtime.consultRouting:provider-directは、プロバイダーがopenclaw_agent_consultをスキップした場合にプロバイダーの直接返信を保持します。force-agent-consultは、Gateway リレーに確定済みユーザートランスクリプトを OpenClaw 経由でルーティングさせます。realtime.instructions: OpenClaw の組み込みリアルタイムプロンプトに、プロバイダー向けのシステム指示を追加します。音声スタイルとトーンに使用します。OpenClaw はデフォルトのopenclaw_agent_consultガイダンスを維持します。talk.catalogは、各プロバイダーの有効なモード、transport、brain 戦略、リアルタイム音声形式、capability フラグ、ランタイムで選択された準備完了結果とともに、正規プロバイダー ID とレジストリエイリアスを公開します。ファーストパーティのトーククライアントは、プロバイダーエイリアスをローカルに保持する代わりに、そのカタログを使用する必要があります。グループ準備完了を省略する古い Gateway は、明確に未設定なのではなく未検証です。- ストリーミング文字起こしプロバイダーは
talk.catalog.transcription経由で検出されます。現在の Gateway リレーは、専用のトーク文字起こし設定サーフェスが追加されるまで、Voice Call ストリーミングプロバイダー設定を使用します。 speechLocale: iOS/macOS 上のオンデバイストーク音声認識用の任意の BCP 47 ロケール ID。デバイスのデフォルトを使用する場合は未設定のままにします。outputFormat: macOS/iOS ではpcm_44100、Android ではpcm_24000がデフォルトです(MP3 ストリーミングを強制するにはmp3_*を設定)
macOS UI
- メニューバー切り替え: トーク
- 設定タブ: トークモード グループ(音声 ID + 割り込み切り替え)
- オーバーレイ:
- 聞き取り中: マイクレベルに合わせて雲が脈動
- 考え中: 沈み込むアニメーション
- 発話中: 放射状のリング
- 雲をクリック: 発話を停止
- X をクリック: トークモードを終了
Android UI
- 音声タブ切り替え: トーク
- 手動 マイク と トーク は、相互に排他的なランタイムキャプチャモードです。
- 手動マイクとリアルタイムトークは、接続された Bluetooth Classic または BLE ヘッドセットマイクを優先します。切断された場合、アプリは別のヘッドセット入力を要求するか、Android にデフォルトマイクを使用させます。キャプチャを停止すると、デフォルトマイク設定に戻ります。
- 手動マイクは、アプリがフォアグラウンドを離れるか、ユーザーが音声タブを離れると停止します。
- トークモードは、オフに切り替えられるか Android ノードが切断されるまで実行され続け、アクティブな間は Android のマイク foreground-service type を使用します。
注記
- Speech + Microphone 権限が必要です。
- ネイティブトークはアクティブな Gateway セッションを使用し、応答イベントが利用できない場合にのみ履歴ポーリングにフォールバックします。
- クライアント所有のリアルタイムトークは、プロバイダー所有セッションに
chat.sendを公開する代わりに、openclaw_agent_consultにtalk.client.toolCallを使用します。 - 文字起こしのみのトークは、
talk.session.create、talk.session.appendAudio、talk.session.cancelTurn、talk.session.closeを使用します。クライアントは部分/最終トランスクリプト更新のためにtalk.eventを購読します。 - gateway は、アクティブなトークプロバイダーを使用して
talk.speak経由でトーク再生を解決します。Android は、その RPC が利用できない場合にのみローカルシステム TTS にフォールバックします。 - macOS ローカル MLX 再生は、存在する場合は同梱の
openclaw-mlx-ttsヘルパーを使用し、またはPATH上の実行可能ファイルを使用します。開発中にカスタムヘルパーバイナリを指すには、OPENCLAW_MLX_TTS_BINを設定します。 eleven_v3のstabilityは0.0、0.5、または1.0に検証されます。他のモデルは0..1を受け入れます。latency_tierは、設定されている場合0..4に検証されます。- Android は、低レイテンシー AudioTrack ストリーミング用に
pcm_16000、pcm_22050、pcm_24000、pcm_44100出力形式をサポートします。
関連
Was this useful?