你可能已经习惯了 TTS 的套路:调一个 API,传一段文本,选一个声音,拿回一个 MP3。这件事本身没什么新鲜的,ElevenLabs 两年前就做到了。但 OpenAI 这个 Speech Skill 做的事情不太一样,它不是在“生成声音”,而是在“把声音生成变成一个可复现的工程任务”。
我第一次翻它的 SKILL.md 时,印象最深的是这句话:“Prefer the bundled CLI for deterministic, reproducible runs.”一个语音生成的 Skill,核心设计目标居然是“可复现”和“确定性”。这听起来跟 TTS 的直觉完全相反,TTS 不是应该追求“自然”“拟真”吗?
但仔细想想,这就是两种完全不同的使用场景。你随便玩一下 TTS,确实不需要什么工程化。但如果你在一个项目里需要给 200 段文案配旁白,每次生成都要保证同一段文本的输出风格一致,这种事没有 CLI 和批处理机制根本搞不定。OpenAI Speech Skill 解决的问题是后者。
说白了,这篇文章不是要跟你讲 TTS 的基础概念。我会拆一下这个 Skill 的设计思路:它怎么把单次 API 调用变成一个可控的工程流程,Instruction Augmentation 这个设计为什么是关键,以及它的 CLI 批处理机制在实际场景里到底好不好用。
环境准备
上手这个 Skill 几乎不需要什么环境配置。唯一的前置条件是你得有一个 OpenAI API Key,并且账户里有余额。GPT-4o-mini-tts 的定价是每分钟 0.015 美元,相比 ElevenLabs 的 0.03 美元起步价便宜了一半,批量跑的时候成本优势还是比较明显的。
安装本身也简单。标准的 Smithery 安装命令就够了:
npx skills add openai/skills --skill speech
这个命令会把整个 Skill 打包到本地,共 14 个文件。如果你好奇具体拉了什么下来,看一眼 references/ 目录就知道了,四个使用场景各有一套独立模板:
-
narration(旁白解说) -
voiceover(产品 Demo 配音) -
IVR(电话提示音) -
accessibility(无障碍朗读)
环境变量这块有个细节值得注意。SKILL.md 里明确写了“Never ask the user to paste the full key in chat”,要求用户在本地设置环境变量后口头确认。这个设计在实际使用中效果明显,你不用担心不小心把 Key 泄漏到对话历史里。设置方式也很直接:
export OPENAI_API_KEY="sk-..."
验证环境是否就绪只需要跑一行命令。用 CLI 试生成一个短音频:
python scripts/text_to_speech.py --input "测试语音生成" --voice cedar

能正常生成 MP3 文件就没问题了。如果你用的是 Windows,注意 uv 的路径问题,SKILL.md 虽然推荐 uv pip install openai,但实测直接用 pip install openai 也没差别。另外 GPT-4o-mini-tts 模型要求输入文本不超过 4096 字符,超长文本需要用 CLI 的 --split 参数自动分段,这个在批处理场景里会提到。
操作流程
Speech Skill 的工作流用一个决策树开局,极其简单。打开 SKILL.md 第二段,就一句话:用户给了多行文本或多个文件就进批处理,否则走单文件流程。没别的分支,没有复杂的模式判断。这个设计背后有个很朴素的逻辑,批处理和单文件在验证方式、输出管理、错误处理上是完全不同的问题,分开处理反而减少了心智负担。
单文件流程的路径很直。你只需要提供四样东西:
-
文本原文(verbatim,逐字确认) -
声音选择(默认 cedar,明亮点用marin) -
表达风格描述(一段自然语言,比如「友好的客服语气」) -
输出格式(MP3 默认,WAV 适合流式传输)
CLI 会在内部做一次指令增强,把自然的描述词转换成结构化的语音参数,然后调 API 生成音频。关键点在于“验证”这一步,SKILL.md 要求你确认音频的可懂度、语速、发音准确性和约束遵守情况,不满足就改一个参数重新生成。从文档来看,这个迭代步骤是被当作核心环节而非可选项标注的。
批处理流程更值得细看。你需要先准备一个 JSONL 文件,每一行描述一个独立的语音任务:
{"input":"感谢您的来电,请稍候。","voice":"cedar","response_format":"mp3","out":"hold.mp3"}
{"input":"销售咨询请按 1,技术支持请按 2。","voice":"marin","instructions":"Tone: Clear and neutral. Pacing: Slow.","response_format":"wav"}
CLI 一次跑完整个 JSONL,生成完毕后自动删除临时文件。这里有两个设计细节:一是 JSONL 必须先写到 tmp/speech/ 目录,跑完就删,不留中间产物;二是输出默认落到 output/speech/,文件名可以逐条指定。这种约定让批处理的中间状态完全可控,不存在“跑了一半不知道哪些文件已经生成”的尴尬。

