Talk Mode
Talk mode 是一个持续进行的语音对话循环:
- 监听语音
- 将 transcript 发送给 model(主会话,
chat.send) - 等待响应
- 通过 ElevenLabs 播放语音(streaming playback)
行为(macOS)
- 启用 Talk mode 时,会显示常驻悬浮层。
- 在 Listening → Thinking → Speaking 三个阶段之间切换。
- 当检测到短暂停顿(silence window)时,会发送当前 transcript。
- 回复会被写入 WebChat(和手动输入一致)。
- 语音打断(默认开启):如果 assistant 正在说话时用户开始说话,会立即停止播放,并记录打断时间戳,用于下一次 prompt。
回复中的语音指令
assistant 可以在回复开头添加单独一行 JSON,用于控制语音:
{ "voice": "<voice-id>", "once": true }
规则:
- 只识别第一行非空内容。
- 未知 key 会被忽略。
once: true只对当前这一次回复生效。- 如果没有
once,该 voice 会成为 Talk mode 的新默认 voice。 - 这一行 JSON 会在 TTS 播放前被移除。
支持的 keys:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed、rate(WPM)、stability、similarity、style、speakerBoostseed、normalize、lang、output_format、latency_tieronce
配置(~/.openclaw/openclaw.json)
{talk: {voiceId: "elevenlabs_voice_id",modelId: "eleven_v3",outputFormat: "mp3_44100_128",apiKey: "elevenlabs_api_key",silenceTimeoutMs: 1500,interruptOnSpeech: true,},}
默认值:
interruptOnSpeech:truesilenceTimeoutMs:未设置时,Talk 会沿用平台默认的停顿窗口后再发送 transcript(macOS 和 Android 为 700 ms,iOS 为 900 ms)voiceId:会回退到ELEVENLABS_VOICE_ID/SAG_VOICE_ID(如果有 API key,也可能回退到第一个 ElevenLabs voice)modelId:未设置时默认为eleven_v3apiKey:会回退到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_v3,stability只接受0.0、0.5或1.0;其他 models 接受0..1。 latency_tier在设置时会校验为0..4。- Android 支持
pcm_16000、pcm_22050、pcm_24000和pcm_44100输出格式,以支持低延迟的 AudioTrack streaming。
