Files
openclaw/docs/zh-CN/tts.md
Josh Palmer a3ec2d0734 Docs: update zh-CN translations and pipeline
What:
- update zh-CN glossary, TM, and translator prompt
- regenerate zh-CN docs and apply targeted fixes
- add zh-CN AGENTS pipeline guidance

Why:
- address terminology/spacing feedback from #6995

Tests:
- pnpm build && pnpm check && pnpm test
2026-02-03 13:23:00 -08:00

12 KiB
Raw Permalink Blame History

read_when, summary, title, x-i18n
read_when summary title x-i18n
为回复启用文本转语音
配置 TTS 提供商或限制
使用 /tts 命令
出站回复的文本转语音TTS 文本转语音
generated_at model provider source_hash source_path workflow
2026-02-03T10:13:55Z claude-opus-4-5 pi 070ff0cc8592f64c6c9e4ddaddc7e8fba82f0692ceded6fe833ec9ba5b61e6fb tts.md 15

文本转语音TTS

OpenClaw 可以使用 ElevenLabs、OpenAI 或 Edge TTS 将出站回复转换为音频。它可以在任何 OpenClaw 能发送音频的地方工作Telegram 会显示圆形语音消息气泡。

支持的服务

  • ElevenLabs(主要或备用提供商)
  • OpenAI(主要或备用提供商;也用于摘要)
  • Edge TTS(主要或备用提供商;使用 node-edge-tts,无 API 密钥时为默认)

Edge TTS 注意事项

Edge TTS 通过 node-edge-tts 库使用 Microsoft Edge 的在线神经网络 TTS 服务。它是托管服务(非本地),使用 Microsoft 的端点,不需要 API 密钥。node-edge-tts 公开了语音配置选项和输出格式,但并非所有选项都被 Edge 服务支持。citeturn2search0

由于 Edge TTS 是一个没有公布 SLA 或配额的公共 Web 服务,请将其视为尽力而为。如果你需要有保证的限制和支持,请使用 OpenAI 或 ElevenLabs。Microsoft 的语音 REST API 记录了每个请求 10 分钟的音频限制Edge TTS 没有公布限制所以假设类似或更低的限制。citeturn0search3

可选密钥

如果你想使用 OpenAI 或 ElevenLabs

  • ELEVENLABS_API_KEY(或 XI_API_KEY
  • OPENAI_API_KEY

Edge TTS 需要 API 密钥。如果没有找到 API 密钥OpenClaw 默认使用 Edge TTS除非通过 messages.tts.edge.enabled=false 禁用)。

如果配置了多个提供商,首先使用选定的提供商,其他作为备用选项。自动摘要使用配置的 summaryModel(或 agents.defaults.model.primary),所以如果你启用摘要,该提供商也必须经过认证。

服务链接

默认启用吗?

不是。自动 TTS 默认关闭。在配置中使用 messages.tts.auto 或在每个会话中使用 /tts always(别名:/tts on)启用它。

一旦 TTS 开启Edge TTS 默认启用的,并在没有 OpenAI 或 ElevenLabs API 密钥时自动使用。

配置

TTS 配置位于 openclaw.json 中的 messages.tts 下。完整 schema 在 Gateway 网关配置中。

最小配置(启用 + 提供商)

{
  messages: {
    tts: {
      auto: "always",
      provider: "elevenlabs",
    },
  },
}

OpenAI 主要ElevenLabs 备用

{
  messages: {
    tts: {
      auto: "always",
      provider: "openai",
      summaryModel: "openai/gpt-4.1-mini",
      modelOverrides: {
        enabled: true,
      },
      openai: {
        apiKey: "openai_api_key",
        model: "gpt-4o-mini-tts",
        voice: "alloy",
      },
      elevenlabs: {
        apiKey: "elevenlabs_api_key",
        baseUrl: "https://api.elevenlabs.io",
        voiceId: "voice_id",
        modelId: "eleven_multilingual_v2",
        seed: 42,
        applyTextNormalization: "auto",
        languageCode: "en",
        voiceSettings: {
          stability: 0.5,
          similarityBoost: 0.75,
          style: 0.0,
          useSpeakerBoost: true,
          speed: 1.0,
        },
      },
    },
  },
}

