ElevenLabs语音API集成 — 语音合成、音效生成、音乐创作、语音转文字、声音隔离与流式传输。用于构建语音应用...
十一实验室工具包
功能概述
十一实验室工具包是一项面向实际任务的技能,主要用于通过 FastAPI 端点或独立的 Python 函数, 程序化访问所有 7 个十一实验室 API 能力;当使用此工具时;
核心要点
- 当使用 : Gen 时使用 十一实验室。
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
使用与执行
该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
结果检查与注意事项
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
ElevenLabs 工具包
通过 FastAPI 接口或独立 Python 函数,以编程方式访问全部 7 项 ElevenLabs API 功能。
何时使用此工具包 / 何时不应使用此工具包
在以下场景中使用 ElevenLabs:
- 为视频、演示文稿或内容生成高质量旁白音频(尤其推荐使用 Rachel 或其他保持一致的角色音色)
- 构建需要实时流式语音输出的语音交互型应用
- 对音频文件执行语音转文字(STT/Scribe)
- 根据文本描述生成环境音效或背景音乐
- 从嘈杂录音中分离出清晰的人声
请勿在以下场景中使用 ElevenLabs:
- 您需要快速/低成本且对音质无要求的 TTS —— 请改用 本地 TTS(见下文)
- 您处于离线状态,或无法获取 API 密钥
- 您正在批量生成大量测试音频,且不希望消耗角色配额
ElevenLabs vs 本地 TTS(kokoro / chatterbox)
| 评估维度 | ElevenLabs | 本地 TTS(kokoro/chatterbox) |
|---|---|---|
| 音色质量 | ★★★★★ — 自然、富有表现力 | ★★★ — 效果良好,但存在机械感 |
| 成本 | 按字符数扣除月度配额 | 免费、无限制 |
| 延迟 | 约 300–800ms 的 API 往返耗时 | 约 50–200ms 的本地推理耗时 |
| 音色一致性 | 命名音色(如 Rachel 等)长期稳定 | 取决于具体模型 |
| 离线可用性 | ❌ 需联网 + API 密钥 | ✅ 完全本地运行 |
| 适用场景 | 最终旁白、正式发布内容 | 草稿、测试、大批量任务 |
经验法则:凡面向终端用户展示/播放的内容,请使用 ElevenLabs;草稿、测试及高吞吐量任务,请使用本地 TTS。
功能列表
| 工具 | 接口路径 | 功能说明 |
|---|---|---|
| 音色列表 | GET /api/voices | 浏览所有可用音色及其元数据 |
| TTS | POST /api/voice/tts | 批量文本转语音(支持任意音色、任意语言) |
| TTS 流式输出 | WS /api/voice/stream | 基于 WebSocket 的实时流式 TTS 输出 |
| 音效生成 | POST /api/voice/sfx | 根据文本提示生成环境音效 |
| 音乐生成 | POST /api/voice/music | 根据描述生成背景音乐 |
| STT(Scribe) | POST /api/voice/stt | 带语言自动识别的音频转文字 |
| 人声分离 | POST /api/voice/isolate | 从含噪音频中提取纯净人声 |
已知音色 ID
以下为 OpenClaw 工作流中已验证可用的音色。请优先使用这些 ID,而非调用 API 获取完整列表:
| 音色 | 音色 ID | 适用场景 |
|---|---|---|
| Rachel | 21m00Tcm4TlvDq8ikWAM |
默认旁白音色 — 清晰、温暖、美式英语 |
| Adam | pNInz6obpgDQGcFmaJgB |
男性旁白,权威语气 |
| Domi | AZnzlk1XvdvUeBnXmlld |
充满活力、适合对话场景 |
| Bella | EXAVITQu4vr4xnSDxMaL |
柔和、轻柔的旁白风格 |
所有旁白任务的默认音色:除非明确指定其他音色,否则一律使用 Rachel(
21m00Tcm4TlvDq8ikWAM)。
如需通过 API 获取当前完整音色列表:
curl -s -H "xi-api-key: $ELEVENLABS_API_KEY" https://api.elevenlabs.io/v1/voices | python3 -m json.tool
快速上手
import httpx
BASE = "http://localhost:8000" # 您的 FastAPI 应用地址
KEY = os.environ["ELEVENLABS_API_KEY"]
# 获取音色列表
voices = httpx.get(f"{BASE}/api/voices").json()
# 生成语音
audio = httpx.post(f"{BASE}/api/voice/tts", json={
"text": "Hello world",
"voice_id": voices[0]["voice_id"],
"model_id": "eleven_multilingual_v2"
}).content # 返回原始音频字节
# 生成音效
sfx = httpx.post(f"{BASE}/api/voice/sfx", json={
"prompt": "ocean waves on a quiet beach at night"
}).content
音频输出格式
TTS 和 SFX 接口返回原始音频字节(非 base64 编码,也非 JSON 格式)。
# 正确:.content 即为字节流
audio_bytes = response.content # 类型:bytes
# 保存为文件
with open("output.mp3", "wb") as f:
f.write(audio_bytes)
# 默认输出格式为 MP3
# 文件大小估算:标准质量下,每分钟语音约 1 MB
各接口返回内容说明:
| 接口路径 | 响应类型 | 处理方式 |
|---|---|---|
| POST /api/voice/tts | bytes(MP3) |
直接写入 .mp3 文件 |
| POST /api/voice/sfx | bytes(MP3) |
直接写入 .mp3 文件 |
| POST /api/voice/music | bytes(MP3) |
直接写入 .mp3 文件 |
| POST /api/voice/stt | JSON |
{"text": "transcription...", "language": "en"} |
| POST /api/voice/isolate | bytes(MP3) |
直接写入 .mp3 文件 |
| GET /api/voices | JSON |
返回 {voice_id, name, labels, ...} 字典列表 |
音色选择指南
- 仅英文场景:使用
eleven_turbo_v2_5— 更快,且无跨语言口音混杂问题 - 多语言场景:使用
eleven_multilingual_v2— 支持 29 种语言 - 口音注意事项:多语言模型可能在不同语言间产生口音混杂。若英文音色听上去带有日语口音,请切换至 turbo 模型。
配额管理
ElevenLabs 对 TTS 按字符计费。关键实践建议:
- 积极缓存 — 相同文本 + 相同音色 = 相同音频输出
- 使用
prompt-cache技能,在调用 TTS 前通过 SHA-256 去重 - 一篇 6 场景儿童故事 ≈ 2,000 字符
- 免费版:每月 10k 字符;入门版:30k;创作者版:100k。
集成方式
将 scripts/elevenlabs_api.py 复制到您的 FastAPI 应用中,并挂载路由:
from elevenlabs_api import router app.include_router(router)
在环境中设置 ELEVENLABS_API_KEY。所有接口均具备完善的错误处理能力,并返回标准 HTTP 状态码。
若 FastAPI 服务未运行怎么办?
快速上手示例默认假设 http://localhost:8000 已就绪。若服务未启动:
# 调用前检查服务是否在线
import httpx
try:
httpx.get("http://localhost:8000/health", timeout=2.0)
except httpx.ConnectError:
# 服务未运行 — 先启动它
import subprocess
subprocess.Popen(["uvicorn", "elevenlabs_api:app", "--port", "8000"])
import time; time.sleep(2) # 留出端口绑定时间
或绕过 FastAPI 封装,直接调用 ElevenLabs 原生 API — scripts/elevenlabs_api.py 中的函数可作为独立模块导入:
from elevenlabs_api import generate_tts # 若该模块导出了独立函数
错误处理:API 密钥与速率限制
缺失 API 密钥:
httpx.HTTPStatusError: 401 Unauthorized
{"detail": {"status": "unauthorized", "message": "Invalid API key"}}
→ 检查 ELEVENLABS_API_KEY 是否已设置:echo $ELEVENLABS_API_KEY
→ 从 1Password 获取密钥:op read "op://OpenClaw/ElevenLabs API Credentials/credential"
触发速率限制(429):
{"detail": {"status": "too_many_requests", "message": "Too many requests"}}
→ 等待后重试,并采用指数退避策略。ElevenLabs 免费版/入门版的速率限制按分钟计算。
→ 创作者版及以上版本限制大幅提高 — 请登录 ElevenLabs 控制台查看您的订阅等级。
配额耗尽:
{"detail": {"status": "quota_exceeded", "message": "Quota exceeded"}}
→ 当月字符配额已用完。请等待每月重置,或升级订阅等级。
→ 查看当前用量:curl -s -H "xi-api-key: $KEY" https://api.elevenlabs.io/v1/user/subscription
相关文件
scripts/elevenlabs_api.py— 包含全部 7 个接口的 FastAPI 路由实现
常见错误
将字节响应误当作 JSON 处理
- ❌ 对 TTS 请求调用
response.json()→ 触发JSONDecodeError - ✅ 使用
response.content获取原始字节,再写入.mp3文件
- ❌ 对 TTS 请求调用
使用错误的音色 ID
- ElevenLabs 音色 ID 是不可读的字符串,而非音色名称
- ❌
"voice_id": "Rachel"→ 返回 404 或错误音色 - ✅
"voice_id": "21m00Tcm4TlvDq8ikWAM"(Rachel 的真实 ID)
未启用缓存即批量调用 TTS
- 相同文本 + 相同音色始终生成相同音频 — 请避免重复生成已缓存结果
- 否则将不必要地消耗字符配额
对纯英文内容使用多语言模型
eleven_multilingual_v2在纯英文场景下更慢,且易出现口音失真- 纯英文任务请使用
eleven_turbo_v2_5
调用前未确认 FastAPI 服务已运行
- 若忽略本地服务依赖,
httpx.ConnectError错误信息较难理解 - 建议在调用接口前增加健康检查或自动启服逻辑
- 若忽略本地服务依赖,
安全说明
本技能采用的部分模式可能被自动化安全扫描器标记:
- base64:用于媒体类 API 响应中音频/二进制数据的编码(行业通用实践)
- UploadFile:FastAPI 内置的文件上传参数,用于 STT/人声分离等接口
- "system prompt":指代理指令配置,不涉及提示注入攻击
热门AI工具
相关专题
用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。
0
2026.11.03
Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。
0
2026.11.03
Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。
0
2026.11.03
本专题汇总了码上飞(CodeFlying)的官方入口地址合集,涵盖官网主站及网页版在线使用入口,支持注册登录后直接在线体验零代码AI应用生成。同时整理了APP端下载渠道与小程序入口,助你快速访问平台,通过自然语言描述需求即可生成应用、小程序或网站。
0
2026.11.03
本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。
0
2026.11.02
本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。
0
2026.11.02
本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。
0
2026.11.02
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习
最新文章