容易踩坑的地方是速率限制。CLI 硬性限制了每分钟 50 个请求,--rpm 参数最大就是 50,设高了会被直接拒绝。批处理几百条的时候,你需要自己算一下时间,50 rpm 意味着每条平均 1.2 秒,加上生成时间,一个 200 条的批任务大约需要十分钟。不快,但稳定。
另一个容易被忽略的点是声音选择。Skill 提供了 13 个内置声音,但 SKILL.md 只推荐了两个:cedar(默认,中性偏沉稳)和 marin(更明亮)。文档明确说“Built-in voices only. Custom voices are out of scope”,也就是说你没法用自己的声音克隆。如果你需要更个性化的声音,得去 ElevenLabs 那边,这不是这个 Skill 的定位。
关键设计
翻完 14 个文件后,Speech Skill 最让我觉得有意思的设计不是 CLI,也不是批处理,而是 Instruction Augmentation 这个机制。它解决了一个在 TTS 使用中极其常见但很少被认真对待的问题:用户说“用友好的语气读一下这段文字”,AI 到底该理解成什么?
传统做法是让用户自己写详细的语音参数,或者提供一个几十个维度的控制面板。Speech Skill 选了第三条路:让 AI 来翻译。用户只需要用自然语言描述想要的风格,Skill 内部会把描述转换为一个结构化的标签模板:
Voice Affect: Warm and composed.
Tone: Friendly and confident.
Pacing: Steady and moderate.
Emphasis: Stress "demo" and "show".
这个模板的精妙之处在于它同时满足了三个互相矛盾的需求。对于新手,不需要学习任何 TTS 术语就能用自然语言控制声音表现力。对于有经验的用户,这个结构化输出本身就是可调试的,每个维度都可以单独调整。对于批处理场景,标签化的格式让它天然适合 JSONL 集成,每一个语音任务都可以携带独立的指令而不增加复杂度。
Augmentation 规则也设计得克制。SKILL.md 专门有一段“Augmentation vs Invention”的说明:如果你说“给 demo 配音”,它可能会补充“清晰、稳速、友好的语气”,但绝不会主动给你换一个角色或口音。这意味着增强行为是可预期的,不会出现“我只是想加个背景音乐结果它把整个声音风格都改了”的意外。
另一个值得注意的设计是参考模块的独立化。四个使用场景各有一个独立模板文件,互不依赖,各带自己的一套默认值和优化建议:
-
narration.md:旁白解说默认值 -
voiceover.md:产品 Demo 配音优化建议 -
ivr.md:电话提示音模板 -
accessibility.md:无障碍朗读参数
这样做的好处是,每个场景的语音参数预设不会互相污染,你在做 IVR 提示音时不会意外套用了旁白的“感情丰富”风格。

