12.7 对话模式

对话模式是一个连续的语音对话循环,使用语音识别和文本转语音(TTS)实现与 AI 助手的自然对话。

概述

对话模式的工作流程包括:

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

行为特点 (macOS)

  • 始终显示覆盖层 - 启用对话模式时会显示悬浮窗口
  • 阶段转换 - 监听 → 思考 → 说话三个阶段的视觉反馈
  • 自动发送 - 检测到短暂停顿(静音窗口)时,当前转录文本会被发送
  • WebChat 同步 - 回复会同时写入 WebChat(就像打字一样)
  • 语音打断 - (默认开启)如果用户在助手说话时开始讲话,播放会停止并记录打断时间戳用于下一个提示

语音指令控制

助手可以在回复前加一行 JSON 来控制语音输出:

{ "voice": "", "once": true }
  • 仅识别第一个非空行
  • 未知的键会被忽略
  • once: true 仅应用于当前回复
  • 不设置 once 时,该语音会成为对话模式的新默认语音
  • JSON 行会在 TTS 播放前被移除

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

{
  talk: {
    voiceId: "elevenlabs_voice_id",      // 语音 ID
    modelId: "eleven_v3",                // 语音模型
    outputFormat: "mp3_44100_128",       // 输出格式
    apiKey: "elevenlabs_api_key",        // API 密钥
    interruptOnSpeech: true,             // 语音打断
  },
}

配置参数说明

  • interruptOnSpeech - 默认 true
  • voiceId - 回退到 ELEVENLABS_VOICE_IDSAG_VOICE_ID
  • modelId - 默认 eleven_v3
  • apiKey - 回退到 ELEVENLABS_API_KEY
  • outputFormat - macOS/iOS 默认 pcm_44100, Android 默认 pcm_24000

macOS 用户界面

菜单栏

  • Talk - 切换对话模式开关

配置标签页

  • Talk Mode 组 - 配置语音 ID 和打断开关

覆盖层状态

  • 监听中 - 云朵图标随麦克风音量脉动
  • 思考中 - 下沉动画效果
  • 说话中 - 辐射环形动画
  • 点击云朵 - 停止说话
  • 点击 X - 退出对话模式

注意事项

权限要求
需要授予语音识别麦克风权限
  • 使用 chat.send 对会话键 main 进行通信
  • TTS 使用 ElevenLabs 流式 API 和 ELEVENLABS_API_KEY
  • macOS/iOS/Android 支持增量播放以降低延迟
  • eleven_v3 模型的 stability 参数验证为 0.0, 0.5 或 1.0; 其他模型接受 0..1 范围
  • 设置 latency_tier 时会验证为 0..4 范围
  • Android 支持 pcm_16000, pcm_22050, pcm_24000pcm_44100 输出格式,用于低延迟 AudioTrack 流式播放
提示
更多详情请参考 官方文档 - Talk Mode