Sag:ElevenLabs 語音合成 Skill,帶 Mac 風格 say 交互

前言

很多 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 技能卡上明確寫出的能力。

  1. Mac 風格的 say 交互:文本直接作爲位置參數傳入,輸出本地播放。
  2. 顯式指定音色:-v / --voice 傳音色 ID 或音色別名,另有 sag voices 列出可用音色。
  3. 文件輸出:-o 把音頻寫到指定路徑(mp3),便於作爲附件返回。
  4. 提示詞指南:sag prompting 輸出模型專屬的提示技巧。
  5. 發音與播報規則內置:重拼(respell)、數字/單位/URL 的規範化、語言傾向開關都由命令行參數控制,不需要在正文裏手寫規則。
  6. 模型切換:默認 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 加一條穩定的「說話」能力,且不想自己維護調用腳本和調參邏輯。也適合需要把語音回覆作爲附件回傳給用戶的聊天類場景。

限制和坑:

  1. 必須提供 API key,技能卡的 tag 是 requires_api_key=true。沒有 key 時命令不會成功,部署前先檢查環境變量是否注入到 Agent 實際運行的進程裏。
  2. 模型版本決定標籤語法。v3 不支持 SSML <break>,v2/v2.5 不支持通過 sag 使用 <phoneme>。從默認檔切到 stable 或 fast 時,正文裏的停頓寫法要跟着改。
  3. 長輸出前先確認音色和說話人。音色 ID 是環境變量,一旦設錯,批量生成的音頻會全部落在錯誤音色上,返工成本高於一開始就覈對一次。
  4. --normalize 可能破壞專名。技能卡明確說可以 off,所以遇到產品名、人名讀錯時,先關規範化再排查重拼。
  5. 技能卡標註 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

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