--- summary: "模型发出的 TTS 指令、/tts 斜线命令和每用户首选项" title: "文本转语音命令和指令" read_when: - "您希望模型改变一次回复的声音或速度" - "您需要 /tts 命令界面" - "您正在寻找本地 TTS 首选项的存储位置" --- ## 模型驱动的指令 默认情况下,助手**可以**发出 `[[tts:...]]` 指令来为单条回复覆盖声音、模型或语速,并可选地使用 `[[tts:text]]...[[/tts:text]]` 块来加入仅应出现在音频中的表现性提示: ```text Here you go. [[tts:speakerVoiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]] [[tts:text]](laughs) Read the song once more.[[/tts:text]] ``` 当 `tts.auto` 为 `"tagged"` 时,**需要使用指令**才能触发音频。流式块传递会在通道看到可见文本之前移除其中的指令,即使这些指令被拆分在相邻的多个块中。 回复可以完全由非空 `[[tts:text]]...[[/tts:text]]` 块组成。不需要可见的文本前缀,包括当模型也返回推理时。 除非 `modelOverrides.allowProvider: true`,否则 `provider=...` 将被忽略。当回复声明 `provider=...` 时,该指令中的其他键仅由该提供者解析;不支持的键将被删除并报告为 TTS 指令警告。 **可用的指令键:** - `provider`(注册提供商 ID;需要 `allowProvider: true`) - `speakerVoice` / `speakerVoiceId`(旧别名:`voice`、`voiceName`、`voice_name`、`google_voice`、`voiceId`) - `model` / `google_model` - `stability`, `similarityBoost`, `style`, `speed`, `useSpeakerBoost` - `vol` / `volume`(MiniMax 音量,`(0, 10]`) - `pitch`(MiniMax 整数音高,−12 到 12;小数值会被截断) - `emotion`(Volcengine 情绪标签) - `applyTextNormalization` (`auto|on|off`) - `languageCode` (ISO 639-1) - `seed` **完全禁用模型覆盖:** ```json5 { tts: { modelOverrides: { enabled: false } } } ``` **允许切换提供商,同时保持其他参数可配置:** ```json5 { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false } } } ``` ## 斜杠命令 单个命令 `/tts`。在 Discord 上,OpenClaw 还会注册 `/voice`,因为 `/tts` 是内置的 Discord 命令——文本 `/tts ...` 仍然可用。 ```text /tts off | on | status /tts chat on | off | default /tts latest /tts provider /tts persona | off /tts limit /tts summary off /tts audio ``` 命令需要授权发送者(适用 allowlist/owner 规则),并且必须启用 `commands.text` 或原生命令注册。 行为说明: - `/tts on` 会将本地 TTS 偏好写为 `always`;`/tts off` 会将其写为 `off`。 - `/tts chat on|off|default` 会为当前聊天写入一个会话作用域的自动 TTS 覆盖设置。 - `/tts persona ` 会写入本地 persona 偏好;`/tts persona off` 会清除它。 - `/tts latest` 会从当前会话记录中读取最新的助手回复,并将其作为音频发送一次。它只会在会话条目上存储该回复的哈希值,以抑制重复的语音发送。 - `/tts audio` 会生成一次性的音频回复(**不会**切换 TTS 开关)。 - `/tts limit ` 接受 **100–4096**(4096 是 Telegram caption/message 最大值);超出该范围的值将被拒绝。 - `limit` 和 `summary` 存储在 **本地偏好** 中,而不是主配置中。 - `/tts status` 会包含最近一次尝试的回退诊断信息——`Fallback: -> `、`Attempts: ...`,以及每次尝试的详细信息(`provider:outcome(reasonCode) latency`)。 - 当 TTS 启用时,`/status` 会显示当前 TTS 模式,以及已配置的 provider、model、voice 和已清理的自定义端点元数据。 ## 每用户偏好 Slash 命令会将本地覆盖写入 TTS 偏好路径。默认值为 `~/.openclaw/settings/tts.json`;可使用 `OPENCLAW_TTS_PREFS` 进行覆盖。Doctor 会将已弃用的全局 `tts.prefsPath` 值迁移到共享机器状态中。 高级多代理设置在代理有意使用独立偏好存储时,仍然可以设置 `agents.entries..tts.prefsPath`。 | 存储字段 | 作用 | | ------------ | -------------------------------------------------------------------------------- | | `auto` | 本地 auto-TTS 覆盖(`always`、`off` 等) | | `provider` | 本地主提供方覆盖 | | `persona` | 本地 persona 覆盖 | | `maxLength` | Summary/truncation 阈值(默认 `1500` 字符,`/tts limit` 范围 100–4096) | | `summarize` | 摘要开关(默认 `true`) | 这些设置会覆盖该主机上来自 `tts` 以及当前激活的 `agents.entries.*.tts` 区块的有效配置。