- 原生 macOS/iOS/Android Talk:原生语音识别、Gateway 网关聊天和
talk.speakTTS。macOS/iOS 上的 Apple Speech 识别可能使用网络服务;Android 的行为取决于已安装的语音服务。节点会公布talk能力,并声明其支持哪些talk.*命令。 - iOS Talk(实时):对于选择
webrtc传输方式或省略传输方式的 OpenAI 实时配置,使用客户端所有的 WebRTC。显式的gateway-relay、provider-websocket和非 OpenAI 实时配置仍使用 Gateway 网关所有的中继;非实时配置使用原生语音循环。 - 浏览器 Talk:客户端所有的
webrtc/provider-websocket会话使用talk.client.create,Gateway 网关所有的gateway-relay会话使用talk.session.create。managed-room保留用于 Gateway 网关移交和对讲机房间。 - Android Talk(实时):通过
talk.realtime.mode: "realtime"和talk.realtime.transport: "gateway-relay"选择启用。否则,Android 继续使用原生语音识别、Gateway 网关聊天和talk.speak。 - 仅转录客户端:依次使用
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" })、talk.session.appendAudio、talk.session.cancelTurn和talk.session.close,在没有助手语音回复的情况下提供字幕/听写。一次性上传的语音留言仍使用媒体理解音频路径。
talk.speak)朗读响应。
客户端所有的实时 Talk 通过 talk.client.toolCall 转发提供商工具调用,而不是直接调用 chat.send。实时咨询处于活动状态时,客户端可以调用 talk.client.steer 或 talk.session.steer,将语音输入分类为 status、steer、cancel 或 followup。已接受的 Steering 会加入活动嵌入式运行的队列;被拒绝的 Steering 会返回原因,例如 no_active_run、not_streaming 或 compacting。
最终确定的实时用户和助手话语始终会实时追加到活动智能体会话中,因此后续的聊天和语音轮次共享同一份历史记录。客户端所有的传输方式使用稳定的条目 ID 报告其最终转录文本;Gateway 网关中继会话则在服务器端追加相同事件。提供商会话还会接收 Discord 语音所使用的有界实时配置文件上下文。
源自语音的咨询运行在执行发送消息、控制节点、浏览器/计算机操作、服务变更、破坏性 shell 命令或发布等高影响操作前,需要新的、明确无误的口头确认。该确认仅适用于被阻止工具的确切参数,并且仅使用一次;其他不相关的并发运行不受影响。通话结束时,OpenClaw 可以将变更型工具的精简版语音通话变更摘要发送到该会话最后一个非 WebChat 投递目标。
仅转录 Talk 会发出与实时会话和 STT/TTS 会话相同的 Talk 事件信封,但使用 mode: "transcription" 和 brain: "none"。所有 Talk 会话都会在 talk.event 渠道上广播事件;客户端订阅该渠道,以接收部分/最终转录文本更新(transcript.delta/transcript.done)及其他会话遥测数据。
浏览器视频 Talk 可用于 OpenAI Realtime WebRTC 和 Google Live
提供商 WebSocket 会话。当 describe_view 请求视觉上下文时,
OpenAI 会收到一张大小受限的 JPEG;它不会收到连续的摄像头轨道。
Google Live 直接从浏览器接收大小受限的 JPEG 帧,频率最高为每秒一帧,
同时 describe_view 会报告摄像头流状态。在这两种情况下,
摄像头帧均绕过 Gateway 网关,停止 Talk 会释放摄像头和麦克风轨道。
行为(macOS)
- 启用 Talk 模式时始终显示浮层。
- 正在聆听 → 正在思考 → 正在朗读阶段转换。
- 短暂停顿(静音窗口)后,会发送当前转录文本。
- 回复会写入 WebChat(与键入文本相同)。
- 语音打断(默认启用):如果用户在助手朗读时说话,播放会停止,并记录打断时间戳以供下一个提示使用。
回复中的语音指令
助手可以在回复开头添加一行 JSON 来控制语音:- 仅限第一个非空行;TTS 播放前会移除该 JSON 行。
- 未知键会被忽略。
once: true仅应用于当前回复;如果没有该键,此语音会成为新的 Talk 模式默认值。
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.catalog 会公开规范提供商 ID 和注册表别名、每个提供商的有效模式/传输方式/思维策略/实时音频格式/能力标志,以及运行时选择的就绪状态结果。第一方 Talk 客户端应读取该目录,而不是在本地维护提供商别名;如果旧版 Gateway 网关未提供分组就绪状态,应将其视为未经验证,而不是明确判定为未配置。流式转录提供商通过 talk.catalog.transcription 发现;在专用 Talk 转录配置界面发布之前,当前 Gateway 网关中继使用语音通话流式提供商配置。
macOS UI
- 菜单栏开关:Talk
- 配置标签页:Talk Mode 组(语音 ID + 打断开关)
- 浮层:圆球会呈现通用 Talk 波形(与 iOS、watchOS 和 Android 共用)。聆听时跟随实时麦克风电平,发声时跟随实际 TTS 播放包络,思考时轻柔呼吸。单击圆球可暂停/继续,双击可停止发声,单击 X 可退出 Talk 模式。
Android UI
- Android 的主导航为 Home、Chat 和 Settings。语音输入 位于 Chat 编辑器中,而不是单独的 Voice 标签页中。
- 点按编辑器中的麦克风可使用设备端听写。长按可录制 语音消息附件。从 Talk 波形启动连续 Talk。
- 听写、语音消息录制和 Talk 是互斥的麦克风 路径;启动其中一项会停止或阻止其他路径。
- 实时 Talk 优先使用已连接的 Bluetooth Classic 或 BLE 耳机 麦克风;如果连接断开,应用会请求另一个耳机输入或 回退到默认麦克风,并在采集停止后 恢复默认偏好设置。
- 当应用离开前台或 用户离开 Chat 时,听写和语音消息录制会停止。
- Talk 模式会持续运行,直到关闭开关或节点断开连接;运行期间使用 Android 的麦克风前台服务类型。
- Android 支持
pcm_16000、pcm_22050、pcm_24000和pcm_44100输出格式,以实现低延迟AudioTrack流式传输。
注意事项
- 需要语音和麦克风权限。
- 原生 Talk 使用当前 Gateway 网关会话,仅当响应事件不可用时才回退到历史记录轮询。
- Gateway 网关使用当前 Talk 提供商,通过
talk.speak解析 Talk 播放。仅当该 RPC 不可用时,Android 才会回退到本地系统 TTS。 - macOS 本地 MLX 播放会使用内置的
openclaw-mlx-tts辅助程序(如果存在),或使用PATH上的可执行文件。开发期间可设置OPENCLAW_MLX_TTS_BIN,使其指向自定义辅助程序二进制文件。 - 语音指令值范围(ElevenLabs):
stability、similarity和style接受0..1;speed接受0.5..2;latency_tier接受0..4。