Edge TTS 主要(无 API 密钥)

{
  messages: {
    tts: {
      auto: "always",
      provider: "edge",
      edge: {
        enabled: true,
        voice: "en-US-MichelleNeural",
        lang: "en-US",
        outputFormat: "audio-24khz-48kbitrate-mono-mp3",
        rate: "+10%",
        pitch: "-5%",
      },
    },
  },
}

禁用 Edge TTS

{
  messages: {
    tts: {
      edge: {
        enabled: false,
      },
    },
  },
}

自定义限制 + 偏好路径

{
  messages: {
    tts: {
      auto: "always",
      maxTextLength: 4000,
      timeoutMs: 30000,
      prefsPath: "~/.openclaw/settings/tts.json",
    },
  },
}

仅在收到语音消息后用音频回复

{
  messages: {
    tts: {
      auto: "inbound",
    },
  },
}

禁用长回复的自动摘要

{
  messages: {
    tts: {
      auto: "always",
    },
  },
}

然后运行:

/tts summary off

字段说明

  • auto:自动 TTS 模式(offalwaysinboundtagged)。
    • inbound 仅在收到语音消息后发送音频。
    • tagged 仅在回复包含 [[tts]] 标签时发送音频。
  • enabled旧版开关doctor 将其迁移到 auto)。
  • mode"final"(默认)或 "all"(包括工具/分块回复)。
  • provider"elevenlabs""openai""edge"(自动备用)。
  • 如果 provider 未设置OpenClaw 优先选择 openai(如果有密钥),然后是 elevenlabs(如果有密钥),否则是 edge
  • summaryModel:用于自动摘要的可选廉价模型;默认为 agents.defaults.model.primary
    • 接受 provider/model 或配置的模型别名。
  • modelOverrides:允许模型发出 TTS 指令(默认开启)。
  • maxTextLengthTTS 输入的硬性上限(字符)。超出时 /tts audio 会失败。
  • timeoutMs:请求超时(毫秒)。
  • prefsPath:覆盖本地偏好 JSON 路径(提供商/限制/摘要)。
  • apiKey 值回退到环境变量(ELEVENLABS_API_KEY/XI_API_KEYOPENAI_API_KEY)。
  • elevenlabs.baseUrl:覆盖 ElevenLabs API 基础 URL。
  • elevenlabs.voiceSettings
    • stabilitysimilarityBooststyle0..1
    • useSpeakerBoosttrue|false
    • speed0.5..2.01.0 = 正常)
  • elevenlabs.applyTextNormalizationauto|on|off
  • elevenlabs.languageCode2 字母 ISO 639-1例如 ende
  • elevenlabs.seed:整数 0..4294967295(尽力确定性)
  • edge.enabled:允许 Edge TTS 使用(默认 true;无 API 密钥)。
  • edge.voiceEdge 神经网络语音名称(例如 en-US-MichelleNeural)。
  • edge.lang:语言代码(例如 en-US)。
  • edge.outputFormatEdge 输出格式(例如 audio-24khz-48kbitrate-mono-mp3)。
    • 有效值参见 Microsoft 语音输出格式;并非所有格式都被 Edge 支持。
  • edge.rate / edge.pitch / edge.volume:百分比字符串(例如 +10%-5%)。
  • edge.saveSubtitles:在音频文件旁边写入 JSON 字幕。
  • edge.proxyEdge TTS 请求的代理 URL。
  • edge.timeoutMs:请求超时覆盖(毫秒)。

模型驱动覆盖(默认开启)

默认情况下,模型可以为单个回复发出 TTS 指令。当 messages.tts.autotagged 时,需要这些指令来触发音频。

启用后,模型可以发出 [[tts:...]] 指令来覆盖单个回复的语音,加上可选的 [[tts:text]]...[[/tts:text]] 块来提供表达性标签(笑声、唱歌提示等),这些仅应出现在音频中。

示例回复负载:

Here you go.

[[tts:provider=elevenlabs voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]

可用指令键(启用时):

  • provideropenai | elevenlabs | edge
  • voiceOpenAI 语音)或 voiceIdElevenLabs
  • modelOpenAI TTS 模型或 ElevenLabs 模型 ID
  • stabilitysimilarityBooststylespeeduseSpeakerBoost
  • applyTextNormalizationauto|on|off
  • languageCodeISO 639-1
  • seed

