对话模式
Talk 模式涵盖以下运行时形态:
- 原生 macOS/iOS/Android Talk:原生语音识别、Gateway 聊天和
talk.speakTTS。macOS/iOS 上的 Apple 语音识别可能使用网络服务。Android 行为取决于已安装的语音服务。节点会通告talk能力,并声明它们支持哪些talk.*命令。 - iOS Talk(实时):针对选择
webrtc传输或省略传输的 OpenAI 实时配置,使用客户端拥有的 WebRTC。该路径包括有帧和无帧的转写/音频事件。显式的gateway-relay、provider-websocket以及非 OpenAI 实时配置仍使用 Gateway 拥有的中继。非实时配置使用原生语音循环。 - Apple Watch 独立 Talk:通过 UDP 的原生 WebRTC/Opus,使用 Gateway 拥有的呼叫控制(
gateway-control-v1)。手表使用 Gateway 配置的实时提供商。它将工具和转写所有权保留在 Gateway 上。不支持的配置会明显失败,且没有中继回退。 - 浏览器 Talk:使用
talk.client.create创建客户端拥有的webrtc/provider-websocket会话,或使用talk.session.create创建 Gateway 拥有的gateway-relay会话。managed-room保留用于 Gateway 交接和对讲机房间。 - Android Talk(实时):当
talk.catalog报告实时组就绪时,Android 使用 Gateway 拥有的中继实时功能。对于受支持的 GPT-Live 模型,Gateway 通过talk.config通告中继能力,因此 Android 会启动talk.session.create,而不是使用原生语音识别和talk.speak。Android 从不打开客户端拥有的 WebRTC 会话。缺少能力提示的旧版 Gateway 以及未列入 GPT-Live 路由会保留原生 Talk,并给出可见说明。显式的stt-tts模式也保持原生。中继能力并不等于身份验证就绪:目录和会话创建仍会验证所选账户。订阅身份验证的 Android 实时音频验证仍待定。 - 仅转写客户端:使用
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }),然后通过talk.session.appendAudio和talk.session.close获取字幕/听写,而无需助手语音响应。一次性上传的语音笔记仍使用媒体理解音频路径。
原生 Talk 是一个持续循环。它侦听语音。它通过活动会话将转写发送给模型。它等待响应。然后通过配置的 Talk 提供商(talk.speak)说出响应。
对于以围栏代码为主的回复,talk.speak 会使用一条简短的语音消息,引导听者查看屏幕。行内代码和普通散文仍作为语音回复的一部分。
Apple Watch 还保留了 Talk to Claw,即独立的单轮伴随流程。该流程使用原生听写、通过 iPhone 中继的文本以及系统语音回读。Talk on Watch 是普通手表设置中包含的实时路径。请参阅独立语音设置。
Talk 文档页面¶
Talk 模式记录在本页和四个子页面中,每个页面对应一种读者任务。
本页保留语音指令和 talk 配置参考。
打开与你的任务匹配的子页面。
| 页面 | 何时阅读 |
|---|---|
| Talk 实时会话与委派 | 你在接入实时 Talk:语音选择、委派、引导和转写。 |
| Talk 会话所有权 | 你需要代理和会话解析、控制权限或关闭语义。 |
| macOS 上的 Talk 与 Gateway 中继 | 你在 macOS 上运行 Talk,或启用流式实时 Gateway 中继。 |
| Talk 客户端界面 | 你需要 macOS、Apple Watch 或 Android 客户端控件和行为。 |
各章节移动位置¶
上一单页版本中的每个章节标题都在此处保留其锚点,因此现有链接(如 /nodes/talk#session-ownership)仍然有效。每个条目指向现在包含相应内容的页面。
- 从聊天中选择 Talk 语音
- 会话所有权
- 行为(macOS)
- 行为(macOS)
- 通过 Gateway 中继的实时 Talk(macOS)
- 通过 Gateway 中继的实时 Talk(macOS)
- 当实时无法启动时
- macOS 界面
- Apple Watch 界面
- Android 界面
回复中的语音指令¶
助手可以在回复前添加一行 JSON 来控制语音:
规则:
- 仅限首个非空行。JSON 行会在 TTS 播放前被移除。
- 未知键会被忽略。
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)¶
尖括号中的值(如 <elevenlabs-api-key>)为占位符。请将它们替换为你自己的值。
{
talk: {
provider: "elevenlabs",
providers: {
elevenlabs: {
voiceId: "<elevenlabs-voice-id>",
modelId: "eleven_v3",
outputFormat: "mp3_44100_128",
apiKey: "<elevenlabs-api-key>",
},
mlx: {
modelId: "mlx-community/Soprano-80M-bf16",
// Fish S2 Pro can also use a local reference voice:
// referenceAudioPath: "/Users/example/Voices/reference.wav",
// referenceText: "Exact transcript of the reference clip.",
},
system: {},
},
speechLocale: "ru-RU",
silenceTimeoutMs: 1500,
interruptOnSpeech: true,
realtime: {
provider: "openai",
providers: {
openai: {
apiKey: "<openai-api-key>",
model: "gpt-realtime-2.1",
speakerVoice: "cedar",
},
},
instructions: "Speak warmly and keep answers brief.",
mode: "realtime",
transport: "webrtc",
brain: "agent-consult",
},
},
}
OpenAI 浏览器 WebRTC 和 Gateway 中继 Talk 支持原生 GPT-Live。在 设置 → Talk 中,为公共 API 选择 gpt-live-1,或为 Codex 路由选择 gpt-live-1-codex。公共 API 需要 Platform 密钥;Codex 路由首选 OpenClaw ChatGPT OAuth 配置文件,并回退到 Platform API 密钥认证。浏览器 Talk 使用客户端 WebRTC,由 Gateway 负责控制。Gateway 中继对 gpt-live-1 使用直接的 Platform 密钥 WebSocket,对 gpt-live-1-codex 使用 Gateway 自有 WebRTC。Discord 在配置了相应 Live 模型时使用相同的 Gateway 桥接。
账户签发、未列出的路由可以在 talk.realtime.model 中设置,但不会通过目录或诊断信息发布。它们从不使用 OAuth,需要 Platform 密钥。GPT-Live 浏览器 Talk 还要求以完整模式注册随附的 openai 插件。限制严格的 plugins.allow 列表会导致会话创建失败,并提示"OpenAI GPT-Live 浏览器会话代理不可用"。
运行时限制:每个 Gateway 最多 8 个并发会话,会话 TTL 为 30 分钟。浏览器会话还使用 60 秒的一次性 offer 令牌。
Codex 路由使用 arbor、breeze、cove、ember、juniper、maple、sol、spruce 和 vale,其中 cove 为默认值。公共 API 默认为 marin,并有自己的语音列表。在 Talk 和 Discord 中选择相同的模型和受支持的语音以使用相同的声音;cove 搭配公共 gpt-live-1 模型时会回退到 marin。未列出的路由使用账户签发的语音合约;当前未列出的 Platform 配置文件接受 marin 和 cedar。被拒绝的会话本身不会指明原因。请检查所选的账户、模型和语音。
GPT-Live 原生支持打断,并能生成连续音频,无需依赖 completed-response 事件。Discord 通过委托给 OpenClaw 的任务保留每个说话者的身份。其语音模型连接按说话者保持分离;共享的房间上下文属于 OpenClaw 代理会话。有关配置以及主持人强制会议参与的限制,请参阅 Discord 中的 GPT-Live。
| 消费者 | GPT-Live 状态 |
|---|---|
| 浏览器 Talk | Codex 路由:OAuth 优先;公共 API 和未列出路由:Platform 密钥客户端 WebRTC |
| Gateway 中继 Talk | Codex 路由:OAuth 优先 WebRTC;公共 API 和未列出路由:直接 Platform 密钥传输 |
| Discord 实时语音 | 与 Talk 相同的 Gateway 桥接:Codex OAuth 优先 WebRTC 或公共 Platform 密钥 WebSocket |
| 语音通话和电话 | Platform 密钥后端 WebSocket |
| iOS 客户端自有 Talk | 已实现;GPT-Live 设备实机验证待进行 |
| Apple Watch 独立 Talk | 已实现 Gateway 控制的 WebRTC;实机 Watch 验证待进行 |
| Android 实时 Talk | Gateway 公告的已发布路由使用中继;Android 实机音频验证待进行 |
这些行描述的是已实现的传输路径,而非账户授权或每台设备上的成功实时通话。iOS 实现了无边框转录和 Gateway offer 交换。Android 遵循 Gateway 中继能力提示,并且仅在该提示缺失时才保留其遗留的 GPT-Live 模型门控。有关模型能力限制,请参阅 Discord 语音策略 和 语音通话工具。
Gateway 自有的 WebRTC 路由确保 OAuth 和 Platform 凭据不会到达中继客户端。后端 WebSocket 路径将 Platform 密钥保留在 Gateway 上。OpenClaw 在电话 G.711 u-law 音频与 GPT-Live 的 24 kHz PCM 格式之间进行转换。
对于 GA gpt-realtime-2.1、gpt-realtime-2.1-mini 和 gpt-realtime-2 浏览器会话,Platform 凭据仍按以下顺序优先:配置的 realtime API 密钥、openai API 密钥配置文件,然后才是 OPENAI_API_KEY。若未配置任何项,浏览器 Talk 会回退到 OpenClaw ChatGPT OAuth 配置文件,并通过 Gateway 的一次性 offer 代理交换 SDP,因此 OAuth 令牌永远不会到达浏览器。已配置但无法解析的 Platform 凭据将失败关闭,而不是静默回退到 OAuth。
iOS 客户端自有 WebRTC 和 GA Gateway 中继(包括 Android GA realtime)仍仅限 Platform 密钥。GA 浏览器 Talk 保留现有的客户端自有数据通道和 talk.client.toolCall 循环。在 OAuth 下,只有凭据所有者和 SDP 交换路径发生变化。Codex GPT-Live 路由在浏览器和 Gateway 自有 WebRTC(包括 Android Talk 和 Discord)中仍保持 OAuth 优先、Platform 回退。公共 GPT-Live、直接后端套接字和未列出的 GPT-Live 路由仍仅限 Platform 密钥。
| 键 | 默认值 | 说明 |
|---|---|---|
agentId |
已配置的默认代理 | 拥有在未提供显式代理作用域会话密钥时创建的 Talk 会话。 |
provider |
- | 当前 Talk TTS 提供商。对于 macOS 本地播放路径,使用 elevenlabs、mlx 或 system。 |
providers.<id>.voiceId |
- | ElevenLabs 会回退到 ELEVENLABS_VOICE_ID / SAG_VOICE_ID,或在存在 API 密钥时使用第一个可用语音。 |
speechLocale |
设备默认 | 用于 Android、iOS 和 macOS 原生语音识别的 BCP 47 区域设置,以及 iOS 系统语音回退。Apple Speech 可能使用网络服务;Android 还会将语言组件转发到实时输入转录。 |
providers.elevenlabs.modelId |
eleven_multilingual_v2 |
|
providers.mlx.modelId |
mlx-community/Soprano-80M-bf16 |
|
providers.mlx.referenceAudioPath |
- | 对于支持语音克隆的 MLX 模型,可选的客户端本地参考录音。该路径在原生 macOS 应用主机上解析。 |
providers.mlx.referenceText |
- | referenceAudioPath 的精确转录文本;Fish S2 Pro 使用这两个值进行本地语音克隆。 |
providers.elevenlabs.apiKey |
- | 回退到 ELEVENLABS_API_KEY(如果可用,则回退到网关 shell 配置文件)。 |
silenceTimeoutMs |
700 ms macOS/Android、900 ms iOS |
Talk 发送转录文本前的暂停窗口。 |
interruptOnSpeech |
true |
|
providers.<id>.outputFormat |
pcm_44100 macOS/iOS、pcm_24000 Android |
设置 mp3_* 以强制 MP3 流式传输。 |
consultThinkingLevel |
未设置 | 实时 openclaw_agent_consult 调用背后的代理运行的思考级别覆盖。 |
consultFastMode |
未设置 | 实时 openclaw_agent_consult 调用的快速模式覆盖。 |
realtime.provider |
- | 用于 WebRTC 的 openai、用于提供商 WebSocket 的 google,或通过 Gateway 中继的仅桥接提供商。 |
realtime.providers.<id> |
- | 由提供商拥有的实时配置。浏览器仅接收临时/受限会话凭据,绝不会接收标准 API 密钥。 |
| 键 | 默认值 | 备注 |
|---|---|---|
realtime.providers.openai.speakerVoice |
alloy(GA);GPT-Live 为路由特定值 |
内置 OpenAI 实时语音 ID(旧的 voice 键仍然有效,但已弃用)。GA 语音:alloy、ash、ballad、cedar、coral、echo、marin、sage、shimmer、verse。GPT-Live 使用上文记录的路由特定语音系列。 |
realtime.model |
提供商默认值 | 实时语音模型。当两者都设置时,覆盖 realtime.providers.<id>.model —— 与 talk.client.create 在会话时应用的优先级相同。 |
realtime.transport |
- | webrtc:在 iOS、浏览器以及带 Gateway 控制的 Watch 上使用 OpenAI WebRTC。provider-websocket:由浏览器拥有,在 iOS 上保持使用 Gateway 中继。gateway-relay:将提供商音频保留在 Gateway 上;Android 仅在使用此传输时使用实时功能。 |
realtime.brain |
- | agent-consult 将实时工具调用通过 Gateway 策略路由;direct-tools 为旧版直接工具兼容性;none 用于转录/外部编排。 |
realtime.consultRouting |
- | provider-direct 在提供商跳过 openclaw_agent_consult 时保留其直接回复;force-agent-consult 改为将最终用户转录通过 OpenClaw 路由。 |
realtime.instructions |
- | 向 OpenClaw 内置实时提示追加面向提供商的系统指令。 |
talk.catalog 公开规范提供商 ID 和注册表别名。它公开每个提供商的有效模式/传输/brain 策略/实时音频格式/能力标志。它公开运行时选择的就绪结果。第一方 Talk 客户端应读取该目录,而不是在本地维护提供商别名。对于省略组就绪状态的旧版 Gateway,应视为未验证,而不是明确未配置。流式转录提供商通过 talk.catalog.transcription 发现。当前 Gateway 中继使用 Voice Call 流式提供商配置,直到专用的 Talk 转录配置界面发布。
备注¶
- 原生语音识别需要平台的语音和麦克风访问权限。独立的 Watch 实时功能需要麦克风访问权限,而不是本地语音识别。
- 原生 Talk 使用活动的 Gateway 会话,仅在响应事件不可用时回退到历史轮询。
- Gateway 通过
talk.speak使用活动的 Talk 提供商解析 Talk 播放。仅当该 RPC 不可用时,Android 才回退到本地系统 TTS。 - macOS 本地 MLX 播放若存在捆绑的
openclaw-mlx-tts辅助程序则使用它,否则使用PATH上的可执行文件。开发期间,设置OPENCLAW_MLX_TTS_BIN以指向自定义辅助程序二进制文件。该辅助程序流式传输 PCM,保持一个选定模型常驻,并通过providers.mlx.referenceAudioPath加上referenceText支持 Fish S2 Pro 参考音频。 - 语音指令值范围(ElevenLabs):
stability、similarity和style键接受0..1。speed键接受0.5..2。latency_tier键接受0..4。
相关¶
- 语音唤醒
- 音频和语音笔记
- 媒体理解
- Google Meet 插件
- 媒体概览 — 媒体工具如何协同工作
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw