跳到导航

文本转语音与文本转对话 WebSocket

本指南介绍如何为流式语音选择合适的 WebSocket,以及两种协议的区别。

ElevenLabs 提供两类用于流式合成语音的 WebSocket 产品。每类都包含 单流 版本,以及可通过一个连接复用多个独立流的 多上下文 版本。它们解决的问题不同、接受的消息格式不同,面向的模型也不同。

应该使用哪个 WebSocket?

如果要为 每个连接中的一个音色 流式传输纯文本(音色在 URL 中固定),并且需要使用 Flash 或 Multilingual v2 等 非 v3 模型、可选 SSML、分块计划,或用于智能体式打断处理的 多上下文 版本,请使用 文本转语音(TTS)WebSocket。

如果需要 Eleven v3 的对话表现:富有表现力的传达效果、每个分块的 voice_id、轮次边界(new_turn),以及与服务器端 v3 相同的面向对话缓冲机制,请使用 文本转对话(TTD)WebSocket。

如果既需要上述 Eleven v3 对话表现,又需要在单个连接上运行多个并发或交错流,请使用 TTD 多上下文 WebSocket。例如,对话式智能体需要打断并重新开始对话,而无需每次都新建 socket。

如需 批量或 HTTP 流式 对话(一次调用提交完整请求),请使用创建对话或流式对话,而非 WebSocket。

对比

文本转语音 WebSocket文本转对话 WebSocket
API 参考文档TTS stream-inputTTD WebSocket
URLwss://api.elevenlabs.io/v1/text-to-speech/{voice_id}/stream-inputwss://api.elevenlabs.io/v1/text-to-dialogue/stream-input
音色选择路径中指定一个 voice_id;所有流式文本均使用该音色首条消息按 ID 注册一个或多个 voices;每个 inputs[] 条目都指定一个 voice_id
模型Flash、Multilingual v2 及其他支持的 TTS 模型。此端点不支持 eleven_v3 或 eleven_v4。**model_id 必须以 eleven_v3 或 eleven_v4 开头 **(例如 eleven_v4 或 eleven_v4_turbo)
首条客户端消息使用空格及可选的 voice_settings / generation_config 初始化(参阅实时 TTS 指南)必须包含 voices(如果尚未通过请求头或查询参数发送凭据,也必须包含凭据)
持续发送文本发送 text 字符串(通常以空格结尾);可选 flush、try_trigger_generation 等。发送 inputs:{ text, voice_id, new_turn? } 对象;可选 flush、close_socket、keep_alive
缓冲 / 调度分块长度计划及相关 TTS WebSocket 控件服务器会在文本足够时缓冲(约 40 个字符和 8 个单词)再输出音频,除非使用 flush
单个 socket 上的多说话人对多个并行 TTS 上下文使用多上下文 WebSocket,而非多说话人对话语义eleven_v4 最多可注册 10 个音色;eleven_v4_turbo 仅允许注册一个音色。对于并行对话流,请使用 TTD 多上下文 WebSocket
非活动状态可配置 inactivity_timeout(TTS WebSocket 查询参数)若不发送 keep_alive,客户端消息间隔固定为 20 秒
并发仅活跃生成时间计入套餐的并发限制;处于空闲状态的已打开 socket 不计入每个打开的连接在整个生命周期内都会占用独立池中的一个对话会话;通过该连接生成内容不会占用标准并发
对齐可选 sync_alignment(API 参考文档中的 TTS 字段命名)可选 sync_alignment;JSON 在响应中使用 snake_case 字段(例如 is_final、char_start_times_ms)

更适合使用 TTS WebSocket 的情况

  • 已因延迟或语言覆盖范围集成 Flash 或 Multilingual v2。
  • 希望每个连接使用一个旁白音色,并采用简单的每帧文本协议。
  • 需要通过 多上下文 协调处理插话和并行话语(多上下文指南)。

有关 TTS WebSocket 的完整说明,请参阅实时生成音频。

更适合使用 TTD WebSocket 的情况

  • 面向 Eleven v4 对话(表现力标签、自然对话节奏、多说话人台词)。
  • 流式传输脚本化或由 LLM 生成的对话,可在每行切换说话音色,无需新建连接。
  • 希望采用 WebSocket 风格的增量输入,并在服务器端使用仅限 v4 的对话生成。

如需实际操作说明,请参阅实时文本转对话。协议详情请参阅 API 参考文档。

多上下文 WebSocket

两种产品均提供 多上下文 版本,可通过单个 WebSocket 连接复用多个独立流。每个上下文由客户端选定的 context_id 标识,分别缓冲各自文本,并输出带有该 context_id 标记的音频分块。TTS 上下文共享连接 URL 中的 voice_id,而 TTD 上下文注册各自的音色和设置。当需要支持打断处理的并发或交错生成时,请使用此格式。例如,语音智能体需要取消正在生成的话语并开始新话语,而无需断开连接。

TTS 多上下文 WebSocketTTD 多上下文 WebSocket
API 参考文档TTS multi-stream-inputTTD multi-stream-input
URLwss://api.elevenlabs.io/v1/text-to-speech/{voice_id}/multi-stream-inputwss://api.elevenlabs.io/v1/text-to-dialogue/multi-stream-input
模型Flash、Multilingual v2 及其他支持的 TTS 模型。不支持 eleven_v3 或 eleven_v4。model_id 必须以 eleven_v3 开头 (例如 eleven_v3 或 eleven_v3_conversational)。此端点不支持 eleven_v4。
上下文一个连接上的多个并行 TTS 上下文每个连接最多 5 个同时运行的上下文
每个上下文的音色每个上下文均使用 URL 中固定的一个 voice_id在 context_id 的首条消息中注册:eleven_v3_conversational 为 1 个,eleven_v3 最多 10 个
每条消息的路由每条消息均包含 context_id每条消息均包含 context_id(仅包含 close_socket 的消息除外)
控制消息每个上下文可使用 flush、close_context、close_socket、keep_alive每个上下文可使用 flush、close_context、close_socket、keep_alive
非活动状态每个上下文均可配置 inactivity_timeout除非为该上下文发送 keep_alive,否则每个上下文均固定为 20 秒
身份验证连接级别(请求头、查询参数或首条消息)连接级别(请求头、查询参数或首条消息)——非上下文级别

更适合使用 TTD 多上下文 WebSocket 的情况

  • 既需要 Eleven v3 对话表现(富有表现力的传达效果、每个分块的 voice_id、轮次边界),又需要在一个连接上运行并发或交错流。
  • 正在构建对话式智能体,需打断并重新开始对话,而无需每次都新建 socket。
  • 希望通过一个已验证连接分发多个独立的 v3 对话会话,例如并行场景或说话人。

如需单流 TTD WebSocket,请参阅实时文本转对话。如需 TTS 多上下文 WebSocket,请参阅多上下文 WebSocket 指南。TTD 多上下文端点的协议详情请参阅 API 参考文档。

相关指南