禁用所有模型覆盖:

{
  messages: {
    tts: {
      modelOverrides: {
        enabled: false,
      },
    },
  },
}

可选白名单(禁用特定覆盖同时保持标签启用):

{
  messages: {
    tts: {
      modelOverrides: {
        enabled: true,
        allowProvider: false,
        allowSeed: false,
      },
    },
  },
}

单用户偏好

斜杠命令将本地覆盖写入 prefsPath(默认:~/.openclaw/settings/tts.json,可通过 OPENCLAW_TTS_PREFSmessages.tts.prefsPath 覆盖)。

存储的字段:

  • enabled
  • provider
  • maxLength(摘要阈值;默认 1500 字符)
  • summarize(默认 true

这些为该主机覆盖 messages.tts.*

输出格式(固定)

  • TelegramOpus 语音消息ElevenLabs 的 opus_48000_64OpenAI 的 opus)。
    • 48kHz / 64kbps 是语音消息的良好权衡,圆形气泡所必需。
  • 其他渠道MP3ElevenLabs 的 mp3_44100_128OpenAI 的 mp3)。
    • 44.1kHz / 128kbps 是语音清晰度的默认平衡。
  • Edge TTS:使用 edge.outputFormat(默认 audio-24khz-48kbitrate-mono-mp3)。
    • node-edge-tts 接受 outputFormat,但并非所有格式都可从 Edge 服务获得。citeturn2search0
    • 输出格式值遵循 Microsoft 语音输出格式(包括 Ogg/WebM Opus。citeturn1search0
    • Telegram sendVoice 接受 OGG/MP3/M4A如果你需要有保证的 Opus 语音消息,请使用 OpenAI/ElevenLabs。citeturn1search1
    • 如果配置的 Edge 输出格式失败OpenClaw 会使用 MP3 重试。

OpenAI/ElevenLabs 格式是固定的Telegram 期望 Opus 以获得语音消息用户体验。

自动 TTS 行为

启用后OpenClaw

  • 如果回复已包含媒体或 MEDIA: 指令,则跳过 TTS。
  • 跳过非常短的回复(< 10 字符)。
  • 启用时使用 agents.defaults.model.primary(或 summaryModel)对长回复进行摘要。
  • 将生成的音频附加到回复中。

如果回复超过 maxLength 且摘要关闭(或没有摘要模型的 API 密钥),则跳过音频并发送正常的文本回复。

流程图

回复 -> TTS 启用?
  否  -> 发送文本
  是  -> 有媒体 / MEDIA: / 太短?
          是 -> 发送文本
          否 -> 长度 > 限制?
                   否  -> TTS -> 附加音频
                   是  -> 摘要启用?
                            否  -> 发送文本
                            是  -> 摘要summaryModel 或 agents.defaults.model.primary
                                      -> TTS -> 附加音频

斜杠命令用法

只有一个命令:/tts。参见斜杠命令了解启用详情。

Discord 注意:/tts 是 Discord 的内置命令,所以 OpenClaw 在那里注册 /voice 作为原生命令。文本 /tts ... 仍然有效。

/tts off
/tts always
/tts inbound
/tts tagged
/tts status
/tts provider openai
/tts limit 2000
/tts summary off
/tts audio Hello from OpenClaw

注意事项:

  • 命令需要授权发送者(白名单/所有者规则仍然适用)。
  • 必须启用 commands.text 或原生命令注册。
  • off|always|inbound|tagged 是单会话开关(/tts on/tts always 的别名)。
  • limitsummary 存储在本地偏好中,不在主配置中。
  • /tts audio 生成一次性音频回复(不会开启 TTS

智能体工具

tts 工具将文本转换为语音并返回 MEDIA: 路径。当结果与 Telegram 兼容时,工具包含 [[audio_as_voice]],以便 Telegram 发送语音气泡。

Gateway 网关 RPC

Gateway 网关方法:

  • tts.status
  • tts.enable
  • tts.disable
  • tts.convert
  • tts.setProvider
  • tts.providers