Talk Mode

Talk mode 是一个持续进行的语音对话循环:

  1. 监听语音
  2. 将 transcript 发送给 model(主会话,chat.send
  3. 等待响应
  4. 通过 ElevenLabs 播放语音(streaming playback)

行为(macOS)

  • 启用 Talk mode 时,会显示常驻悬浮层
  • Listening → Thinking → Speaking 三个阶段之间切换。
  • 当检测到短暂停顿(silence window)时,会发送当前 transcript。
  • 回复会被写入 WebChat(和手动输入一致)。
  • 语音打断(默认开启):如果 assistant 正在说话时用户开始说话,会立即停止播放,并记录打断时间戳,用于下一次 prompt。

回复中的语音指令

assistant 可以在回复开头添加单独一行 JSON,用于控制语音:

  1. { "voice": "<voice-id>", "once": true }

规则:

  • 只识别第一行非空内容。
  • 未知 key 会被忽略。
  • once: true 只对当前这一次回复生效。
  • 如果没有 once,该 voice 会成为 Talk mode 的新默认 voice。
  • 这一行 JSON 会在 TTS 播放前被移除。

支持的 keys:

  • voice / voice_id / voiceId
  • model / model_id / modelId
  • speedrate(WPM)、stabilitysimilaritystylespeakerBoost
  • seednormalizelangoutput_formatlatency_tier
  • once

配置(~/.openclaw/openclaw.json

  1. {
  2. talk: {
  3. voiceId: "elevenlabs_voice_id",
  4. modelId: "eleven_v3",
  5. outputFormat: "mp3_44100_128",
  6. apiKey: "elevenlabs_api_key",
  7. silenceTimeoutMs: 1500,
  8. interruptOnSpeech: true,
  9. },
  10. }

默认值:

  • interruptOnSpeech:true
  • silenceTimeoutMs:未设置时,Talk 会沿用平台默认的停顿窗口后再发送 transcript(macOS 和 Android 为 700 ms,iOS 为 900 ms
  • voiceId:会回退到 ELEVENLABS_VOICE_ID / SAG_VOICE_ID(如果有 API key,也可能回退到第一个 ElevenLabs voice)
  • modelId:未设置时默认为 eleven_v3
  • apiKey:会回退到 ELEVENLABS_API_KEY(或在可用时使用 gateway shell profile)
  • outputFormat:macOS/iOS 默认是 pcm_44100,Android 默认是 pcm_24000(设置 mp3_* 可强制使用 MP3 streaming)

macOS UI

  • 菜单栏开关:Talk
  • 配置页签:Talk Mode 分组(voice id + interrupt toggle)
  • 悬浮层:

    • Listening:云朵随 mic level 脉动
    • Thinking:下沉动画
    • Speaking:向外扩散的波纹
    • 点击云朵:停止说话
    • 点击 X:退出 Talk mode

说明

  • 需要 Speech 和 Microphone 权限。
  • 使用 chat.send,session key 为 main
  • TTS 使用 ElevenLabs streaming API,并通过 ELEVENLABS_API_KEY 在 macOS/iOS/Android 上进行增量播放,以降低延迟。
  • 对于 eleven_v3stability 只接受 0.00.51.0;其他 models 接受 0..1
  • latency_tier 在设置时会校验为 0..4
  • Android 支持 pcm_16000pcm_22050pcm_24000pcm_44100 输出格式,以支持低延迟的 AudioTrack streaming。