跳轉到主要內容
Talk 模式涵蓋五種執行階段形態:
  • 原生 macOS/iOS/Android Talk:本機語音辨識、閘道聊天,以及 talk.speak TTS。節點會通告 talk 能力,並宣告支援哪些 talk.* 命令。
  • iOS Talk(即時):針對選擇 webrtc 傳輸或省略傳輸的 OpenAI 即時設定,使用客戶端擁有的 WebRTC。明確的 gateway-relayprovider-websocket,以及非 OpenAI 即時設定會留在閘道擁有的轉送上;非即時設定則使用原生語音迴圈。
  • 瀏覽器 Talk:客戶端擁有的 webrtc/provider-websocket 工作階段使用 talk.client.create,閘道擁有的 gateway-relay 工作階段使用 talk.session.createmanaged-room 保留給閘道交接和對講機房間。
  • Android Talk(即時):透過 talk.realtime.mode: "realtime"talk.realtime.transport: "gateway-relay" 選擇啟用。否則 Android 會維持使用原生語音辨識、閘道聊天,以及 talk.speak
  • 僅轉錄客戶端talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }),接著使用 talk.session.appendAudiotalk.session.cancelTurntalk.session.close,可在沒有助理語音回應的情況下進行字幕/聽寫。一次性上傳的語音記事仍使用 媒體理解 音訊路徑。
原生 Talk 是一個連續迴圈:聆聽語音、透過作用中的工作階段將轉錄稿傳送給模型、等待回應,然後透過已設定的 Talk 提供者(talk.speak)朗讀。 客戶端擁有的即時 Talk 會透過 talk.client.toolCall 轉送提供者工具呼叫,而不是直接呼叫 chat.send。即時諮詢作用中時,客戶端可以呼叫 talk.client.steertalk.session.steer,將口語輸入分類為 statussteercancelfollowup。接受的導向會排入作用中的嵌入式執行;拒絕的導向會傳回原因,例如 no_active_runnot_streamingcompacting 僅轉錄 Talk 會發出與即時和 STT/TTS 工作階段相同的 Talk 事件封套,但使用 mode: "transcription"brain: "none"。所有 Talk 工作階段都會在 talk.event 頻道上廣播事件;客戶端訂閱該頻道,以取得部分/最終轉錄更新(transcript.delta/transcript.done)和其他工作階段遙測。

行為 (macOS)

  • Talk 模式啟用時,疊加層永遠顯示。
  • 聆聽 → 思考 → 說話 階段轉換。
  • 短暫停頓(靜音視窗)時,會傳送目前的轉錄稿。
  • 回覆會寫入 WebChat(與輸入相同)。
  • 語音打斷(預設開啟):如果使用者在助理說話時講話,播放會停止,且打斷時間戳記會記錄供下一個提示使用。

回覆中的語音指令

助理可以在回覆前加上一行 JSON 來控制語音:
{ "voice": "<voice-id>", "once": true }
規則:
  • 僅限第一個非空白行;JSON 行會在 TTS 播放前移除。
  • 未知鍵會被忽略。
  • once: true 僅套用於目前回覆;若沒有它,該語音會成為新的 Talk 模式預設值。
