OpenClaw系列第15课:TTS 语音 - 让 OpenClaw 开口说话

这是「OpenClaw 教程课程」第 15 课。
这一课是第三模块「工具与技能」的最后一篇。前面我们讲了 Skills、exec、browser、read / write / edit。今天讲一个很有“陪伴感”的能力:TTS 语音

图:TTS 让 OpenClaw 不只会用文字回复,也可以把回答转换成语音,通过语音消息或音频附件发送给用户。

很多人第一次看到 OpenClaw 的 TTS,会觉得它只是一个“小功能”:

把文字读出来而已。

但实际用起来,你会发现它改变的是交互方式。

文字回复适合仔细阅读。

语音回复适合快速听、移动中听、做事时听。

比如:

  • 早上让 Agent 语音播报今日事项
  • 跑完任务后发一段语音结果
  • 开车或做饭时听简短总结
  • 把长文章摘要转成语音
  • 让某个 Agent 用固定声音说话

所以 TTS 的价值不是“炫技”,而是:

让 OpenClaw 从文字助手,变成可以开口说话的助手。

一、TTS 是什么?

TTS 是 Text-to-Speech 的缩写。

中文可以理解成:

文字转语音。

在 OpenClaw 里,TTS 的作用是把 Agent 的文字内容转换成音频,然后通过聊天渠道发送出去。

这个音频可能是:

  • Telegram 里的语音消息
  • WhatsApp 里的 voice note
  • Matrix / Feishu 里的语音消息
  • 其他渠道里的普通音频附件

所以 TTS 不是让模型“换一种语气写字”。

它是真正生成音频文件。

二、TTS 和普通文字回复有什么区别?

普通文字回复是给你看的。

TTS 是给你听的。

这会带来几个明显区别。

1)语音更适合短内容

文字可以很长。

你可以慢慢看、跳读、复制、搜索。

但语音一旦太长,就容易变成负担。

所以 TTS 更适合:

  • 简短总结
  • 结果播报
  • 提醒通知
  • 状态更新
  • 一段温和解释

不太适合:

  • 大段代码
  • 长配置
  • 多层列表
  • 复杂表格
  • 需要复制的命令

2)语音更有打扰感

文字消息你可以晚点看。

语音消息会更像“有人在说话”。

所以 TTS 需要更克制。

特别是在群聊、深夜、工作频道里,自动语音很容易打扰人。

3)语音更适合“结论先行”

文字可以展开论证。

语音最好先说结果。

例如:

1
构建成功了。耗时 42 秒,没有发现错误。

比:

1
我先检查了 package.json,然后运行了 npm run build,接着观察到……

更适合语音场景。

所以 TTS 不是简单把原文照读。

更好的语音回复,通常要更短、更口语、更聚焦。

三、OpenClaw 的 TTS 能做什么?

根据 OpenClaw 文档,TTS 可以把 outbound replies 转换成音频,并根据不同渠道用合适方式发送。

简单说,它可以做到:

  • 把指定文本转成语音
  • 把最新一条回复转成语音
  • 开启自动语音回复
  • 为不同 provider 选择不同声音
  • 为不同 Agent 配不同声音或 persona
  • 在支持的渠道里发送原生 voice note
  • 在其他渠道里发送音频附件
  • 长回复必要时先总结再转语音

文档里提到,OpenClaw 支持多种 speech provider,例如:

  • OpenAI
  • ElevenLabs
  • Azure Speech
  • Google Gemini
  • Microsoft
  • MiniMax
  • Volcengine
  • xAI
  • Local CLI
  • 以及其他语音提供方

你不需要一开始就全部理解。

新手只要先知道:

TTS = 文本内容 + 语音 provider + 输出渠道。

图:TTS 的基本流程是 Agent 生成文字,OpenClaw 选择语音 provider 合成音频,再按渠道能力发送为语音消息或音频附件。

四、TTS 默认不是自动开启的

这一点很重要。

OpenClaw 文档里明确说:

Auto-TTS is off by default.

也就是说,默认情况下,普通聊天还是文字回复。

TTS 不会突然把所有回答都变成语音。

只有在下面几类情况下才会触发:

  • 用户明确要求音频
  • 使用 /tts 命令
  • 配置了自动 TTS
  • 使用允许的 TTS directive
  • Agent 调用 tts 工具进行一次性语音生成

这点设计是合理的。

因为语音回复比文字更容易打扰用户。

所以默认关闭,按需开启,才是更稳的方式。

五、最快测试:/tts audio

