diff --git a/docs/zh-CN/providers/google.md b/docs/zh-CN/providers/google.md index 3ca700df1..d4a3cf364 100644 --- a/docs/zh-CN/providers/google.md +++ b/docs/zh-CN/providers/google.md @@ -2,20 +2,20 @@ read_when: - 你想在 OpenClaw 中使用 Google Gemini 模型 - 你需要 API 密钥或 OAuth 认证流程 -summary: Google Gemini 设置(API 密钥 + OAuth、图像生成、媒体理解、网络搜索) +summary: Google Gemini 设置(API 密钥 + OAuth、图像生成、媒体理解、TTS、Web 搜索) title: Google(Gemini) x-i18n: - generated_at: "2026-04-12T10:03:27Z" + generated_at: "2026-04-16T06:26:12Z" model: gpt-5.4 provider: openai - source_hash: 64b848add89061b208a5d6b19d206c433cace5216a0ca4b63d56496aecbde452 + source_hash: ec2d62855f5e80efda758aad71bcaa95c38b1e41761fa1100d47a06c62881419 source_path: providers/google.md workflow: 15 --- # Google(Gemini) -Google 插件通过 Google AI Studio 提供对 Gemini 模型的访问,以及通过 Gemini Grounding 提供图像生成、媒体理解(图像/音频/视频)和网络搜索。 +Google 插件通过 Google AI Studio 提供对 Gemini 模型的访问,同时支持通过 Gemini Grounding 实现图像生成、媒体理解(图像/音频/视频)、文本转语音和 Web 搜索。 - 提供商:`google` - 认证:`GEMINI_API_KEY` 或 `GOOGLE_API_KEY` @@ -24,10 +24,10 @@ Google 插件通过 Google AI Studio 提供对 Gemini 模型的访问,以及 ## 入门指南 -选择你偏好的认证方式,并按照设置步骤操作。 +选择你偏好的认证方式,并按照设置步骤进行操作。 - + **最适合:** 通过 Google AI Studio 进行标准的 Gemini API 访问。 @@ -36,7 +36,7 @@ Google 插件通过 Google AI Studio 提供对 Gemini 模型的访问,以及 openclaw onboard --auth-choice gemini-api-key ``` - 或直接传入密钥: + 或者直接传入密钥: ```bash openclaw onboard --non-interactive \ @@ -64,13 +64,13 @@ Google 插件通过 Google AI Studio 提供对 Gemini 模型的访问,以及 - 环境变量 `GEMINI_API_KEY` 和 `GOOGLE_API_KEY` 都可接受。使用你已经配置好的那个即可。 + 环境变量 `GEMINI_API_KEY` 和 `GOOGLE_API_KEY` 都受支持。使用你已经配置好的那个即可。 - - **最适合:** 通过 PKCE OAuth 复用已有的 Gemini CLI 登录,而不是单独使用 API 密钥。 + + **最适合:** 通过 PKCE OAuth 复用现有的 Gemini CLI 登录,而不是使用单独的 API 密钥。 `google-gemini-cli` 提供商是非官方集成。一些用户报告称,以这种方式使用 OAuth 时会遇到账户限制。请自行承担使用风险。 @@ -78,13 +78,13 @@ Google 插件通过 Google AI Studio 提供对 Gemini 模型的访问,以及 - 本地 `gemini` 命令必须可在 `PATH` 上使用。 + 本地 `gemini` 命令必须在 `PATH` 中可用。 ```bash # Homebrew brew install gemini-cli - # or npm + # 或 npm npm install -g @google/gemini-cli ``` @@ -113,14 +113,14 @@ Google 插件通过 Google AI Studio 提供对 Gemini 模型的访问,以及 (或使用 `GEMINI_CLI_*` 变体。) - 如果 Gemini CLI OAuth 请求在登录后失败,请在 Gateway 网关主机上设置 `GOOGLE_CLOUD_PROJECT` 或 `GOOGLE_CLOUD_PROJECT_ID`,然后重试。 + 如果在登录后 Gemini CLI OAuth 请求失败,请在 Gateway 网关主机上设置 `GOOGLE_CLOUD_PROJECT` 或 `GOOGLE_CLOUD_PROJECT_ID`,然后重试。 - 如果在浏览器流程开始前登录就失败,请确认本地 `gemini` 命令已安装并且位于 `PATH` 上。 + 如果在浏览器流程启动前登录就失败,请确认本地 `gemini` 命令已安装并且位于 `PATH` 中。 - 仅支持 OAuth 的 `google-gemini-cli` 提供商是一个独立的文本推理接口。图像生成、媒体理解和 Gemini Grounding 仍然使用 `google` 提供商 id。 + 仅限 OAuth 的 `google-gemini-cli` 提供商是一个独立的文本推理接口。图像生成、媒体理解和 Gemini Grounding 仍然使用 `google` 提供商 id。 @@ -132,15 +132,16 @@ Google 插件通过 Google AI Studio 提供对 Gemini 模型的访问,以及 | 聊天补全 | 是 | | 图像生成 | 是 | | 音乐生成 | 是 | +| 文本转语音 | 是 | | 图像理解 | 是 | -| 音频转录 | 是 | +| 音频转写 | 是 | | 视频理解 | 是 | -| 网络搜索(Grounding) | 是 | +| Web 搜索(Grounding) | 是 | | 思考/推理 | 是(Gemini 3.1+) | | Gemma 4 模型 | 是 | -Gemma 4 模型(例如 `gemma-4-26b-a4b-it`)支持思考模式。OpenClaw 会将 `thinkingBudget` 重写为 Google 支持的 `thinkingLevel`,以适配 Gemma 4。将 thinking 设置为 `off` 会保持禁用思考,而不是映射为 `MINIMAL`。 +Gemma 4 模型(例如 `gemma-4-26b-a4b-it`)支持思考模式。OpenClaw 会将 `thinkingBudget` 重写为 Google 支持的 `thinkingLevel`,用于 Gemma 4。将 thinking 设置为 `off` 会保持思考关闭,而不是映射到 `MINIMAL`。 ## 图像生成 @@ -167,12 +168,12 @@ Gemma 4 模型(例如 `gemma-4-26b-a4b-it`)支持思考模式。OpenClaw 会 ``` -有关共享工具参数、提供商选择和故障切换行为,请参阅 [Image Generation](/zh-CN/tools/image-generation)。 +参见 [图像生成](/zh-CN/tools/image-generation),了解共享工具参数、提供商选择和故障转移行为。 ## 视频生成 -内置的 `google` 插件还会通过共享的 `video_generate` 工具注册视频生成功能。 +内置的 `google` 插件还通过共享的 `video_generate` 工具注册了视频生成功能。 - 默认视频模型:`google/veo-3.1-fast-generate-preview` - 模式:文生视频、图生视频,以及单视频参考流程 @@ -194,17 +195,17 @@ Gemma 4 模型(例如 `gemma-4-26b-a4b-it`)支持思考模式。OpenClaw 会 ``` -有关共享工具参数、提供商选择和故障切换行为,请参阅 [Video Generation](/zh-CN/tools/video-generation)。 +参见 [视频生成](/zh-CN/tools/video-generation),了解共享工具参数、提供商选择和故障转移行为。 ## 音乐生成 -内置的 `google` 插件还会通过共享的 `music_generate` 工具注册音乐生成功能。 +内置的 `google` 插件还通过共享的 `music_generate` 工具注册了音乐生成功能。 - 默认音乐模型:`google/lyria-3-clip-preview` - 也支持 `google/lyria-3-pro-preview` - 提示词控制:`lyrics` 和 `instrumental` -- 输出格式:默认 `mp3`,在 `google/lyria-3-pro-preview` 上还支持 `wav` +- 输出格式:默认 `mp3`,另外在 `google/lyria-3-pro-preview` 上支持 `wav` - 参考输入:最多 10 张图像 - 基于会话的运行会通过共享的任务/状态流程分离执行,包括 `action: "status"` @@ -223,19 +224,59 @@ Gemma 4 模型(例如 `gemma-4-26b-a4b-it`)支持思考模式。OpenClaw 会 ``` -有关共享工具参数、提供商选择和故障切换行为,请参阅 [Music Generation](/zh-CN/tools/music-generation)。 +参见 [音乐生成](/zh-CN/tools/music-generation),了解共享工具参数、提供商选择和故障转移行为。 + + +## 文本转语音 + +内置的 `google` 语音提供商使用 Gemini API 的 TTS 路径和 `gemini-3.1-flash-tts-preview`。 + +- 默认语音:`Kore` +- 认证:`messages.tts.providers.google.apiKey`、`models.providers.google.apiKey`、`GEMINI_API_KEY` 或 `GOOGLE_API_KEY` +- 输出:常规 TTS 附件使用 WAV,Talk/电话场景使用 PCM +- 原生语音便笺输出:此 Gemini API 路径不支持,因为 API 返回的是 PCM 而不是 Opus + +要将 Google 用作默认 TTS 提供商: + +```json5 +{ + messages: { + tts: { + auto: "always", + provider: "google", + providers: { + google: { + model: "gemini-3.1-flash-tts-preview", + voiceName: "Kore", + }, + }, + }, + }, +} +``` + +Gemini API TTS 支持在文本中使用富表现力的方括号音频标签,例如 `[whispers]` 或 `[laughs]`。如果你想让这些标签不出现在可见的聊天回复中,但仍发送给 TTS,请将它们放在 `[[tts:text]]...[[/tts:text]]` 块内: + +```text +Here is the clean reply text. + +[[tts:text]][whispers] Here is the spoken version.[[/tts:text]] +``` + + +限制为 Gemini API 的 Google Cloud Console API 密钥可用于此提供商。这不是单独的 Cloud Text-to-Speech API 路径。 ## 高级配置 - 对于直接的 Gemini API 运行(`api: "google-generative-ai"`),OpenClaw 会将已配置的 `cachedContent` 句柄透传给 Gemini 请求。 + 对于直接的 Gemini API 运行(`api: "google-generative-ai"`),OpenClaw 会将配置好的 `cachedContent` 句柄传递给 Gemini 请求。 - - 可使用 `cachedContent` 或旧版 `cached_content` 配置按模型或全局参数 - - 如果两者同时存在,`cachedContent` 优先 + - 使用 `cachedContent` 或旧版 `cached_content`,按模型或全局配置参数 + - 如果两者都存在,则 `cachedContent` 优先 - 示例值:`cachedContents/prebuilt-context` - - Gemini 的缓存命中用量会从上游的 `cachedContentTokenCount` 规范化为 OpenClaw 的 `cacheRead` + - Gemini 缓存命中用量会从上游的 `cachedContentTokenCount` 规范化为 OpenClaw `cacheRead` ```json5 { @@ -260,13 +301,13 @@ Gemma 4 模型(例如 `gemma-4-26b-a4b-it`)支持思考模式。OpenClaw 会 - 回复文本来自 CLI JSON 的 `response` 字段。 - 当 CLI 将 `usage` 留空时,用量会回退到 `stats`。 - - `stats.cached` 会被规范化为 OpenClaw 的 `cacheRead`。 - - 如果 `stats.input` 缺失,OpenClaw 会根据 `stats.input_tokens - stats.cached` 推导输入 token 数。 + - `stats.cached` 会被规范化为 OpenClaw `cacheRead`。 + - 如果缺少 `stats.input`,OpenClaw 会根据 `stats.input_tokens - stats.cached` 推导输入 token 数。 - 如果 Gateway 网关以守护进程形式运行(launchd/systemd),请确保 `GEMINI_API_KEY` 对该进程可用(例如在 `~/.openclaw/.env` 中,或通过 `env.shellEnv`)。 + 如果 Gateway 网关以守护进程方式运行(launchd/systemd),请确保 `GEMINI_API_KEY` 对该进程可用(例如在 `~/.openclaw/.env` 中,或通过 `env.shellEnv` 提供)。 @@ -274,7 +315,7 @@ Gemma 4 模型(例如 `gemma-4-26b-a4b-it`)支持思考模式。OpenClaw 会 - 选择提供商、模型引用和故障切换行为。 + 选择提供商、模型引用和故障转移行为。 共享图像工具参数和提供商选择。 diff --git a/docs/zh-CN/tools/tts.md b/docs/zh-CN/tools/tts.md index ae269f0ac..76031a74c 100644 --- a/docs/zh-CN/tools/tts.md +++ b/docs/zh-CN/tools/tts.md @@ -3,48 +3,50 @@ read_when: - 为回复启用文本转语音 - 配置 TTS 提供商或限制 - 使用 `/tts` 命令 -summary: 用于出站回复的文本转语音(TTS) +summary: 用于外发回复的文本转语音(TTS) title: 文本转语音 x-i18n: - generated_at: "2026-04-12T22:42:45Z" + generated_at: "2026-04-16T06:26:25Z" model: gpt-5.4 provider: openai - source_hash: ad79a6be34879347dc73fdab1bd219823cd7c6aa8504e3e4c73e1a0554c837c5 + source_hash: de7c1dc8831c1ba307596afd48cb4d36f844724887a13b17e35f41ef5174a86f source_path: tools/tts.md workflow: 15 --- # 文本转语音(TTS) -OpenClaw 可以使用 ElevenLabs、Microsoft、MiniMax 或 OpenAI 将出站回复转换为音频。 +OpenClaw 可以使用 ElevenLabs、Google Gemini、Microsoft、MiniMax 或 OpenAI 将外发回复转换为音频。 它适用于 OpenClaw 能发送音频的任何地方。 ## 支持的服务 -- **ElevenLabs**(主要或回退提供商) -- **Microsoft**(主要或回退提供商;当前内置实现使用 `node-edge-tts`) -- **MiniMax**(主要或回退提供商;使用 T2A v2 API) -- **OpenAI**(主要或回退提供商;也用于摘要) +- **ElevenLabs**(主提供商或回退提供商) +- **Google Gemini**(主提供商或回退提供商;使用 Gemini API TTS) +- **Microsoft**(主提供商或回退提供商;当前内置实现使用 `node-edge-tts`) +- **MiniMax**(主提供商或回退提供商;使用 T2A v2 API) +- **OpenAI**(主提供商或回退提供商;也用于摘要) ### Microsoft 语音说明 -当前内置的 Microsoft 语音提供商通过 `node-edge-tts` 库使用 Microsoft Edge 的在线神经网络 TTS 服务。它是托管服务(不是本地服务),使用 Microsoft 的端点,并且不需要 API 密钥。 -`node-edge-tts` 提供语音配置选项和输出格式,但并非所有选项都受该服务支持。使用 `edge` 的旧版配置和指令输入仍然有效,并会被规范化为 `microsoft`。 +内置的 Microsoft 语音提供商当前通过 `node-edge-tts` 库使用 Microsoft Edge 的在线神经网络 TTS 服务。它是托管服务(不是本地服务),使用 Microsoft 端点,并且不需要 API 密钥。 +`node-edge-tts` 提供了语音配置选项和输出格式,但并非所有选项都受到该服务支持。使用 `edge` 的旧版配置和指令输入仍然有效,并会被标准化为 `microsoft`。 -由于这一路径是一个未公布 SLA 或配额的公共 Web 服务,请将其视为尽力而为的服务。如果你需要有保障的限制和支持,请使用 OpenAI 或 ElevenLabs。 +由于这一路径是一个未公布 SLA 或配额的公共 Web 服务,请将其视为尽力而为的服务。如果你需要有保证的限制和支持,请使用 OpenAI 或 ElevenLabs。 ## 可选密钥 -如果你想使用 OpenAI、ElevenLabs 或 MiniMax: +如果你想使用 OpenAI、ElevenLabs、Google Gemini 或 MiniMax: - `ELEVENLABS_API_KEY`(或 `XI_API_KEY`) +- `GEMINI_API_KEY`(或 `GOOGLE_API_KEY`) - `MINIMAX_API_KEY` - `OPENAI_API_KEY` Microsoft 语音**不**需要 API 密钥。 -如果配置了多个提供商,将优先使用所选提供商,其他提供商作为回退选项。 -自动摘要使用已配置的 `summaryModel`(或 `agents.defaults.model.primary`),因此如果你启用摘要,该提供商也必须完成身份验证。 +如果配置了多个提供商,将优先使用所选提供商,其他提供商则作为回退选项。 +自动摘要使用已配置的 `summaryModel`(或 `agents.defaults.model.primary`),因此如果你启用了摘要,该提供商也必须已完成认证。 ## 服务链接 @@ -58,9 +60,9 @@ Microsoft 语音**不**需要 API 密钥。 ## 默认启用吗? -不是。自动 TTS 默认**关闭**。可通过配置中的 `messages.tts.auto` 启用,或使用 `/tts on` 在本地启用。 +否。自动 TTS 默认**关闭**。可在配置中通过 `messages.tts.auto` 启用,或在本地通过 `/tts on` 启用。 -当未设置 `messages.tts.provider` 时,OpenClaw 会按注册表自动选择顺序挑选第一个已配置的语音提供商。 +当未设置 `messages.tts.provider` 时,OpenClaw 会按注册表自动选择顺序选取第一个已配置的语音提供商。 ## 配置 @@ -80,7 +82,7 @@ TTS 配置位于 `openclaw.json` 的 `messages.tts` 下。 } ``` -### OpenAI 作为主要提供商,ElevenLabs 作为回退提供商 +### OpenAI 为主,ElevenLabs 为回退 ```json5 { @@ -121,7 +123,7 @@ TTS 配置位于 `openclaw.json` 的 `messages.tts` 下。 } ``` -### Microsoft 作为主要提供商(无需 API 密钥) +### Microsoft 为主(无 API 密钥) ```json5 { @@ -144,7 +146,7 @@ TTS 配置位于 `openclaw.json` 的 `messages.tts` 下。 } ``` -### MiniMax 作为主要提供商 +### MiniMax 为主 ```json5 { @@ -168,6 +170,28 @@ TTS 配置位于 `openclaw.json` 的 `messages.tts` 下。 } ``` +### Google Gemini 为主 + +```json5 +{ + messages: { + tts: { + auto: "always", + provider: "google", + providers: { + google: { + apiKey: "gemini_api_key", + model: "gemini-3.1-flash-tts-preview", + voiceName: "Kore", + }, + }, + }, + }, +} +``` + +Google Gemini TTS 使用 Gemini API 密钥路径。此处可以使用限制为 Gemini API 的 Google Cloud Console API 密钥,它与内置 Google 图像生成提供商所使用的密钥类型相同。解析顺序为 `messages.tts.providers.google.apiKey` -> `models.providers.google.apiKey` -> `GEMINI_API_KEY` -> `GOOGLE_API_KEY`。 + ### 禁用 Microsoft 语音 ```json5 @@ -184,7 +208,7 @@ TTS 配置位于 `openclaw.json` 的 `messages.tts` 下。 } ``` -### 自定义限制 + prefsPath 路径 +### 自定义限制 + prefs 路径 ```json5 { @@ -199,7 +223,7 @@ TTS 配置位于 `openclaw.json` 的 `messages.tts` 下。 } ``` -### 仅在收到入站语音消息后才用音频回复 +### 仅在收到入站语音消息后以音频回复 ```json5 { @@ -233,26 +257,26 @@ TTS 配置位于 `openclaw.json` 的 `messages.tts` 下。 - `auto`:自动 TTS 模式(`off`、`always`、`inbound`、`tagged`)。 - `inbound` 仅在收到入站语音消息后发送音频。 - - `tagged` 仅在回复包含 `[[tts:key=value]]` 指令或 `[[tts:text]]...[[/tts:text]]` 块时发送音频。 + - `tagged` 仅当回复包含 `[[tts:key=value]]` 指令或 `[[tts:text]]...[[/tts:text]]` 块时发送音频。 - `enabled`:旧版开关(Doctor 会将其迁移到 `auto`)。 -- `mode`:`"final"`(默认)或 `"all"`(包含工具/分块回复)。 -- `provider`:语音提供商 id,例如 `"elevenlabs"`、`"microsoft"`、`"minimax"` 或 `"openai"`(会自动回退)。 +- `mode`:`"final"`(默认)或 `"all"`(包括工具/分块回复)。 +- `provider`:语音提供商 id,例如 `"elevenlabs"`、`"google"`、`"microsoft"`、`"minimax"` 或 `"openai"`(会自动回退)。 - 如果 `provider` **未设置**,OpenClaw 会按注册表自动选择顺序使用第一个已配置的语音提供商。 -- 旧版 `provider: "edge"` 仍然可用,并会被规范化为 `microsoft`。 +- 旧版 `provider: "edge"` 仍然可用,并会被标准化为 `microsoft`。 - `summaryModel`:用于自动摘要的可选低成本模型;默认为 `agents.defaults.model.primary`。 - 接受 `provider/model` 或已配置的模型别名。 -- `modelOverrides`:允许模型输出 TTS 指令(默认开启)。 - - `allowProvider` 默认为 `false`(提供商切换需要主动启用)。 -- `providers.`:由提供商拥有的设置,按语音提供商 id 分组。 +- `modelOverrides`:允许模型发出 TTS 指令(默认开启)。 + - `allowProvider` 默认为 `false`(切换提供商需显式启用)。 +- `providers.`:按语音提供商 id 键控的提供商自有设置。 - 旧版直接提供商块(`messages.tts.openai`、`messages.tts.elevenlabs`、`messages.tts.microsoft`、`messages.tts.edge`)会在加载时自动迁移到 `messages.tts.providers.`。 -- `maxTextLength`:TTS 输入的硬性上限(字符数)。如果超出,`/tts audio` 会失败。 -- `timeoutMs`:请求超时时间(毫秒)。 -- `prefsPath`:覆盖本地偏好设置 JSON 路径(提供商/限制/摘要)。 -- `apiKey` 值会回退到环境变量(`ELEVENLABS_API_KEY`/`XI_API_KEY`、`MINIMAX_API_KEY`、`OPENAI_API_KEY`)。 +- `maxTextLength`:TTS 输入的硬上限(字符数)。超过时,`/tts audio` 会失败。 +- `timeoutMs`:请求超时(毫秒)。 +- `prefsPath`:覆盖本地 prefs JSON 路径(提供商/限制/摘要)。 +- `apiKey` 值会回退到环境变量(`ELEVENLABS_API_KEY`/`XI_API_KEY`、`GEMINI_API_KEY`/`GOOGLE_API_KEY`、`MINIMAX_API_KEY`、`OPENAI_API_KEY`)。 - `providers.elevenlabs.baseUrl`:覆盖 ElevenLabs API 基础 URL。 - `providers.openai.baseUrl`:覆盖 OpenAI TTS 端点。 - 解析顺序:`messages.tts.providers.openai.baseUrl` -> `OPENAI_TTS_BASE_URL` -> `https://api.openai.com/v1` - - 非默认值会被视为与 OpenAI 兼容的 TTS 端点,因此接受自定义模型名和声音名。 + - 非默认值会被视为兼容 OpenAI 的 TTS 端点,因此接受自定义模型名和语音名。 - `providers.elevenlabs.voiceSettings`: - `stability`、`similarityBoost`、`style`:`0..1` - `useSpeakerBoost`:`true|false` @@ -262,46 +286,48 @@ TTS 配置位于 `openclaw.json` 的 `messages.tts` 下。 - `providers.elevenlabs.seed`:整数 `0..4294967295`(尽力保证确定性) - `providers.minimax.baseUrl`:覆盖 MiniMax API 基础 URL(默认 `https://api.minimax.io`,环境变量:`MINIMAX_API_HOST`)。 - `providers.minimax.model`:TTS 模型(默认 `speech-2.8-hd`,环境变量:`MINIMAX_TTS_MODEL`)。 -- `providers.minimax.voiceId`:声音标识符(默认 `English_expressive_narrator`,环境变量:`MINIMAX_TTS_VOICE_ID`)。 +- `providers.minimax.voiceId`:语音标识符(默认 `English_expressive_narrator`,环境变量:`MINIMAX_TTS_VOICE_ID`)。 - `providers.minimax.speed`:播放速度 `0.5..2.0`(默认 1.0)。 - `providers.minimax.vol`:音量 `(0, 10]`(默认 1.0;必须大于 0)。 - `providers.minimax.pitch`:音高偏移 `-12..12`(默认 0)。 -- `providers.microsoft.enabled`:允许使用 Microsoft 语音(默认 `true`;无需 API 密钥)。 +- `providers.google.model`:Gemini TTS 模型(默认 `gemini-3.1-flash-tts-preview`)。 +- `providers.google.voiceName`:Gemini 预置语音名称(默认 `Kore`;也接受 `voice`)。 +- `providers.google.baseUrl`:覆盖 Gemini API 基础 URL。仅接受 `https://generativelanguage.googleapis.com`。 + - 如果省略 `messages.tts.providers.google.apiKey`,TTS 可以在回退到环境变量之前复用 `models.providers.google.apiKey`。 +- `providers.microsoft.enabled`:允许使用 Microsoft 语音(默认 `true`;无 API 密钥)。 - `providers.microsoft.voice`:Microsoft 神经网络语音名称(例如 `en-US-MichelleNeural`)。 - `providers.microsoft.lang`:语言代码(例如 `en-US`)。 - `providers.microsoft.outputFormat`:Microsoft 输出格式(例如 `audio-24khz-48kbitrate-mono-mp3`)。 - - 有效值请参见 Microsoft Speech 输出格式;并非所有格式都受内置的 Edge 后端传输支持。 + - 有效值请参见 Microsoft Speech 输出格式;并非所有格式都受内置的基于 Edge 的传输支持。 - `providers.microsoft.rate` / `providers.microsoft.pitch` / `providers.microsoft.volume`:百分比字符串(例如 `+10%`、`-5%`)。 - `providers.microsoft.saveSubtitles`:在音频文件旁写入 JSON 字幕。 - `providers.microsoft.proxy`:Microsoft 语音请求的代理 URL。 - `providers.microsoft.timeoutMs`:请求超时覆盖值(毫秒)。 -- `edge.*`:相同 Microsoft 设置的旧版别名。 +- `edge.*`:同一组 Microsoft 设置的旧版别名。 -## 模型驱动的覆盖(默认开启) +## 模型驱动的覆盖项(默认开启) -默认情况下,模型**可以**为单条回复输出 TTS 指令。 -当 `messages.tts.auto` 为 `tagged` 时,必须有这些指令才会触发音频。 +默认情况下,模型**可以**为单条回复发出 TTS 指令。 +当 `messages.tts.auto` 为 `tagged` 时,必须使用这些指令才会触发音频。 -启用后,模型可以输出 `[[tts:...]]` 指令来覆盖单条回复的声音, -还可以选择附带一个 `[[tts:text]]...[[/tts:text]]` 块,用于提供仅应出现在 -音频中的表现性标签(笑声、歌唱提示等)。 +启用后,模型可以发出 `[[tts:...]]` 指令来覆盖单条回复的语音设置,还可以选择性提供一个 `[[tts:text]]...[[/tts:text]]` 块,用于写入只应出现在音频中的表现性标记(笑声、唱歌提示等)。 -除非设置了 `modelOverrides.allowProvider: true`,否则 `provider=...` 指令会被忽略。 +`provider=...` 指令会被忽略,除非设置 `modelOverrides.allowProvider: true`。 示例回复载荷: ``` -给你。 +Here you go. [[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]] -[[tts:text]](笑)再把这首歌读一遍。[[/tts:text]] +[[tts:text]](laughs) Read the song once more.[[/tts:text]] ``` 可用的指令键(启用时): -- `provider`(已注册的语音提供商 id,例如 `openai`、`elevenlabs`、`minimax` 或 `microsoft`;需要 `allowProvider: true`) -- `voice`(OpenAI 声音)或 `voiceId`(ElevenLabs / MiniMax) -- `model`(OpenAI TTS 模型、ElevenLabs model id 或 MiniMax 模型) +- `provider`(已注册的语音提供商 id,例如 `openai`、`elevenlabs`、`google`、`minimax` 或 `microsoft`;需要 `allowProvider: true`) +- `voice`(OpenAI 语音)、`voiceName` / `voice_name` / `google_voice`(Google 语音)或 `voiceId`(ElevenLabs / MiniMax) +- `model`(OpenAI TTS 模型、ElevenLabs model id 或 MiniMax 模型)或 `google_model`(Google TTS 模型) - `stability`、`similarityBoost`、`style`、`speed`、`useSpeakerBoost` - `vol` / `volume`(MiniMax 音量,0-10) - `pitch`(MiniMax 音高,-12 到 12) @@ -309,7 +335,7 @@ TTS 配置位于 `openclaw.json` 的 `messages.tts` 下。 - `languageCode`(ISO 639-1) - `seed` -禁用所有模型覆盖: +禁用所有模型覆盖项: ```json5 { @@ -339,43 +365,44 @@ TTS 配置位于 `openclaw.json` 的 `messages.tts` 下。 } ``` -## 按用户偏好设置 +## 每用户偏好设置 -Slash 命令会将本地覆盖写入 `prefsPath`(默认: +Slash 命令会将本地覆盖项写入 `prefsPath`(默认: `~/.openclaw/settings/tts.json`,可通过 `OPENCLAW_TTS_PREFS` 或 `messages.tts.prefsPath` 覆盖)。 -存储的字段: +存储字段: - `enabled` - `provider` - `maxLength`(摘要阈值;默认 1500 个字符) - `summarize`(默认 `true`) -这些值会覆盖该主机上的 `messages.tts.*`。 +这些设置会覆盖该主机上的 `messages.tts.*`。 ## 输出格式(固定) - **Feishu / Matrix / Telegram / WhatsApp**:Opus 语音消息(ElevenLabs 使用 `opus_48000_64`,OpenAI 使用 `opus`)。 - - 48 kHz / 64 kbps 是语音消息的不错折中方案。 + - 48 kHz / 64 kbps 是适合语音消息的折中方案。 - **其他渠道**:MP3(ElevenLabs 使用 `mp3_44100_128`,OpenAI 使用 `mp3`)。 - - 44.1 kHz / 128 kbps 是语音清晰度的默认平衡点。 -- **MiniMax**:MP3(`speech-2.8-hd` 模型,32 kHz 采样率)。原生不支持语音便签格式;如果你需要有保障的 Opus 语音消息,请使用 OpenAI 或 ElevenLabs。 + - 44.1 kHz / 128 kbps 是语音清晰度的默认平衡方案。 +- **MiniMax**:MP3(`speech-2.8-hd` 模型,32 kHz 采样率)。原生不支持语音便笺格式;如果你需要有保证的 Opus 语音消息,请使用 OpenAI 或 ElevenLabs。 +- **Google Gemini**:Gemini API TTS 返回原始 24 kHz PCM。OpenClaw 会将其封装为 WAV 作为音频附件返回,并为 Talk/电话场景直接返回 PCM。此路径不支持原生 Opus 语音便笺格式。 - **Microsoft**:使用 `microsoft.outputFormat`(默认 `audio-24khz-48kbitrate-mono-mp3`)。 - - 内置传输接受 `outputFormat`,但该服务并不提供所有格式。 + - 内置传输支持 `outputFormat`,但并非所有格式都可从该服务获取。 - 输出格式值遵循 Microsoft Speech 输出格式(包括 Ogg/WebM Opus)。 - - Telegram `sendVoice` 接受 OGG/MP3/M4A;如果你需要有保障的 Opus 语音消息,请使用 OpenAI/ElevenLabs。 - - 如果配置的 Microsoft 输出格式失败,OpenClaw 会使用 MP3 重试。 + - Telegram `sendVoice` 接受 OGG/MP3/M4A;如果你需要有保证的 Opus 语音消息,请使用 OpenAI/ElevenLabs。 + - 如果配置的 Microsoft 输出格式失败,OpenClaw 会重试使用 MP3。 -OpenAI/ElevenLabs 输出格式会按渠道固定(见上文)。 +OpenAI/ElevenLabs 的输出格式按渠道固定(见上文)。 ## 自动 TTS 行为 启用后,OpenClaw 会: - 如果回复已包含媒体或 `MEDIA:` 指令,则跳过 TTS。 -- 跳过过短的回复(少于 10 个字符)。 -- 在启用时,使用 `agents.defaults.model.primary`(或 `summaryModel`)为长回复生成摘要。 +- 跳过非常短的回复(少于 10 个字符)。 +- 如果启用,会使用 `agents.defaults.model.primary`(或 `summaryModel`)对较长回复进行摘要。 - 将生成的音频附加到回复中。 如果回复超过 `maxLength` 且摘要已关闭(或摘要模型没有 API 密钥),则会跳过音频,并发送普通文本回复。 @@ -383,24 +410,24 @@ OpenAI/ElevenLabs 输出格式会按渠道固定(见上文)。 ## 流程图 ``` -回复 -> 是否启用 TTS? - 否 -> 发送文本 - 是 -> 是否有媒体 / MEDIA: / 内容过短? - 是 -> 发送文本 - 否 -> 长度 > 限制? - 否 -> TTS -> 附加音频 - 是 -> 是否启用摘要? - 否 -> 发送文本 - 是 -> 生成摘要(summaryModel 或 agents.defaults.model.primary) - -> TTS -> 附加音频 +Reply -> TTS enabled? + no -> send text + yes -> has media / MEDIA: / short? + yes -> send text + no -> length > limit? + no -> TTS -> attach audio + yes -> summary enabled? + no -> send text + yes -> summarize (summaryModel or agents.defaults.model.primary) + -> TTS -> attach audio ``` ## Slash 命令用法 只有一个命令:`/tts`。 -启用详情请参见 [Slash 命令](/zh-CN/tools/slash-commands)。 +启用详情见 [Slash 命令](/zh-CN/tools/slash-commands)。 -Discord 说明:`/tts` 是 Discord 的内置命令,因此 OpenClaw 会在那里注册 `/voice` 作为原生命令。文本形式的 `/tts ...` 仍然可用。 +Discord 说明:`/tts` 是 Discord 内置命令,因此 OpenClaw 会在那里将 `/voice` 注册为原生命令。文本形式的 `/tts ...` 仍然可用。 ``` /tts off @@ -414,22 +441,22 @@ Discord 说明:`/tts` 是 Discord 的内置命令,因此 OpenClaw 会在那 说明: -- 命令要求发送者已获授权(允许列表/owner 规则仍然适用)。 +- 命令需要授权发送者(allowlist/owner 规则仍然适用)。 - 必须启用 `commands.text` 或原生命令注册。 - 配置 `messages.tts.auto` 接受 `off|always|inbound|tagged`。 - `/tts on` 会将本地 TTS 偏好写为 `always`;`/tts off` 会将其写为 `off`。 -- 如果你想使用 `inbound` 或 `tagged` 作为默认值,请使用配置。 +- 如果你想使用 `inbound` 或 `tagged` 默认值,请使用配置。 - `limit` 和 `summary` 存储在本地偏好中,而不是主配置中。 -- `/tts audio` 会生成一次性音频回复(不会将 TTS 切换为开启)。 +- `/tts audio` 会生成一次性音频回复(不会切换 TTS 为开启状态)。 - `/tts status` 包含最近一次尝试的回退可见性: - - 成功回退:`Fallback: -> ` 加上 `Attempts: ...` - - 失败:`Error: ...` 加上 `Attempts: ...` + - 成功回退:`Fallback: -> ` 加 `Attempts: ...` + - 失败:`Error: ...` 加 `Attempts: ...` - 详细诊断:`Attempt details: provider:outcome(reasonCode) latency` - OpenAI 和 ElevenLabs API 失败现在会包含已解析的提供商错误详情和请求 id(如果提供商返回),这些信息会显示在 TTS 错误/日志中。 ## 智能体工具 -`tts` 工具可将文本转换为语音,并返回一个用于回复投递的音频附件。当渠道是 Feishu、Matrix、Telegram 或 WhatsApp 时,音频会作为语音消息而不是文件附件发送。 +`tts` 工具可将文本转换为语音,并返回用于回复投递的音频附件。当渠道是 Feishu、Matrix、Telegram 或 WhatsApp 时,音频会作为语音消息而不是文件附件发送。 ## Gateway 网关 RPC