ElevenLabs语音API集成 — 语音合成、音效生成、音乐创作、语音转文字、声音隔离与流式传输。用于构建语音应用...
十一实验室工具包是一项面向实际任务的技能,主要用于通过 FastAPI 端点或独立的 Python 函数, 程序化访问所有 7 个十一实验室 API 能力;当使用此工具时;
该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
通过 FastAPI 接口或独立 Python 函数,以编程方式访问全部 7 项 ElevenLabs API 功能。
在以下场景中使用 ElevenLabs:
请勿在以下场景中使用 ElevenLabs:
| 评估维度 | 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 | 从含噪音频中提取纯净人声 |
以下为 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 种语言ElevenLabs 对 TTS 按字符计费。关键实践建议:
prompt-cache 技能,在调用 TTS 前通过 SHA-256 去重将 scripts/elevenlabs_api.py 复制到您的 FastAPI 应用中,并挂载路由:
from elevenlabs_api import router app.include_router(router)
在环境中设置 ELEVENLABS_API_KEY。所有接口均具备完善的错误处理能力,并返回标准 HTTP 状态码。
快速上手示例默认假设 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 密钥:
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 处理
response.json() → 触发 JSONDecodeErrorresponse.content 获取原始字节,再写入 .mp3 文件使用错误的音色 ID
"voice_id": "Rachel" → 返回 404 或错误音色"voice_id": "21m00Tcm4TlvDq8ikWAM"(Rachel 的真实 ID)未启用缓存即批量调用 TTS
对纯英文内容使用多语言模型
eleven_multilingual_v2 在纯英文场景下更慢,且易出现口音失真eleven_turbo_v2_5调用前未确认 FastAPI 服务已运行
httpx.ConnectError 错误信息较难理解本技能采用的部分模式可能被自动化安全扫描器标记:
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章