乐于分享
好东西不私藏

给 OpenClaw 装上声带:创建第一个 TTS Skill

给 OpenClaw 装上声带:创建第一个 TTS Skill

大家好,我是蜗牛AI。

以前,我的 OpenClaw 小龙虾只能在飞书里回复文字。

这次,我给它接入了语音合成能力。

现在只要发送一段文字,它就能生成音频,再通过飞书发回来。

整个流程是:

发送文字↓小龙虾调用 tts-momo Skill↓阿里云百炼生成语音↓飞书收到可播放、可下载的音频

这篇文章只做一件事。

创建一个名为 tts-momo 的 Skill,让云端小龙虾第一次开口说话。

TTS 是什么?

刚开始学习时,我连 TTS 是什么都不知道。

其实它很简单。

TTS 的全称是 Text To Speech,中文叫文本转语音。

例如输入:

大家好,我是蜗牛AI。

TTS 会把它转换成一段朗读这句话的音频。

有声书、导航语音、短视频配音和智能客服,都可能用到 TTS。

所以 TTS 不是某一个软件,而是一类“把文字变成声音”的能力。

这次提供 TTS 能力的平台,是阿里云百炼。

为什么还要创建 Skill?

阿里云百炼已经能生成语音,为什么还要创建 Skill?

因为我不想每次生成语音,都重新研究接口、填写参数,再处理音频文件。

Skill 可以把这些重复操作固定成一套流程。

你可以把它理解成小龙虾工具箱中的一个专用工具:

API 文档:使用说明书API Key:进入服务的门禁卡Skill:整理好的完整操作流程

创建 Skill 后,我只需要说一句:

把这段文字转成语音。

小龙虾就知道该调用哪个模型、使用什么音色,也知道怎样把音频发回来。

开始前需要准备什么?

开始操作前,需要确认:

  • OpenClaw 已经部署并正常运行
  • 已经接入飞书,可以正常与小龙虾聊天
  • 拥有可以登录的阿里云账号
  • 能够打开阿里云百炼控制台

这次使用的是阿里云百炼的非实时语音合成能力。

它适合接收一段完整文字,生成一个可以下载的音频文件。

第一步:找到语音合成 API 文档

进入阿里云百炼控制台。

先找到语音合成页面,再打开非实时语音合成的 API 文档。

这份文档介绍了多个语音模型。

我们主要关注 Qwen-TTS 的非流式调用方式。

文档中需要能看到这些关键信息:

模型:qwen3-tts-flash文字参数:text音色参数:voice语言参数:language_type

不用担心自己看不懂完整文档。

接下来,把文档交给小龙虾。

让它自己理解接口,再创建 Skill。

在文档页面复制 Markdown 内容。

做到这里,你应该已经拿到了一份完整的语音合成 API 文档。

第二步:让小龙虾创建 tts-momo

把刚才复制的 API 文档发送给小龙虾,再把下面的要求一起发给它:

先检查 Skill 是否创建正确,再进行真实调用。

这样出现问题时,更容易排查。

小龙虾创建完成后,返回了类似下面的目录结构:

这些文件分别负责:

  • SKILL.md:说明什么时候使用这个 Skill,以及如何使用
  • tts_momo.sh:调用 TTS、处理音频和发送结果
  • api-docs.md:保存接口参数参考

如果小龙虾返回了文件位置、目录结构和使用方法,说明 Skill 已经创建完成。

但此时还不能说明它真的能生成语音。

第三步:配置 API Key

小龙虾想调用阿里云百炼,需要配置 API Key。

API Key 可以理解成一张门禁卡。

它告诉平台:

  • 谁在调用服务
  • 是否拥有调用权限
  • 调用额度和费用属于哪个账号

进入阿里云百炼的 API Key 管理页面。

创建一个 Key,或者选择已有的可用 Key。

再按照小龙虾给出的方式,把它配置成云端服务器的环境变量:

DASHSCOPE_API_KEY

不要把完整 API Key 直接写进 Skill 脚本。

也不要把它展示在公开截图、文章或代码仓库中。

配置完成后,让小龙虾检查:

请检查 DASHSCOPE_API_KEY 是否可以正常读取,并确认 Skill 脚本、说明文档和日志中没有写入完整 API Key。暂时不要调用 TTS 接口。

如果小龙虾能读取环境变量,也没有在文件中发现完整 Key,说明配置成功了。

第四步:生成第一段语音

现在可以进行第一次真实测试。

第一次测试不要写太长。

先确认完整链路能不能跑通。

我使用的测试要求是:

请使用 tts-momo Skill,把下面这句话转换成语音,并通过飞书发给我:大家好,我是蜗牛AI,这是我的第一段小龙虾语音。

执行后,小龙虾会:

调用阿里云百炼 TTS↓使用 momo 音色生成语音↓将音频保存到云端服务器↓通过飞书发送音频↓清理临时文件

收到音频后,亲自确认四件事:

  • 飞书能否正常收到音频
  • 音频能否播放和下载
  • 播放内容是否与输入文字一致
  • 使用的是否为预期音色

这四项全部正确,才说明 tts-momo 真正跑通了。

为什么音频先保存到云端?

我的 OpenClaw 部署在云端服务器。

所以 Skill 中的“保存到本地”,指的是保存到云端服务器。

它不会直接保存到我正在使用的电脑。

实际链路是:

小龙虾在云端生成音频↓将音频通过飞书发回来↓在飞书中播放或下载到电脑

如果你的 OpenClaw 也部署在云端,这种方式最简单,也最实用。

为什么输出 OPUS,而不是 WAV?

第一版 tts-momo 还将生成的音频转换成了 OPUS 格式。

这里不用研究复杂的音频编码原理,只要知道:

WAV:文件通常更大OPUS:文件更小,更适合通过微信、飞书等聊天工具转发

我们要通过飞书接收音频,后面还可能转发到微信。

OPUS 的文件体积更小。发送更快,也更省流量。

日常收听时,音质一般也够用。

不过,适合转发不等于一定能直接播放。

不同微信版本对 .opus 文件的支持可能不同。即使不能直接播放,也可以作为文件发送和下载。

这也说明,一个 Skill 能够运行还不够。

真正好用的 Skill,还要考虑三个问题:

  • 文件最后发到哪里
  • 用户怎样播放和下载
  • 使用后怎样清理临时文件

小白容易遇到的几个问题

Skill 创建成功,为什么还要测试?

创建成功只说明文件已经生成。

只有真实调用接口、收到音频,并确认内容正确,才能说明完整链路跑通。

小龙虾能把音频直接保存到我的电脑吗?

如果 OpenClaw 部署在云端,通常不能直接写入你的电脑。

更简单的方式是通过飞书发送音频,再由你播放或下载。

API Key 可以直接写进脚本吗?

不建议。

把 Key 放在环境变量里,更不容易被误传或公开。

最后总结

这次操作完成了这样一条链路:

阿里云百炼提供 TTS 能力↓小龙虾根据 API 文档创建 tts-momo Skill↓通过 API Key 获得调用权限↓将文字转换成语音↓通过飞书发送音频

现在,小龙虾不只会回复文字。

它还能把文字变成可以收听的声音。

不过,单个音色只能完成一个人的朗读。

下一篇,我们会在这个基础上继续创建一个男女对话短剧音频 Skill。

只要给小龙虾一份带有男女角色标记的对话稿,它就能识别不同角色。

最后按照台词顺序拼接成一段完整的双人短剧音频。