如果你只是想试一下 TTS 能不能用,最简单的是一次性语音命令。

文档里给的命令是:

1
/tts audio Hello from OpenClaw

中文也可以类似这样:

1
/tts audio 你好,这是一条来自 OpenClaw 的语音测试。

这条命令的特点是:

  • 只生成这一次音频
  • 不会开启长期自动语音
  • 适合测试 provider 是否可用

这对新手很友好。

你不用一开始就改配置、开自动,只要先测试一条。

六、查看状态:/tts status

配置或测试 TTS 时,另一个很有用的命令是:

1
/tts status

它会显示当前 TTS 状态。

根据文档,状态信息里可能包括:

  • 当前是否启用 TTS
  • 当前 provider
  • 当前 voice / model
  • 最近一次尝试是否成功
  • fallback 诊断
  • 每个 provider 尝试的结果和耗时

这非常适合排错。

比如你发现语音没有发出来,先不要乱改配置。

更好的第一步是:

1
/tts status

看看是不是 provider 没配置、API key 缺失、fallback 失败,或者当前模式根本没开启。

七、常用 /tts 命令

OpenClaw 的 TTS 有一组 slash commands。

新手先记这些就够了:

1
2
3
4
5
6
7
8
9
10
11
12
13
/tts status
/tts audio <text>
/tts on
/tts off
/tts latest
/tts provider <id>
/tts persona <id>
/tts persona off
/tts limit <chars>
/tts summary off
/tts chat on
/tts chat off
/tts chat default

我们逐个解释。

/tts audio <text>

生成一次性语音。

不改变长期设置。

适合测试。

/tts on

开启本机本地偏好的自动 TTS。

文档里说它会把 local TTS preference 写成 always

简单理解:

后续回复更可能自动变成语音。

/tts off

关闭本地自动 TTS 偏好。

这是很重要的“刹车”。

如果你觉得语音太吵,可以直接关掉。

/tts latest

把当前会话里最新一条 assistant 回复再转成语音发送一次。

这很实用。

比如 Agent 刚发了一段总结,你觉得想听,就可以:

1
/tts latest

/tts provider <id>

切换本地偏好的语音 provider。

例如:

1
/tts provider openai

或者:

1
/tts provider elevenlabs

具体可用 provider 要看你的配置和 API key。

/tts persona <id>

切换当前语音 persona。

persona 可以理解成“稳定的声音身份”。

后面单独讲。

/tts chat on|off|default

这是会话级别的自动 TTS 控制。

比如你只想让当前聊天开语音,可以用:

1
/tts chat on

如果当前聊天太吵,可以:

1
/tts chat off

八、配置自动 TTS:messages.tts.auto

如果你想长期启用 TTS,需要配置 messages.tts

文档里的基础示例类似这样:

1
2
3
4
5
6
7
8
{
messages: {
tts: {
auto: "always",
provider: "elevenlabs",
},
},
}

这里最重要的是:

1
auto: "always"

它表示自动 TTS 总是开启。

不过我不建议新手一上来就全局 always

更稳的方式是:

  1. 先用 /tts audio 测试
  2. 再用 /tts chat on 在某个会话里试
  3. 确认不打扰后,再考虑全局配置

配置是长期行为,尤其语音会打扰人。

所以不要为了测试,直接把所有 Agent、所有渠道都变成语音回复。

九、provider:谁来合成语音?

TTS provider 就是实际生成声音的服务。

你可以把它理解成:

语音引擎。

不同 provider 的区别包括:

  • 声音质量
  • 支持语言
  • 支持的声音数量
  • 是否需要 API key
  • 是否支持 voice note 格式
  • 是否支持 persona prompt
  • 价格和延迟
  • 稳定性

OpenClaw 文档里列了很多 provider。

对新手来说,可以先这么选:

想要可靠 hosted provider

可以考虑:

  • OpenAI
  • ElevenLabs

想要无 API key 先试试

可以考虑:

  • Microsoft
  • Local CLI

不过文档也提醒:Microsoft provider 使用的是 Microsoft Edge 的在线 neural TTS 服务,属于 best-effort,没有公开 SLA 或 quota。

也就是说:

它适合试用,不适合当成强 SLA 的生产依赖。

想用本地命令合成

可以用 Local CLI。

例如 macOS 上的 say,或你自己安装的本地 TTS 命令。

Local CLI 的好处是可控。

但前提是你本机真的有可用命令,而且配置正确。

图:TTS provider 是实际合成语音的引擎。不同 provider 在声音质量、认证方式、格式支持和稳定性上会有差异。

