前言¶
很多 Agent 接到「把這句話念出來」的需求時,只能先調 OpenAI 或瀏覽器 TTS,或者去寫一段幾十行的 ElevenLabs 調用腳本,再自己處理音頻落盤。Sag 把這件事壓縮成一條命令:sag "Hello there",本地播放,參數用開關控制,不寫腳本。
下面介紹這個 Skill 是什麼、怎麼裝、怎麼用,以及它把哪些調參細節固化成了約定。
這是什麼¶
Sag 是一個面向創意、語音與多媒體場景的 text-to-speech synthesis Skill,基於通用 SKILL.md 格式。一句話定位:用 ElevenLabs 做語音合成,交互風格照搬 macOS 的 say 命令。
- 出品/維護:steipete(Peter Steinberger),發佈在 ClawHub
- 來源:clawhub,座標
@clawhub_steipete/sag - 版本:1.0.0,許可證 MIT-0
- 分類:design-media(ClawHub 頁面歸在 Creative / #text-to-speech)
- Skill 線索中的中文名是「語音合成(sag)」,官方地址
https://api.skillhub.cn/indiv-seafish/sag,對應 SkillHub 頁面爲https://www.skillhub.cn/skills/clawhub_steipete/sag
它解決的問題不是「能不能合成語音」,而是把模型選擇、發音矯正、停頓和語氣標籤這些每次都要重新摸索的參數,變成穩定可複用的命令行約定。
核心功能¶
只列 ClawHub 技能卡上明確寫出的能力。
- Mac 風格的 say 交互:文本直接作爲位置參數傳入,輸出本地播放。
- 顯式指定音色:
-v/--voice傳音色 ID 或音色別名,另有sag voices列出可用音色。 - 文件輸出:
-o把音頻寫到指定路徑(mp3),便於作爲附件返回。 - 提示詞指南:
sag prompting輸出模型專屬的提示技巧。 - 發音與播報規則內置:重拼(respell)、數字/單位/URL 的規範化、語言傾向開關都由命令行參數控制,不需要在正文裏手寫規則。
- 模型切換:默認
eleven_v3(expressive),另有 stable 和 fast 檔位。
安裝與啓用¶
Skill 通過 OpenClaw 的 CLI 安裝,不需要手工 clone 倉庫。
openclaw skills install @steipete/sag
安裝前需要先準備好 API key。技能卡列出兩個環境變量:
# 推薦
export ELEVENLABS_API_KEY=sk_xxx
# CLI 也支持
export SAG_API_KEY=sk_xxx
音色默認值同樣走環境變量:
export ELEVENLABS_VOICE_ID=lj2rcrvANS3gaWWnczSX
# 或 SAG_VOICE_ID
技能卡上 ELEVENLABS_VOICE_ID 與 SAG_VOICE_ID 並列列出;ClawHub 示例裏 Clawd 的默認音色 ID 就是 lj2rcrvANS3gaWWnczSX,用 -v Clawd 也可以。
說明:資料裏只給出 OpenClaw CLI 這一種安裝方式,沒有提到 Cursor、Codex CLI 或 Claude Code 的差異化安裝步驟,這裏不做推測。
典型用法¶
下面幾條都來自技能卡的 Quick start 段落。
最簡單的一條,合成並本地播放:
sag "Hello there"
指定音色,用別名更直觀:
sag speak -v "Roger" "Hello"
查看可用音色、查看提示技巧:
sag voices
sag prompting
生成音頻文件並作爲回覆附件返回。技能卡給出的是給 Peter 做語音回覆的例子:
sag -v Clawd -o /tmp/voice-reply.mp3 "Your message here"
# 然後在同一條回覆裏附上:
# MEDIA:/tmp/voice-reply.mp3
技能卡對不同人設給了建議:crazy scientist 用 [excited] 標籤加短停頓並變換強度;calm 用 [whispers] 或放慢節奏;dramatic 少量使用 [sings] 或 [shouts]。
發音、停頓與語氣標籤¶
這一節容易踩坑,單獨說。技能卡給的規則按模型版本區分。
發音矯正,第一優先級是重拼:
"key-note"、加連字符、調整大小寫
數字、單位和 URL 走規範化開關:
# 默認 auto;如果規範化反而破壞了專名,可以關掉
sag --normalize auto "..."
語言傾向用來指導規範化方向:
sag --lang en|de|fr|... "..."
停頓標籤。eleven_v3 不支持 SSML <break>,要用方括號標籤:
[pause]、[short pause]、[long pause]
eleven_multilingual_v2 / eleven_flash_v2_5 支持 SSML <break time="1.5s" />,但 <phoneme> 在 sag 裏沒有暴露。
語氣標籤寫在行首,v3 可用:
[whispers]、[shouts]、[sings]
[laughs]、[starts laughing]、[sighs]、[exhales]
[sarcastic]、[curious]、[excited]、[crying]、[mischievously]
技能卡給出的完整示例:
sag "[whispers] keep this quiet. [short pause] ok?"
注意:標籤必須放在行首,不能夾在句子中間;這是 v3 的約束,換模型後要用 SSML 寫法。
模型選擇¶
技能卡列出三檔,參數寫全:
- 默認:
eleven_v3(expressive) - Stable:
eleven_multilingual_v2 - Fast:
eleven_flash_v2_5
需要穩定的多語種輸出時換 stable,需要低延遲時換 fast,默認檔位表達力最強但 SSML 能力受限。換模型前先確認停頓和語氣標籤的寫法是否仍然有效。
適用場景與注意¶
適合的人:已經在用 OpenClaw / ClawHub 生態的開發者,需要給 Agent 加一條穩定的「說話」能力,且不想自己維護調用腳本和調參邏輯。也適合需要把語音回覆作爲附件回傳給用戶的聊天類場景。
限制和坑:
- 必須提供 API key,技能卡的 tag 是
requires_api_key=true。沒有 key 時命令不會成功,部署前先檢查環境變量是否注入到 Agent 實際運行的進程裏。 - 模型版本決定標籤語法。v3 不支持 SSML
<break>,v2/v2.5 不支持通過 sag 使用<phoneme>。從默認檔切到 stable 或 fast 時,正文裏的停頓寫法要跟着改。 - 長輸出前先確認音色和說話人。音色 ID 是環境變量,一旦設錯,批量生成的音頻會全部落在錯誤音色上,返工成本高於一開始就覈對一次。
--normalize可能破壞專名。技能卡明確說可以off,所以遇到產品名、人名讀錯時,先關規範化再排查重拼。- 技能卡標註 Last updated 5mo ago,Security audit 爲 Pass,許可證 MIT-0。功能細節以當前技能卡爲準。
結尾¶
Sag 的價值在於把 ElevenLabs TTS 的一次調用變成一條帶默認值的命令,同時把發音、停頓、語氣這些最容易反覆試錯的地方固化成文檔。如果你已經在 ClawHub 生態裏,裝一條命令就能用;如果不在,它的價值就只是把同樣的調用封裝得更順手。
官方地址:https://api.skillhub.cn/indiv-seafish/sag
技能卡:https://clawhub.ai/steipete/sag