--- summary: "从聊天、实时委派、引导、文字记录和浏览器谈话行为中进行语音选择" read_when: - "连接实时 Talk 客户端或网关控制的呼叫" - "更改语音选择、转向或转录处理" - "调试浏览器 Talk 麦克风或转录错误" title: "谈论实时会话和授权" sidebarTitle: "实时会话" --- ## 在浏览器中分割语音 借助 `talk.realtime.mode: "stt-tts"`,浏览器 Talk 使用单独的转录、代理和语音步骤,而不是实时语音转语音提供程序。每个话语都会经过当前的聊天会话,因此其配置的模型和工具权限适用。设置 `talk.provider` 和 `talk.providers.` 进行通话输出,或保留提供程序未设置以使用全局 `tts` 配置。 对于本地转录,请按照 [ 音频和语音注释 ](/nodes/audio) 中所述在 `tools.media.models` 中配置音频条目。浏览器使用现有的网关转录会话;网关将完整的录音传递给文件转录所有者。它的提供者选择、输入限制、超时和后备策略也适用于此。显式流媒体提供商选择和匹配的 `agents.defaults.voiceModel` 优先。文件转录在话语结束后生成最终转录。仅当已配置的提供程序或 CLI 命令可用时,目录才会将文件转录标记为就绪。 捕获代理响应和语音播放期间的停顿,然后恢复下一个话语。停止会取消呼叫本身的聊天运行和回放。对话失败(包括两分钟的应答超时)会结束捕获和回放,但会留下已接受的聊天运行以在对话中完成。超时消息说明答案将出现在聊天中。离开聊天、断开连接或从 Talk 切换也会分离,而不会取消已接受的工作。 Split Talk 不提供实时语音切换或摄像头输入。保持模式未设置可保留实时通话。 ## 从聊天中选择 Talk 语音 在活动浏览器、iOS 或 Android 实时通话通话期间,请助理列出可用语音或切换到一种语音。浏览器编辑器仅保留呼叫控件;在**设置→Talk**中选择默认语音。 `talk_voice` 工具列出当前对话中呼叫的当前提供商、模型、语音和支持的语音 ID。设置语音会重新连接该呼叫,同时保留其聊天内容和字幕。替代者等待保存最终的语音并接收有限的对话历史记录,包括旧连接关闭时最终确定的语音。在此切换期间,已接受的代理工作将继续运行。替换呼叫就绪后,助理才会报告成功;不支持的更改或连接失败会返回错误。 **设置 → Talk** 设置将来通话的默认语音。在 Discord 实时语音通道中,要求座席使用同一工具列出或更改语音。此更改适用于该连接的房间,包括后续扬声器,并保持其保存的 Discord 语音配置不变。当提供商连接被替换时,Discord 连接和代理对话保持活动状态。 iOS 支持 WebRTC 和网关中继呼叫中的切换。 Android 使用其支持的实时模型在网关中继呼叫中支持它。本机语音和 TTS 后备呼叫保留其现有的语音设置。切换使用当前网关连接和会话;结束呼叫或更改网关会取消待处理的切换。 当连接的网关通告语音选择支持时,移动应用程序启用切换。呼叫仍可在较旧的网关上启动,但在网关更新之前切换仍然不可用。 对于 Talk TTS 播放,在设置 `talk.provider` 和匹配的 `talk.providers.` 配置后,使用 `/voice status` 检查活动提供者和语音,使用 `/voice list [limit]` 列出其可用语音,并使用 `/voice set ` 保存提供者范围内的选择。 Discord 本机公开与 `/talkvoice` 相同的命令。 状态和列表是只读的。设置语音需要消息通道所有者或具有 `operator.admin` 的网关客户端。配置、提供商查找、未知语音和权限失败都会在聊天中明显返回。 `/voice status` 中的屏蔽 API-key 值仅描述配置;它不验证凭证的可用性。 客户端持有的实时 Talk 通常会通过 `talk.client.toolCall` 转发提供方工具调用,而不是直接调用 `chat.send`。GPT-Live WebRTC 会话会通过 Gateway 所有的 sideband 进行委托,并且 Gateway 会将每个委托绑定到拥有该委托的浏览器或 Gateway 中继 Talk 会话。后端 WebSocket 桥接使用正常的中继咨询路径。实时咨询处于活动状态时,客户端可以调用 `talk.client.steer` 或 `talk.session.steer`,将语音输入分类为 `status`、`steer`、`cancel` 或 `followup`;这也包括 GPT-Live 委托。接受的引导请求会排队进入活动的嵌入式运行;被拒绝的引导请求会返回诸如 `no_active_run`、`not_streaming` 或 `compacting` 的原因。较新的 GPT-Live 语音任务也会取代正在运行的委托。 瘦音频客户端可以在 `talk.client.create.capabilities` 中请求 `gateway-control-v1`。 OpenAI GA Realtime 需要此模式的平台 API 密钥。发布的GPT-Live路由保留其现有的ChatGPT、OAuth或平台认证;未列出的路由需要平台认证。请求网关控制不会切换所选模型。 成功返回`clientControl: { owner: "gateway" }`,60秒一次性使用`clientSecret`,以及相对报价URL `/plugins/openai/realtime/calls`。客户端发布纯音频 SDP 报价,并且不打开提供商数据通道。网关连接提供商的服务器边带并拥有工具或本机代理委派、转录、引导、取消和呼叫清理,同时媒体直接在客户端和 OpenAI 之间继续。协商会话对每个客户端连接共享两个会话限制,包括待处理的报价。不受支持的组合(包括仅包含 GA 和 OAuth)会明显失败,而不是退回到客户拥有的控制权。现有的浏览器客户端忽略了此功能并保留其数据通道和客户端记录报告。 在网关控制的本机调用和本机网关中继中,提供者的委派启动每个主机操作。最终演讲记录保存到历史记录中;它们既不会触发行动,也不会重复代表团的行动。状态使当前任务保持运行,取消则停止它,并重定向或跟踪调用活动工作的目标。当呼叫没有活动任务时,即使同一连接和代理会话上的另一个呼叫正在进行工作,状态和取消也会返回口头无活动运行响应。诸如“检查天气”之类的普通请求仍然会在空闲时启动任务。真正的新任务保留了本机委托替换行为。 这些调用在创建时禁用提供者生成的委托确认。 OpenClaw在发起真实任务时发送一张中立回执;状态和取消请求会等待主机结果,而不等待最终的语音转录。完全控制队列会产生口头拒绝;待处理的控件完成后重试。任务收据并不能确认模型或工具已经启动,提交口头结果也不能证明有声交付。 关闭本地传输会阻碍新的授权和延迟的提供商交付;已接受的代理工作保留其自己的取消生命周期。口语运行取消与结束音频连接是分开的。网关控制的本机会话确认取消,而无需说出已取消任务的部分答案、空结果回退或失败任务重试提示。超时仍然是失败,而不是被默默地视为取消。 最终的实时用户和助理话语始终实时附加到活动代理会话中,因此稍后的聊天和语音轮流共享一份历史记录。客户拥有的运输报告其最终成绩单和稳定的条目 ID;网关中继和网关控制的 WebRTC 会话在服务器端附加相同的事件。提供商会话还接收 Discord 语音使用的有界实时配置文件上下文。 在接受的咨询开始时完成的语音在历史记录中仍然可见,并且不会阻止代理采用该咨询的记录输入。已完成的代理答案和新承认的任务仍会关闭旧的输入;语音记录不会重新打开它。 网关控制的本机 WebRTC 呼叫接收共享会话历史记录作为其指令中引用的历史背景,而不是作为新呼叫自己的用户或助理消息。该背景可以包括之前的通话和支持代理的回答;它不会建立当前呼叫的实时任务状态。它保留了 16 个条目的最新历史记录,每个条目 800 个字符,以及 8,000 UTF-8 字节(包括标签和引用)。这既不会更改保存的记录,也不会更改聊天显示。没有协商主机输入控制和直接 WebSocket 对话种子的本机调用将保留其现有表示。 生成的座席咨询提示是内部输入,而不是语音用户轮流。新的咨询记录在聊天中隐藏,并从以后的模型上下文中排除,而活动咨询仍然收到完整的问题、上下文和响应方式。原始档案和 [ 会话导出 ](/tools/slash-commands) 保持无损。没有排除标志的现有咨询记录不会被重写,并且仍然符合模型上下文的条件。 聊天支持的对话会存储口头答案,而无需在可见历史记录中保存成功咨询答案的第二个副本;内部答案保留在原始转录本和模型上下文中。工具活动、进度、错误和中断的回复保留其现有的可见性。 提供商拥有的直接咨询会在聊天中显示他们自己的最终答案。接受的作品可能会比音频连接关闭或更换后的寿命更长,因此不能保证口头更换。如果语音也到达,则两条记录都可能可见; OpenClaw 保留答案,而不是猜测语音文本会替换它。 OpenAI GA browser Talk 即使在用户转录或项目公告未按顺序到达之前助理回复完成时,浏览器 Talk 也会保持提供商对话顺序。文本立即在通话视图中流动;较晚的前任​​元数据将其放置在正确回复旁边。停止通话会耗尽最终的语音、跳过未完成的转录,并记录浏览器控制台警告,以发现丢失的转录或未解析的对话链接。 Google Live 在通话期间保存完整的话语,包括省略显式转录完成标志的 Gemini 3.1 和 3.8 转录。这也适用于 Gemini 3.8 扩展思维。旧模型中的部分文本在提供程序完成边界之前保持临时状态。 对于相同的经过身份验证的调用者、代理、会话、目标、操作和最终参数,Talk 使用与文本相同的有效工具权限。未经批准而已允许的操作不会获得额外的语音确认提示。需要普通批准的操作仍然需要通过主机验证的批准流程进行批准;说“是”或向模型提供确认文本并不授予许可。被拒绝的行动仍然被拒绝。 在释放持久性资源之前,网关关闭会加入已接受的语音记录、最终工具结果和提供商关闭摘要。接受的咨询将保留其持久性所有权,直到所有排队和推迟的工作完成,包括禁用诊断时。排队摘要在等待交付时段时保留其原始实体存储。收件人查找荣誉 `session.store`;语音元数据和传递标记保留在各自的每个代理存储中。丢失的对话将被报告为失败的摘要尝试,而不是默默地删除其摘要。提供程序清理失败不会绕过持久性消耗。存储格式和重试限制不变。已确认的交付仅重试其完成标记;部分或不确定的交货不会被重新发送。未解决的结果将在交付所有者的生命周期内保留其现有有限重试能力的围栏。 直接提供商委托和聊天支持的 Talk 保留其真实语音身份。操作员和源撤销、取消、沙箱限制、节点路由和最终可执行检查仍然适用。先前的外部传递历史记录可以提供回复目标,而不是呼叫者的授权通道。音频和转录功能仍然特定于传输。关闭呼叫仍然可以发送紧凑的 **语音呼叫更改** 摘要,以将工具变异到其最后的非 WebChat 交付目标。 仅转录 Talk 发出与实时和 STT/TTS 会话相同的 Talk 事件包络,但使用 `mode: "transcription"` 和 `brain: "none"`。所有 Talk 会话都在 `talk.event` 频道上广播事件;客户订阅它以获取 partial/final 转录本更新 (`transcript.delta`/`transcript.done`) 和其他会话遥测。 转录提供商可以在 `talk.catalog.transcription.providers[].models` 中宣传他们的模型选择。将 `model` 传递到 `talk.session.create` 以覆盖为该会话配置的转录模型。省略它会保留提供程序配置,然后是匹配的 `agents.defaults.voiceModel`,然后是提供程序自己的默认值。 浏览器视频 Talk 可用于 OpenAI Realtime WebRTC 和 Google Live 提供方 WebSocket 会话。OpenAI 在 `describe_view` 请求视觉上下文时只接收单张受限的 JPEG;它不会接收连续的摄像头轨道。Google Live 会以每秒最多一帧的速率直接从浏览器接收受限的 JPEG 帧,而 `describe_view` 会报告摄像头流状态。在这两种情况下,摄像头帧都会绕过 Gateway,停止 Talk 会释放摄像头和麦克风轨道。 Browser Talk 显示准备会话、等待麦克风访问和连接时的启动进度。当浏览器的捕获请求待处理时,谈话和听写会显示麦克风引导:将选项卡置于前台,并在出现提示时允许访问。浏览器可以将未答复的权限请求挂起。在通话中,**停止语音输入**取消启动并释放取消后授予的任何麦克风流。 Browser Talk 在创建提供程序会话之前获取麦克风,因此授予权限所花费的时间不会消耗短暂的连接令牌。如果会话创建失败,Talk 会在报告错误之前释放麦克风。 如果 OpenAI 无法转录话语,浏览器 Talk 会显示提供者的错误,而不会结束通话或创建转录。你可以再说话了;音频响应​​独立于输入转录而继续。 浏览器网关中继 Talk 可以容忍缓慢的音频确认,同时保持最多三秒的麦克风音频传输。多余的帧将被丢弃,并发出通知,要求您重复最后一部分。成功的确认会更新中继的活动窗口;如果待处理的音频在 30 秒内未收到确认,Talk 将结束并显示连接错误并指导重新启动它。显式网关错误或连接丢失仍会立即结束呼叫。 如果麦克风断开连接或其权限被撤销,浏览器 Talk 会结束通话并显示错误。选择可用的 **麦克风输入**,如果需要恢复权限,然后再次开始 Talk。意外的 GPT-Live 连接丢失也会导致呼叫结束并出现错误;不支持自动重连。