Speech Engine 快速入门
使用 ElevenLabs SDK 为聊天智能体添加语音功能。
本指南将带你使用 Speech Engine 构建语音智能体。你需要设置一个服务器,将 LLM 连接到 ElevenLabs,然后接入浏览器客户端,让用户能与你的智能体进行语音对话。
使用 ElevenLabs Speech Engine skill 为聊天智能体添加语音功能:
Speech Engine 的工作原理
Speech Engine 将 LLM 连接到 ElevenLabs,让用户能与智能体交谈并听到其回复。ElevenLabs 负责语音转文本和文本转语音;服务器提供 LLM 逻辑。
每个 WebSocket 连接代表一次对话。用户说话时,ElevenLabs 会转写音频并将转写文本发送到服务器。服务器将其传给 LLM,再将回复流式传回。ElevenLabs 将文本转换为语音,并在浏览器中播放。SDK 会处理连接管理、轮次控制和打断检测。
前提条件
本教程使用 OpenAI 的 API 作为 LLM。需要在 OPENAI_API_KEY 环境变量中设置 OpenAI API 密钥。
服务器设置
公开服务器
Speech Engine 需要可从公网访问的 URL。使用 ngrok 公开本地服务器。服务器尚未构建完成,但 ngrok 必须先运行,以便在下一步中使用该 URL。
复制转发 URL(例如 https://abc123.ngrok.io)。
创建 Speech Engine 实例
使用 SDK 创建 Speech Engine 实例,并将附加了 /ws 路径的 ngrok URL 作为 WebSocket URL 传入。
运行此脚本,并复制 Speech Engine ID(例如 seng_8k3m9xr4hjnfg983brhmhkd98n6),用于下一步。
创建服务器
创建名为 server.py 或 server.mts 的文件,并填入以下内容。这会设置服务器,在 /ws 路径附加 Speech Engine,并使用 OpenAI 生成回复。
onTranscript / on_transcript 回调会接收完整对话历史和当前会话。TypeScript SDK 还提供 AbortSignal,当用户在回复过程中打断时会触发。将 signal 传给 OpenAI 调用,即可在打断时自动取消 LLM 请求。
sendResponse() / send_response() 可接受字符串、异步可迭代对象,或来自 OpenAI、Anthropic 或 Google Gemini 的流。SDK 会自动提取文本内容。
上述示例会将用户的完整转写文本传给 LLM。在生产环境中,应添加防护措施,防止任何提示词注入或操纵尝试。
客户端设置
会话事件
配置智能体的首条消息
默认情况下,智能体会等待用户先说话。若要让智能体在对话开始时问候用户,请在启动会话时,在客户端的 overrides 选项中设置首条消息。
连接建立后,智能体会立即说出首条消息。它不会触发服务器上的 onTranscript 回调,而是完全由 ElevenLabs 端处理。
配置最长对话时长
默认情况下,对话会在 600 秒(10 分钟)后结束。Speech Engine 支持最长 2,400 秒(40 分钟)的对话。若要允许更长的对话,请使用更高的 max_duration_seconds 更新 Speech Engine 资源:
你也可以在控制台中设置:打开 Speech Engine,前往 高级 标签页,然后在 对话行为 下设置 最长对话时长。
不支持超过 40 分钟的对话,即使
max_duration_seconds 设置得更高,也可能会断开连接。如需更长的对话,请联系我们的
团队。