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 支持最长 7,200 秒(2 小时)的对话。要支持更长的对话,请使用更高的 max_duration_seconds 更新 Speech Engine 资源:
也可以在控制台中设置:打开 Speech Engine,前往 高级 标签页,然后在 对话行为 下设置 最长对话时长。