不过有一个设计选择我不是很理解,CLI 脚本 text_to_speech.py 在 SKILL.md 中被标记为“Never modify”。如果你直接用 OpenAI SDK 写一个 TTS 调用也就十行代码,但这个 Skill 强行要求你走 CLI,理由是“确定性”和“可复现”。这在团队协作和 CI/CD 场景里确实有价值,但对于只想快速调试一个声音效果的用户来说,多了一层间接调用反而增加了认知负担。两种需求能不能在同一个 Skill 里共存,也许是可以改进的地方。
使用场景
最直接的应用场景是产品 Demo 配音。你做了一个 SaaS 产品的功能演示视频,需要给关键操作步骤配上语音说明。传统做法是写脚本、找人录音、反复修改同步,一个三分钟的视频配音可能需要半天到一天的时间。
Speech Skill 把这个流程压缩到了分钟级。你写好每一段旁白的文案,按时间顺序排进 JSONL,指定声音和风格,一次 CLI 命令跑完。如果有哪一段的节奏不对,只改那条 JSONL 条目对应的 instructions 参数再跑一遍就行。从社区反馈来看,旁白场景用 marin 声音加“Pacing: Steady. Tone: Professional but approachable.”的组合效果最稳定。
IVR 电话提示音是另一个高频场景。这类音频的特点是短、多、需要绝对一致的质量。一个呼叫中心可能有几十条提示音,每条都很短但人工录制和后期处理的工作量跟长音频差不多:
-
“欢迎致电” -
“请输入工号” -
“转接中请稍候” -
“坐席全忙”
Speech Skill 的批处理加 JSONL 机制在这种场景下特别合适。每条一个条目,带上明确的 response_format,一次跑完,所有文件的音色、音质、节奏完全一致。
不过需要说清楚边界。这个 Skill 不适合做长音频的精细编辑。它没有 SSML 支持,没法标记单词级别的情绪变化。instructions 参数是全局生效的,你没法让一句话里前半段激动、后半段平静。如果你需要这种粒度的控制,目前还得回到 ElevenLabs 或者手动编辑音频文件。另外,虽然模型支持 50 多种语言,但实际优化集中在英语上,中文的语调处理仍然有明显的“外国人口音感”,做中文旁白的质量跟英文不在一个水平线。
洞察与反思
Speech Skill 背后有一个更值得讨论的趋势:TTS 的竞争正在从“谁的音质更好”转向“谁的控制精度更高”。
两年前大家热议的还是哪家 TTS 听起来最像真人。到了 2026 年,GPT-4o-mini-tts 这个“Mini”模型在音质上其实没有比原来的 TTS-1 强一个代际,但它多了一个 instructions 参数,能用自然语言控制声音。这个变化比音质提升更有意义,因为它把 TTS 从“生成音频”变成了“编排音频体验”。做 IVR 的公司不只是要一段“逼真的欢迎语”,他们要的是“在所有触点上保持一致品牌声音体验的能力”。
我个人觉得这个 Skill 真正的价值不是它集成了 GPT-4o-mini-tts,而是它把 TTS 变成了一个“可结构化”的任务。CLI + JSONL 批处理 + 指令增强模板 + 场景独立模块,这四个组件放在一起,本质上是在给语音生成定义一套工程标准。单次调用和批处理用同一套底层逻辑,instruction 模板保证每次生成的一致性,输出路径约定让自动化流水线可以直接接入。
但从另一个角度看,这个 Skill 的设计也暴露了 OpenAI 在语音产品线上的一种纠结。它一边在 Skill 里强调“Built-in voices only”,一边又在 API 文档里宣传自定义声音功能(需要联系销售团队申请)。它在 SKILL.md 里用 cedar 和 marin 作为推荐声音,但在公开的体验站 openai.fm 上展示的是完全不同的一组预置声音。产品策略上,语音到底是 API 服务还是平台能力,OpenAI 自己好像也没完全想清楚。
对于已经在用 ElevenLabs 或 Play.ht 的开发者来说,Speech Skill 最大的吸引力可能是成本。每分钟 0.015 美元的价格几乎是竞品的一半,而且用的是同一套 OpenAI API Key,不需要额外注册和付费。但代价是声音定制能力被大幅压缩,没有声音克隆、没有精细编辑、没有企业级管理后台。如果你需要的是“生成一段听起来不错的旁白”,这个 Skill 够用了。如果你需要的是“让 AI 用你的声音念一段文案”,它做不到。
资源地址
| 资源 | 地址 |
|---|---|
| Smithery 页面 | https://smithery.ai/skills/openai/speech |
| GitHub 仓库 | https://github.com/openai/skills/tree/main/skills/speech |
| OpenAI TTS 文档 | https://platform.openai.com/docs/guides/text-to-speech |
| OpenAI 语音体验站 | https://www.openai.fm/ |
总结
Speech Skill 不是那种“颠覆性创新”类型的产品。它解决的问题非常具体:怎么把 TTS 从一个单次调用的玩具,变成一个可以在项目里稳定复用的工程工具。它用了四个看起来很朴素的手段:
-
CLI(命令行入口,保证确定性) -
JSONL 批处理(一次跑几十上百条) -
指令增强模板(自然语言转结构化参数) -
场景模块化(四个独立参考文件,互不污染)
组合起来的效果确实让 TTS 的工作流变得可控了。
如果你现在的 TTS 使用方式还是下面这套手动流程,这个 Skill 能帮你省不少事:
-
打开 API 文档 -
复制示例代码 -
改一段文本 -
跑一次 -
不满意再改参数手动重跑
如果你对声音定制有刚需,或者做的是中文为主的语音内容,那还需要再等等,GPT-4o-mini-tts 的中文表现和这个 Skill 的声音选择范围目前都是短版。
一个值得持续关注的点是,OpenAI 在 gpt-4o-mini-tts 上选择了“自然语言指令控制”而不是 SSML 标记语言,这代表了一条跟传统 TTS 完全不同的路线。如果这条路线跑通了,未来语音交互的编程方式可能就不会是“设置参数”,而是“告诉它你想要什么感觉”。Speech Skill 的指令增强模板,可以看作是这个方向的工程落地尝试。
