macOS 和 Gateway 中继
行为 (macOS)¶
- Talk 模式启用时,始终显示覆盖层。
- 聆听 → 思考 → 说话 阶段转换。
- 阶段通知是尽力而为的:更新失败不会启动本地 Gateway 或重启其隧道。启动 Talk 保留正常的连接恢复。
- 在短暂停顿(静音窗口)时,当前转录文本会被发送。
- 回复会写入 WebChat(与打字相同)。
- 语音打断(默认开启):如果用户在助理说话时说话,播放停止,并记录打断时间戳用于下一个 Prompt。
通过 Gateway 中继的实时 Talk(macOS)¶
macOS 默认使用上述原生路径:Apple Speech 识别、Gateway 聊天和 talk.speak 播放。仅当 talk.realtime 同时选择以下三项时,才会切换到流式实时会话:
| 键 | 必需值 |
|---|---|
mode |
realtime |
transport |
gateway-relay |
brain |
agent-consult |
任何其他组合——包括部分设置的组合——都会继续使用原生路径。
{
talk: {
realtime: {
provider: "openai",
providers: {
openai: {
model: "gpt-realtime-2.1",
speakerVoice: "cedar",
},
},
mode: "realtime",
transport: "gateway-relay",
brain: "agent-consult",
},
},
}
Mac 还必须在本地通过 设置 > 语音与 Talk > 使用实时 Gateway 中继 选择启用。此偏好默认关闭,并保留在该 Mac 上;单独的 Gateway 配置永远不会激活流式路径。对于浏览器或 iOS 客户端自有(client-owned)的会话,请保留 transport: "webrtc";macOS 仅在配置明确选择 gateway-relay 时才使用中继。
Gateway 还必须在 talk.catalog 中为所选提供商通告 gateway-relay 和 agent-consult。实时模式需要 macOS 26 或更高版本,与 Voice Wake 一致;在较旧版本上,Talk 和 Voice Wake 控件不可用。
在 Apple 客户端上,中继播放会保持活动状态,直到设备播完排队的音频,而不是等到预估时长结束。播放确认会跟随该完成状态。基于回合的提供商保留设备路由麦克风回声抑制和本地语音打断。类似 GPT Live 的连续提供商在播放期间保持麦克风输入打开,并自己处理语音打断。Apple 客户端使用所选提供商的 talk.catalog 能力;如果无法访问目录,则将语音打断交给提供商处理。
显式停止 GPT Live 输出会结束语音会话。Apple 客户端会保留该停止状态,而不是自动重新连接。在 macOS 上,暂停会让 Talk 保持暂停;如果提供商已关闭暂停的会话,则恢复时会启动全新会话。普通连接失败仍使用下面的恢复路径。请使用耳机,避免扬声器音频反馈到打开的麦克风中。
当实时模式无法启动时¶
Talk 绝不会静默闲置。如果中继启动失败——没有 Gateway 路由、凭据被拒绝或模型不受支持——失败会被记录,覆盖层会显示原因,并且 Talk 会在该会话中回退到原生语音路径。
一旦会话开始运行,断开的中继会按有界重试计划重新连接(大约 0.5 秒,然后 2 秒)。如果这些尝试用尽,覆盖层会报告 Realtime disconnected repeatedly — using native speech,并且下一次启动将绕过实时模式。会话中途丢失麦克风会关闭中继并采用相同的路径。
中继输出取消是回合作用域的。客户端从 talk.event 音频封套中复制当前的 turnId。匹配的 id 返回 applied,过期的 id 返回 stale,没有活动回合的会话返回 idle。省略 turnId 的旧客户端仍然会取消当前回合:
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw