Talk mode: continuous speech conversations with ElevenLabs TTS

Read when…
  • Implementing Talk mode on macOS/iOS/Android
  • Changing voice/TTS/interrupt behavior

对话模式

对话模式是一个连续的语音对话循环:

  1. 监听语音
  2. 将转录发送给模型(主会话,chat.send)
  3. 等待响应
  4. 通过ElevenLabs播放(流式播放)

行为 (macOS)

  • 启用对话模式时,始终显示叠加层
  • 监听 → 思考 → 发言阶段转换。
  • 短暂暂停(静音窗口)时,发送当前转录。
  • 回复会写入WebChat(与输入相同)。
  • 语音中断(默认开启):如果用户在助手发言时开始说话,我们将停止播放并记录中断时间戳以供下次提示使用。

回复中的语音指令

助手可能会在其回复前加上单行JSON来控制语音:

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

规则:

  • 仅第一行非空行有效。
  • 未知键被忽略。
  • once: true仅适用于当前回复。
  • 没有once时,该语音将成为对话模式的新默认值。
  • 在TTS播放前会移除JSON行。

支持的键:

  • voice / voice_id / voiceId
  • model / model_id / modelId
  • speed, rate(WPM),stability, similarity, style, speakerBoost
  • seed, normalize, lang, output_format, latency_tier
  • once

配置 (~/.openclaw/openclaw.json)

{
  talk: {
    voiceId: "elevenlabs_voice_id",
    modelId: "eleven_v3",
    outputFormat: "mp3_44100_128",
    apiKey: "elevenlabs_api_key",
    interruptOnSpeech: true,
  },
}

默认值:

  • interruptOnSpeech: true
  • voiceId: 回退到ELEVENLABS_VOICE_ID / SAG_VOICE_ID(或API密钥可用时的第一个ElevenLabs语音)
  • modelId: 未设置时默认为eleven_v3
  • apiKey: 回退到ELEVENLABS_API_KEY(或网关shell配置文件如果可用)
  • outputFormat: 在macOS/iOS上默认为pcm_44100,在Android上默认为pcm_24000(设置mp3_*以强制MP3流式传输)

macOS界面

  • 菜单栏切换:对话
  • 配置选项卡:对话模式组(语音ID + 中断切换)
  • 叠加层:
    • 监听:云脉冲随麦克风级别变化
    • 思考:下沉动画
    • 发言:辐射环
    • 点击云:停止发言
    • 点击X:退出对话模式

注意事项

  • 需要语音和麦克风权限。
  • 使用chat.send针对会话密钥main
  • TTS使用ElevenLabs流式API,结合ELEVENLABS_API_KEY并在macOS/iOS/Android上进行增量播放以降低延迟。
  • stability对于eleven_v3验证为0.00.5,或1.0;其他模型接受0..1
  • 设置latency_tier时验证为0..4
  • Android支持pcm_16000pcm_22050pcm_24000,和pcm_44100输出格式以实现低延迟AudioTrack流式传输。