十、persona:稳定的“声音身份”

OpenClaw 的 TTS 里有一个很有意思的概念:

1
persona

你可以把它理解成:

一个稳定的说话身份。

它不只是声音 ID。

一个 persona 可以包含:

  • label:名字
  • description:描述
  • provider:优先使用哪个 provider
  • voice / voiceId:声音
  • model:模型
  • prompt:说话风格
  • pacing:语速节奏
  • accent:口音
  • constraints:约束

比如你可以有:

  • narrator:沉稳旁白音
  • assistant:清晰助理音
  • teacher:温和教学音
  • alert:短促提醒音

这样不同 Agent 可以有不同声音。

例如教程 Agent 用温和教学音,告警 Agent 用短促清晰音。

这会让多 Agent 系统更容易区分。

十一、per-agent voice:不同 Agent 用不同声音

OpenClaw 支持给某个 Agent 设置自己的 TTS 配置。

文档里提到可以用:

1
agents.list[].tts

也就是说,某个 Agent 可以覆盖全局 messages.tts 设置。

这很适合多 Agent 场景。

比如:

  • 教程 Agent:声音温和,适合讲解
  • 运维 Agent:声音短促,适合告警
  • 阅读 Agent:声音稳定,适合长文朗读
  • 家庭助手:声音更自然,适合日常提醒

这也是 TTS 真正有意思的地方。

它不只是“发一段音频”。

它可以让不同 Agent 有不同的听感身份。

十二、voice note 和音频附件有什么区别?

OpenClaw 会根据渠道能力决定怎么发送音频。

文档里提到:

  • Feishu、Matrix、Telegram、WhatsApp 支持语音消息风格
  • 其他渠道通常发送普通音频附件
  • Telegram / WhatsApp 这类渠道更适合 voice note
  • 某些情况下会把音频转码成 Ogg/Opus

你可以简单理解:

voice note

更像聊天软件里的“语音消息”。

特点是:

  • 通常显示成语音气泡
  • 更适合短语音
  • 在手机上体验好

audio attachment

更像一个音频文件。

特点是:

  • 更通用
  • 适合不支持 voice note 的渠道
  • 可能显示为文件附件

所以不是所有地方都会显示成同一种语音样式。

OpenClaw 会尽量按渠道能力选择合适输出。

十三、自动 TTS 的跳过规则

自动 TTS 并不是所有回复都转语音。

文档里提到,开启 auto-TTS 时,OpenClaw 会跳过一些情况:

  • 回复里已经有媒体或 MEDIA: 指令
  • 回复太短,比如少于 10 个字符
  • 回复超过长度限制且无法总结
  • 长回复 summary 关闭或 summary model 不可用

这很合理。

比如一个回复只有:

1
好的

没必要专门生成语音。

再比如一个回复已经带图片或文件了,也没必要自动再加一段音频。

这说明 TTS 是有节制地触发,而不是盲目读出所有东西。

十四、长回复:先总结再转语音

语音最怕太长。

OpenClaw 文档里提到,如果回复超过限制,且 summary 开启,它可以先用 summary model 总结,再把总结转成语音。

这非常重要。

因为一篇长教程如果直接读出来,可能要十几分钟。

但语音通知更适合这样:

1
第 15 课已经写完,主要讲 TTS 的启用方式、provider、persona、voice note 和安全使用建议。

这就够了。

所以我建议:

语音默认说摘要,正文仍然发文字。

这样体验最好。

文字负责完整信息。

语音负责快速提醒和结论。

十五、TTS 工具什么时候该用,什么时候不该用?

适合用 TTS 的场景

  • 任务完成提醒
  • 简短状态播报
  • 每日摘要
  • 家庭或个人助手提醒
  • 文章摘要朗读
  • 移动中不方便看屏幕
  • 需要更有陪伴感的互动

不适合用 TTS 的场景

  • 代码块
  • 密钥、token、密码
  • 很长的 Markdown 表格
  • 大段日志
  • 错误堆栈全文
  • 生产环境敏感告警细节
  • 群聊里频繁自动播报

这里尤其要强调敏感信息。

不要让 Agent 把 token、密码、私密配置读成语音。

语音在空间里是“可被听见”的。

这和文字不一样。

十六、适合新手的 TTS 提问模板

下面这些句式可以直接复制。

1)一次性语音测试

1
/tts audio 你好,这是一条 OpenClaw 语音测试。

2)把最新回复转语音

1
/tts latest

3)只在当前聊天开启

1
/tts chat on

4)当前聊天关闭语音