支援的鍵:voice / voice_id / voiceIdmodel / model_id / modelIdspeedrate(WPM)、stabilitysimilaritystylespeakerBoostseednormalizelangoutput_formatlatency_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",
          speakerVoice: "cedar",
        },
      },
      instructions: "Speak warmly and keep answers brief.",
      mode: "realtime",
      transport: "webrtc",
      brain: "agent-consult",
    },
  },
}
預設值備註
provider-作用中的 Talk TTS 提供者。針對 macOS 本機播放路徑使用 elevenlabsmlxsystem
providers.<id>.voiceId-ElevenLabs 會退回使用 ELEVENLABS_VOICE_ID / SAG_VOICE_ID,或在有 API 金鑰時使用第一個可用語音。
providers.elevenlabs.modelIdeleven_v3
providers.mlx.modelIdmlx-community/Soprano-80M-bf16
providers.elevenlabs.apiKey-會退回使用 ELEVENLABS_API_KEY(或可用時使用閘道 shell 設定檔)。
speechLocale裝置預設值iOS/macOS 上裝置端 Talk 語音辨識的 BCP 47 語言地區 ID。
silenceTimeoutMs700 ms macOS/Android,900 ms iOSTalk 傳送轉錄稿前的暫停視窗。
interruptOnSpeechtrue
outputFormatpcm_44100 macOS/iOS,pcm_24000 Android設為 mp3_* 以強制 MP3 串流。
consultThinkingLevel未設定即時 openclaw_agent_consult 呼叫背後代理執行的思考等級覆寫。
consultFastMode未設定即時 openclaw_agent_consult 呼叫的快速模式覆寫。
realtime.provider-openai 用於 WebRTC,google 用於提供者 WebSocket,或透過閘道轉送使用僅橋接的提供者。
realtime.providers.<id>-提供者擁有的即時設定。瀏覽器只會收到臨時/受限的工作階段憑證,絕不會收到標準 API 金鑰。
realtime.providers.openai.speakerVoicealloy內建 OpenAI Realtime 語音 ID(較舊的 voice 鍵仍可運作,但已棄用)。目前 gpt-realtime-2 語音:alloyashballadcedarcoralechomarinsageshimmerverse;建議使用 marincedar 以取得最佳品質。
realtime.transport-webrtc:iOS 和瀏覽器中的客戶端擁有 OpenAI WebRTC。provider-websocket:瀏覽器擁有,在 iOS 上會留在閘道轉送。gateway-relay:讓提供者音訊保留在閘道上;Android 只有搭配此傳輸才會使用即時模式。
realtime.brain-agent-consult 透過閘道政策路由即時工具呼叫;direct-tools 是舊版直接工具相容性;none 用於轉錄/外部編排。
realtime.consultRouting-當提供者略過 openclaw_agent_consult 時,provider-direct 會保留提供者的直接回覆;force-agent-consult 則會改為透過 OpenClaw 路由最終使用者轉錄稿。
realtime.instructions-將面向提供者的系統指示附加到 OpenClaw 內建即時提示(語音風格/語氣);預設的 openclaw_agent_consult 指引會保留。
talk.catalog 會公開標準提供者 ID 和註冊表別名、每個提供者的有效模式/傳輸/brain 策略/即時音訊格式/能力旗標,以及執行階段選取的就緒結果。第一方 Talk 客戶端應讀取該目錄,而不是在本機維護提供者別名;對於省略群組就緒狀態的較舊閘道,應視為未驗證,而不是明確認定為未設定。串流轉錄提供者會透過 talk.catalog.transcription 探索;目前的閘道轉送會使用 Voice Call 串流提供者設定,直到專用的 Talk 轉錄設定介面推出為止。

macOS UI

  • 選單列切換:Talk
  • 設定分頁:Talk Mode 群組(語音 ID + 中斷切換)
  • 覆蓋層:正在聆聽(雲朵隨麥克風音量脈動)→ 正在思考(下沉動畫)→ 正在說話(向外輻射圓環)。按一下雲朵可停止說話,按一下 X 可退出 Talk 模式。

Android UI

  • 語音分頁切換:Talk
  • 手動 MicTalk 是互斥的擷取模式。
  • 手動 Mic 和即時 Talk 會優先使用已連線的 Bluetooth Classic 或 BLE 耳機麥克風;如果連線中斷,應用程式會要求另一個耳機輸入,或退回預設麥克風,並在擷取停止後還原預設偏好設定。
  • 手動 Mic 會在應用程式離開前景或使用者離開語音分頁時停止。
  • Talk Mode 會持續執行,直到切換為關閉或節點中斷連線,並在作用中時使用 Android 的麥克風前景服務類型。
  • Android 支援 pcm_16000pcm_22050pcm_24000pcm_44100 輸出格式,用於低延遲 AudioTrack 串流。

備註

  • 需要語音 + 麥克風權限。
  • 原生 Talk 使用作用中的閘道工作階段,並且只在回應事件無法使用時退回歷史輪詢。
  • 閘道會透過 talk.speak 使用作用中的 Talk 提供者解析 Talk 播放。Android 只在該 RPC 無法使用時退回本機系統 TTS。
  • macOS 本機 MLX 播放會在存在時使用隨附的 openclaw-mlx-tts 輔助程式,或使用 PATH 上的可執行檔。開發期間可設定 OPENCLAW_MLX_TTS_BIN 指向自訂輔助程式二進位檔。
  • 語音指令值範圍(ElevenLabs):stabilitysimilaritystyle 接受 0..1speed 接受 0.5..2latency_tier 接受 0..4

相關