9Router 文字转语音(9Router TTS)
通过 9Router 统一的 /v1/audio/speech 接口,用 OpenAI、ElevenLabs、Edge TTS、Deepgram 等十余家语音供应商把文本转成 MP3 语音。
技能本身仅是HTTP API文档,要求NINEROUTER_URL/NINEROUTER_KEY环境变量,不直接读取文件或执行破坏性操作,无隐藏权限;扣分点:文本内容会被发送到本地9Router再转发至多家云端TTS供应商(部分noAuth如edge-tts/google-tts意味着内容出境给第三方),数据流披露仅一笔带过,无回滚/确认机制说明。
文档内curl/JS示例自洽,端点、字段、响应格式说明清楚;扣分点:完全依赖外部9Router服务和上游TTS供应商可用性,无测试、无错误码/失败反馈说明(如401、缺ffmpeg时如何表现未说明),静态评审无法复现关键路径。
触发描述明确(文字转语音、配音、朗读),provider quirks表列出了各供应商模型格式和边界(noAuth、需ffmpeg等);扣分点:未声明前置条件(必须先安装运行9Router),未讨论中国大陆网络可达性——多数上游供应商(OpenAI、ElevenLabs、Google)从大陆不可直连,仅edge-tts等少数可能可用。
结构清晰、渐进披露合理、有MIT许可证、仓库有版本号和CI;扣分点:技能自身无版本/changelog/已知限制清单,安装设置被推给另一个SKILL.md(本次未提供内容),维护责任仅隐含在仓库层面。
若9Router已运行,按文档调用即可得到音频文件,直接可用性设计较好(原始字节/base64两种格式);扣分点:价值完全取决于外部服务,静态无法验证输出正确性,边际价值与直接调用供应商API相比有限(主要是统一入口),未提供任何代表性输出证据。
有可审计的源码(服务端ping逻辑可见STT路径测试方式)和README生态说明;扣分点:TTS技能的关键声明(各供应商模型格式、响应形状)无测试套件、无CI覆盖、无第三方执行证据佐证,仅为作者书面声明。
- 该技能只是文档,必须先自行安装并运行9Router服务才能使用。
- 发送的文本会经9Router转发至第三方云供应商,敏感内容请谨慎;部分供应商为noAuth直连。
- 多数上游TTS供应商在中国大陆网络不可直连,需自备代理;仅edge-tts等少数可能可用。
- 无错误处理与失败反馈文档,遇到401/缺ffmpeg等问题需自行排查。
- 所有端点与模型格式声明均为静态文档,未经执行验证。
这个 Skill 能做什么,适合哪些场景?
9router-tts 是 9Router 仓库中打包的一个技能,教 AI 客户端如何调用 9Router 的文字转语音端点。它要求本地或远程已运行 9Router 实例,并配置 NINEROUTER_URL(启用鉴权时还需 NINEROUTER_KEY)。技能涵盖三步工作流:发现可用语音模型、查询语音列表、调用 /v1/audio/speech 生成音频。支持的供应商包括 OpenAI、ElevenLabs、OpenRouter、Edge TTS、Google TTS、Deepgram、Hyperbolic、Inworld、Coqui 等,部分供应商(edge-tts、google-tts、local-device)无需鉴权。输出默认为原始 MP3 字节,也可返回 base64 的 JSON。
技能本身是纯指令文档,不包含可执行脚本。它指导模型执行:1) 用 GET /v1/models/tts 列出可用语音模型,用 /v1/models/info 查询模型参数和语音元数据,用 /v1/audio/voices 按供应商(可按语言如 ?lang=vi)列出语音;2) 向 POST /v1/audio/speech 发送 JSON 请求体(model 为语音 ID,input 为要朗读的文本);3) 接收原始音频字节(Content-Type audio/mp3)保存为文件,或用 ?response_format= 接收 base64 编码的音频;4) 按供应商适配 model 字段格式(如 edge-tts/vi-VN-HoaiMyNeural、el/<voice_id>、tts-1/alloy)。
- 开发者已在用 9Router 做 AI 编码路由,想让 Claude Code 或 Codex 在调试时朗读日志、报错或长文本
- 内容创作者需要为脚本生成旁白配音,希望在同一接口下对比 ElevenLabs、OpenAI、Deepgram 的音色后选择
- 需要越南语等特定语言语音的用户,可用 edge-tts 免鉴权供应商,通过 ?lang=vi 筛选本地化语音
- 自动化脚本作者想让无头流程把文本转成 MP3 文件落盘,用 curl 一行命令即可完成
- 本地离线场景用户可调用 local-device 供应商,直接用操作系统自带语音(macOS say / Windows SAPI)合成语音
这个 Skill 有哪些优点和局限?
- 单一 OpenAI 风格端点统一十余家 TTS 供应商,切换音色只需改 model 字段
- edge-tts、google-tts、local-device 三个供应商无需任何鉴权即可使用
- 支持按语言筛选语音(如 ?lang=vi),对多语言/越南语场景友好
- 文档提供可直接复制的 curl 和 Node.js 示例,以及各供应商 model 格式的速查表
- 强依赖一个已运行的 9Router 实例,没有实例则技能完全无法工作
- ElevenLabs、Deepgram、Hyperbolic 等云供应商需各自付费或令牌,成本取决于上游供应商
- 技能是纯文档,无脚本、无输入校验,错误处理依赖调用方
- local-device 供应商需要 ffmpeg,且仅覆盖 macOS say / Windows SAPI,未提及 Linux 支持
如何安装这个 Skill?
此技能是 9Router 单体仓库中的一个 SKILL.md(skills/9router-tts/SKILL.md),无需独立安装。前置条件:按仓库 README 安装并运行 9Router(npm install -g 9router 后运行 9router,默认 http://localhost:20128),确保 NINEROUTER_URL 指向实例地址;若启用了鉴权还需 NINEROUTER_KEY。设置步骤的更多细节由同仓库 skills/9router/SKILL.md 提供,本技能明确引用了它。
如何使用这个 Skill?
1) 发现语音:curl $NINEROUTER_URL/v1/models/tts | jq '.data[].id';2) 调用生成(示例):curl -X POST "$NINEROUTER_URL/v1/audio/speech" -H "Authorization: Bearer $NINEROUTER_KEY" -H "Content-Type: application/" -d '{"model":"openai/tts-1","input":"Hello world"}' --output speech.mp3;3) 典型触发提示词:'把这段文字转成语音,用 edge-tts 的 vi-VN-HoaiMyNeural 音色保存为 MP3'。响应默认是原始 MP3 字节,加 ?response_format= 则返回 {audio: base64, format}。
这个 Skill 与同类方案有什么区别?
README 提到 9Router 的 TypeScript 分支 OmniRoute 也提供包括 TTS 在内的多模态 API;若只需直连某一家 TTS,直接调用 OpenAI 或 ElevenLabs 官方 API 更简单,但本技能的价值在于多供应商统一入口与免鉴权 fallback。