1
/tts chat off

5)让 Agent 生成适合语音的摘要

1
请把刚才的结果整理成 30 秒以内适合语音播报的摘要。

6)避免读敏感信息

1
请用语音总结结果,但不要读出任何 token、路径中的用户名、密钥或完整错误堆栈。

7)任务完成后语音提醒

1
任务完成后,用一句简短语音告诉我结果。失败时只读结论和下一步建议。

这些模板的关键是:

告诉 Agent:语音要短、要有边界、不要读敏感内容。

图:TTS 最适合用于任务完成提醒、每日摘要、移动中收听、短状态播报和个性化 Agent 声音。

十七、常见坑

坑 1:一上来就全局开启 always

如果所有回复都自动语音,很快就会烦。

尤其是群聊和高频任务。

更好的做法是:

先用 /tts audio 测试,再用 /tts chat on 小范围试用。

坑 2:让 TTS 读很长的内容

长内容适合文字,不适合语音。

更好的做法是:

长文发文字,语音只发摘要。

坑 3:把代码和命令读成语音

代码、命令、配置最好保留文字。

语音只说:

1
我已经把命令发在文字里,你可以直接复制。

坑 4:语音读出敏感信息

比如 token、密码、API key、内部 URL。

这类信息不要进入 TTS 文本。

坑 5:没看 /tts status 就乱改配置

TTS 不出声时,先看状态。

1
/tts status

不要一上来就换 provider、改配置、重启服务。

坑 6:不知道渠道显示方式不同

同一段 TTS,在 Telegram 可能像语音消息,在另一个渠道可能是音频附件。

这是正常的。

由渠道能力决定。

十八、TTS 的安全边界

TTS 不只是技术功能,也涉及隐私和使用体验。

1)敏感信息不要读出来

语音可能被旁边的人听到。

所以不要读:

  • 密码
  • token
  • API key
  • 身份证、手机号等隐私
  • 内部系统地址
  • 完整错误堆栈里的敏感路径

2)群聊里少用自动语音

群聊里的语音会打扰很多人。

除非群成员明确需要,否则不建议自动 TTS。

3)深夜少发语音

文字可以静默看。

语音更有存在感。

如果做定时任务或 Heartbeat,尤其要注意不要滥发语音。

4)生产告警要短

生产告警可以语音提醒,但不要读完整日志。

更好的格式是:

1
告警:网关健康检查失败。建议先查看 gateway status 和最近 50 行日志。

这样简洁、有用、不泄露太多。

图:TTS 要避免读出敏感信息,也要控制打扰范围。语音适合短提醒,不适合长日志和密钥内容。

十九、这一课最值得记住的一句话

如果今天只记一句话,我建议你记这句:

TTS 不是把所有文字都读出来,而是把适合听的内容变成语音。

再补一句使用原则:

语音要短,敏感不读,默认少打扰。

二十、总结

今天这节课,我们讲清楚了 OpenClaw 的 TTS 语音能力:

  1. TTS 是 Text-to-Speech,也就是文字转语音。
  2. OpenClaw 可以把回复转成 voice note 或音频附件。
  3. Auto-TTS 默认关闭,普通聊天不会自动变语音。
  4. /tts audio <text> 适合做一次性语音测试。
  5. /tts status 是排查 TTS 问题的第一步。
  6. provider 是语音引擎,persona 是稳定的声音身份。
  7. 不同渠道会以 voice note 或音频附件形式发送。
  8. 长回复更适合先总结再转语音。
  9. 不要让 TTS 读出密码、token、密钥或长日志。
  10. TTS 最适合短提醒、摘要、状态播报和移动中收听。

到这里,第三模块「工具与技能」就告一段落了。

你已经理解了:

  • Skill:让 Agent 有稳定方法
  • exec:让 Agent 执行命令
  • browser:让 Agent 操作网页
  • read / write / edit:让 Agent 处理文件
  • TTS:让 Agent 开口说话

这些能力组合起来,OpenClaw 就不只是一个聊天入口,而开始像一个真正能做事、能反馈、能陪你一起推进任务的操作系统。

下一课预告

下一课开始,我们进入第四模块:多 Agent 与自动化

第 16 课会讲:

sessions_spawn:怎么派生子 Agent

也就是:

  • 为什么要派生子 Agent
  • 子 Agent 和当前对话有什么关系
  • 什么任务适合交给子 Agent
  • context=”isolated” 和 context=”fork” 怎么理解
  • 怎么避免多 Agent 乱跑

🦞 本文由八条撰写,持续更新中。