OpenClaw 跑 TTS 语音合成任务:LLM Key 用 TaoToken
1. 先看清 OpenClaw TTS 里的 Token 花在哪个环节
OpenClaw 跑 TTS 语音合成的时候,真正决定「什么时候触发语音、选 edge-tts 还是 elevenlabs、失败后走哪条 fallback」的并不是 TTS 引擎本身,而是 voice-agent.yaml 里那个 LLM provider。原文把 provider 写成了 Moonshot AI,于是每次智能体理解指令、编排引擎、处理长会话上下文都要消耗模型的 Token。把这些 LLM 调用统一接到 TaoToken(https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=)上,TTS 引擎保持原样,就能把额度、Key、模型选择都收拢到一个控制台里管。
1.1 voice_agent 不是直连音源的脚本
很多教程会把 OpenClaw 的 TTS 讲成「文本丢给 edge-tts 出 mp3」这样一条直线。实际上,你在会话里说「把这份文档转成有声书」或「用新闻男声朗读这条消息」,OpenClaw 需要先让大模型理解这句话,拆出意图,再去查 tts 配置里有哪些引擎可用,最后才调音源。也就是说,TTS 引擎只负责最后一步声音合成,理解、选型、编排这些「动脑子」的活儿全在大模型那边。
原文给了一张 TTS 引擎对比表,四种引擎各有侧重:Edge TTS 免费、50+ 音色,适合日常使用;OpenAI TTS 按字符计费,质量更稳定;ElevenLabs 有订阅额度,300+ 音色偏专业配音;NoizAI 支持本地音色克隆。但无论选哪一种,表格里那一列「建议场景」得由 voice_agent 根据用户指令去匹配,而不是写死在配置文件里。
1.2 长会话里每一步判断都在增加 Token 消耗
Agent / Harness 场景和单次调用最大的区别是:上下文会保留。你上午在会话里告诉 voice_agent「今天所有语音都用粤语小贝」,下午再说「把这篇新闻读出来」,它得结合历史消息才能明白「用粤语小贝」对应的音色 ID 是 zh-CN-liaoning-XiaobeiNeural,然后还要决定语速、停顿、输出格式。这些判断发生在一次长对话里,每次都要把相关上下文发给大模型,Token 自然越攒越多。
更隐蔽的消耗在 fallback_chain。原文的 voice-agent.yaml 配置了「edge-tts → openai-tts → elevenlabs」的降级链,表面看只是三个引擎排队,实际上每一步都由 LLM 判断当前请求该不该降级、降级后要不要改音色。你可以试一下:让 voice_agent 在 Edge TTS 超时的时候自动切到 openai-tts 并保留中文女声。听起来很顺理成章,但这条「顺理成章」是模型推理出来的,不是配置文件写死的。
1.3 结论:TTS 引擎不动,只换 provider
所以本文的做法是分层处理:TTS 引擎侧(edge-tts、openai-tts、elevenlabs、noizai)的配置文件全部保留,各自的 API Key 也保持原样;只把 voice-agent.yaml 里 provider 指向 TaoToken 的统一 API 通道。TaoToken 在这条链路里负责承载大模型调用,也就是 voice_agent 的「大脑」部分,它不参与声音合成。
这样改的好处是:你不用去折腾 Moonshot AI 的额度、换绑 Key、或者到处找模型 ID,所有大模型相关的配置从语音方案里剥离开。先去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 注册并创建 Key,后续每一步配置只用这一把 Key。
2. 准备材料:OpenClaw 本体、TTS 技能包、一把 AI Key
2.1 安装 OpenClaw 核心和 TTS 技能包
先按原文的步骤把 OpenClaw 装好。安装命令走官方脚本,装完确认版本号能正常输出:
curl -fsSL https://openclaw.ai/install.sh | bash
openclaw -v
版本号确认后,安装 TTS 相关技能包。原文这里给了三个包,分别对应 TTS 主引擎、Edge 免费音源、音色克隆能力:
clawhub install tts-engine
clawhub install edge-tts
clawhub install voice-clone
装完用 openclaw skills list | grep tts 检查技能是否被识别。看到 tts-engine 和 edge-tts 出现在列表里就说明技能层没问题,接下来才轮到配置层。
2.2 补装 Node.js 并单独验证 edge-tts
Edge TTS 依赖 Node.js 环境,macOS 上 brew install node,Linux 上 sudo apt install nodejs npm,Windows 直接去 nodejs.org 下载安装包。装好之后先绕过 OpenClaw,单独验证音源能通:
npx edge-tts --text "测试" --voice zh-CN-XiaoxiaoNeural --write-media test.mp3
如果这条命令成功生成 mp3,说明 TTS 引擎这条链路是通的。这一步很重要,它能帮你区分后面报错到底出在音源还是出在大模型通道。
2.3 去 TaoToken 控制台创建一把 Key
原文走到这一步是「配置 Moonshot AI 的 Key」,现在统一改成 TaoToken。打开官网完成注册后,进入控制台的 API Keys 页面新建一把 Key,拿到之后先放在一边,稍后填进 voice-agent.yaml。
同一时间,建议打开模型广场看一眼当前可用的模型 ID。不要凭记忆写模型名,不同时期广场上架的模型有差异,之后配置 voice_agent 时要以 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 模型广场当时列表为准。如果控制台有「用量」入口也可以顺便熟悉位置,验证阶段要回来看这一条调用是否成功计费。
3. TTS 引擎配置保持原样
3.1 edge-tts.yaml:免费音源不用填密钥
原文的免费方案是 edge-tts,配置文件在 ~/.openclaw/config/tts/edge-tts.yaml。这一份文件完全不用碰,里面的 api_key 本来就应该留空,因为 Edge TTS 走的是微软公开接口,不涉及大模型计费。典型的配置长这样:
tts_engine: "edge-tts"
enabled: true
provider: "Microsoft Edge"
api_key: ""
voice:
default: "zh-CN-XiaoxiaoNeural"
alternatives:
- "zh-CN-YunxiNeural"
- "zh-CN-YunjianNeural"
- "zh-CN-XiaoyiNeural"
audio:
format: "mp3"
bitrate: "128k"
sample_rate: "24000"
speech_settings:
rate: "+0%"
pitch: "+0Hz"
volume: "+0%"
注意 voice 列表里的音色 ID 不要翻译成中文描述,zh-CN-XiaoxiaoNeural 和「晓晓」是一一对应的,写错直接报音色不存在。想查完整中文音色列表,用 npx edge-tts --list-voices | grep zh-CN。
3.2 openai-tts / elevenlabs / noizai 也不用改
付费引擎的配置文件同样保留原样,各自的 Key 该填哪就填哪。比如 openai-tts.yaml 里的 api_key 填 OpenAI 的 Key,elevenlabs.yaml 里的 api_key 填 ElevenLabs 的 Key,noizai 的音色克隆参考音频路径也保持不动。
这里容易搞混的一点是:TaoToken 只接管 voice_agent 的大模型调用,不接管这些音源厂商的计费。也就是说,你的 ElevenLabs 订阅还得自己续,voice_agent 决定「这段文字用 elevenlabs 的 Rachel 音色」,实际合成时消耗的依然是 ElevenLabs 的额度。假如哪一天 ElevenLabs 的余量用完了,voice_agent 会通过 fallback_chain 自动落到下一个引擎,这个降级判断照旧由大模型完成。
4. voice-agent.yaml 里把 LLM provider 指到 TaoToken
4.1 对照原文找到 provider 字段
原文的主配置在 ~/.openclaw/config/agents/voice-agent.yaml,核心结构是声明一个 voice_agent,给它挂 TTS、STT、Voice Clone、Audio Processing 四类技能。原文里 provider 直接写成了字符串 "Moonshot AI",现在要换成 TaoToken 的统一 API 通道。
换法很直接,把 provider 改成一个带 base_url、api_key、model 的配置块:
agent:
name: "voice_agent"
provider:
base_url: "https://taotoken.net/api"
api_key: "YOUR_API_KEY"
model: "YOUR_MODEL_ID"
这里有一个必须强调的点:填进工具的 Base URL 是 https://taotoken.net/api,末尾不要加 /v1,也不要把网页地址 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 填进来。网页是给人注册和看用量用的,接口地址是给程序用的,两者不能混。
4.2 保留 skills 和 fallback_chain
provider 改完之后,agent 的技能列表和 TTS 配置不要动。完整的 voice-agent.yaml 大致是这样:
agent:
name: "voice_agent"
provider:
base_url: "https://taotoken.net/api"
api_key: "YOUR_API_KEY"
model: "YOUR_MODEL_ID"
skills:
- "TTS Engine"
- "STT Engine"
- "Voice Clone"
- "Audio Processing"
tts:
enabled: true
default_engine: "edge-tts"
fallback_chain:
- "edge-tts"
- "openai-tts"
- "elevenlabs"
auto_trigger:
enabled: true
conditions:
- "message_contains: '朗读'"
- "message_contains: '语音'"
- "user_request: audio"
output:
format: "mp3"
save_path: "~/openclaw/audio/"
send_to_chat: true
stt:
enabled: true
engine: "whisper"
language: "zh-CN"
YOUR_API_KEY 就是本文第 2.3 节在 TaoToken 控制台创建的那把 Key。YOUR_MODEL_ID 不要在文档里瞎填,打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 的模型广场,复制当时列出的可用模型 ID。日志里如果出现 model not found 或 404,十有八九是这一项填了不存在的模型名。
4.3 保存后重启生效
改完 YAML 记得重启 OpenClaw 服务,让它重新加载配置。如果你是在 VS Code 里直接编辑,保存后不一定自动生效。重启之后再打开控制台 http://127.0.0.1:18789 能看到 voice_agent 状态变为正常,才说明 provider 这段配置被成功解析。
如果这时发现控制台报 provider 连接错误,先检查 base_url 是不是写成了 https://taotoken.net/api/v1。这是最常见的低级错误,OpenClaw 自己会拼接路径,多一个 /v1 反而请求不到。
5. 一键验证:openclaw tts 跑通整条链路
5.1 先验证 TTS 引擎本身没问题
走到这一步不要直接跑 OpenClaw 的 TTS 命令,先把音源层单独测一遍:
npx edge-tts --text "你好" --voice zh-CN-XiaoxiaoNeural --write-media test.mp3
能生成 mp3 就说明 Edge TTS 本地依赖齐全,网络能连到微软语音服务。这一步失败的话,后面 OpenClaw 报错你也分不清是音源断了还是大模型通道断了。
5.2 跑 openclaw tts 让 voice_agent 走 TaoToken
音源没问题之后,执行:
openclaw tts '你好' --voice zh-CN-XiaoxiaoNeural
这个命令会触发 voice_agent:先由 TaoToken 上的大模型解析指令,确认默认引擎是 edge-tts,再调用 edge-tts 合成音频。命令正常结束时,控制台会给出 mp3 文件的保存路径,默认在 ~/openclaw/audio/ 下。播放能听到中文女声,说明整条链路已经通了。
如果想验证更复杂的编排,可以试着在会话里说「朗读这句话」。voice-agent.yaml 里的 auto_trigger 设了 message_contains: '朗读' 条件,智能体会自动把文本转成语音并发送到聊天窗口。这个触发判断同样由大模型完成,走的是 TaoToken 通道。
5.3 去 TaoToken 控制台核对该次调用
验证命令跑完之后,登录 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 的控制台,查看用量记录。正常情况能看到刚才那次 openclaw tts 触发的模型请求,消耗的 Token 数清晰可见。
这一步值得认真做:它能帮你确认 Key 没白配。如果命令成功了但控制台没有任何记录,说明 voice_agent 可能走了本地缓存或未正确加载 provider 配置,回到第 4.3 节重启服务再试。如果命令直接报鉴权错误,参考下一章的 401 排查。
6. 工作流和多工具编排里的 LLM 消耗点
6.1 tts-workflow.yaml 中每一步都需要智能体判断
原文给了一个完整的 TTS 工作流配置:文本输入 → 文本预处理 → TTS 转换 → 音频后处理 → 输出。很多人以为 workflow 是把这五步串起来的固定管线,其实每一步的参数都由 voice_agent 动态决定。比如 text_preprocess 这一步,要不要去掉特殊字符、要不要给长句补标点,得看文本内容;tts_convert 这一步选哪个引擎、哪个音色,得结合用户指令和 fallback_chain。这些决策都发生在 TaoToken 上的大模型调用里。
所以你看到的 workflow 只是骨架,真正干活的是 provider 背后的模型。这就是为什么本文只在 provider 层做切换,而不去动 ~/.openclaw/config/workflows/tts-workflow.yaml。
6.2 文档朗读和新闻播报:长会话烧 Token 的重灾区
文档朗读场景里,PDF 或 EPUB 转有声书需要先抽文本、按章节分割、再逐段合成。章节分割的阈值、每段 5000 字符的上限、长句要不要拆,这些规则虽然写在配置里,但「如何拆得适合朗读」的判断依然要过模型。新闻播报场景更明显:抓取新闻后要先摘要再语音化,摘要长度限制 1000 字符,具体保留哪几条新闻、怎么组织语言,全部靠大模型现算。
高频使用这些工作流的话,Token 消耗会涨得很快。TaoToken 控制台的作用在这里体现出来:不同工作流一天花了多少 Token,打开用量记录一眼就能对比,不用再猜是哪个环节在烧钱。
7. 常见问题:Edge TTS 连不上、LLM 401/404
7.1 Edge TTS 无响应
按原文的顺序排查:
ping speech.platform.bing.com
npm update edge-tts
npx edge-tts --text "测试" --voice zh-CN-XiaoxiaoNeural --write-media test.mp3
网络不通就换网络,包版本旧就升级。如果音源始终连不上,可以让 voice_agent 走 fallback_chain 切到 openai-tts 或 elevenlabs,切换动作本身由大模型完成,TaoToken 通道不参与音源连接。
7.2 401:TaoToken Key 没生效
OpenClaw 日志里出现 401,先确认 voice-agent.yaml 中的 api_key 是否完整复制了控制台创建的 Key。注意有些终端会把尾部空格算进去,建议贴完后在 YAML 里看一眼。还要确认这把 Key 确实是在 TaoToken 控制台创建的,不是旧项目遗留的失效 Key。改完配置记得重启 OpenClaw,让新 Key 重新加载。
7.3 404:模型 ID 与模型广场不一致
日志报 404 且提示 model not found,基本可以判断是 model 字段填错了。不要凭网上教程的记忆写模型 ID,打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 的模型广场,直接复制列表里的模型 ID。不同时期模型广场上架的模型会有变化,旧 ID 下架后继续用就会报 404。
7.4 Base URL 末尾多出 /v1 导致路径错误
这是一个看似不起眼但很常见的错误。某些 API 服务的 Base URL 标准写法带 /v1,但 TaoToken 的接口地址是 https://taotoken.net/api,OpenClaw 会在后面自动拼请求路径,多加一个 /v1 会让请求打到不存在的路径上,表现同样是 404。检查 voice-agent.yaml,确认 base_url 结尾是 /api,没有任何斜杠版本号。
配置全部保存并重启后,建议马上跑一次 openclaw tts '你好' --voice zh-CN-XiaoxiaoNeural 验证。确认控制台用量记录里有这次请求后,再开始批量跑文档朗读或新闻播报。如果接下来要长期让 voice_agent 处理长任务,可以在 Coding Plan 里看套餐是否匹配你的消耗速度;想先快速确认模型效果,直接在 模型对话 里用同一把 Key 发一条消息,看返回是否稳定;Key 不够用或需要分开管理多个项目时,随时去 控制台 API Keys 新建。
更多推荐
所有评论(0)