2026-02-01 22:47:44 +01:00
|
|
|
|
---
|
|
|
|
|
|
read_when:
|
2026-02-03 13:23:00 -08:00
|
|
|
|
- 在 macOS/iOS/Android 上实现 Talk 模式
|
|
|
|
|
|
- 更改语音/TTS/中断行为
|
|
|
|
|
|
summary: Talk 模式:使用 ElevenLabs TTS 进行连续语音对话
|
|
|
|
|
|
title: Talk 模式
|
2026-02-01 22:47:44 +01:00
|
|
|
|
x-i18n:
|
2026-02-03 13:23:00 -08:00
|
|
|
|
generated_at: "2026-02-03T10:07:59Z"
|
2026-02-01 22:47:44 +01:00
|
|
|
|
model: claude-opus-4-5
|
|
|
|
|
|
provider: pi
|
|
|
|
|
|
source_hash: ecbc3701c9e9502970cf13227fedbc9714d13668d8f4f3988fef2a4d68116a42
|
|
|
|
|
|
source_path: nodes/talk.md
|
|
|
|
|
|
workflow: 15
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-02-03 13:23:00 -08:00
|
|
|
|
# Talk 模式
|
2026-02-01 22:47:44 +01:00
|
|
|
|
|
2026-02-03 13:23:00 -08:00
|
|
|
|
Talk 模式是一个连续的语音对话循环:
|
2026-02-01 22:47:44 +01:00
|
|
|
|
|
|
|
|
|
|
1. 监听语音
|
2026-02-03 13:23:00 -08:00
|
|
|
|
2. 将转录文本发送到模型(main 会话,chat.send)
|
2026-02-01 22:47:44 +01:00
|
|
|
|
3. 等待响应
|
|
|
|
|
|
4. 通过 ElevenLabs 朗读(流式播放)
|
|
|
|
|
|
|
|
|
|
|
|
## 行为(macOS)
|
|
|
|
|
|
|
2026-02-03 13:23:00 -08:00
|
|
|
|
- Talk 模式启用时显示**常驻悬浮窗**。
|
|
|
|
|
|
- **监听 → 思考 → 朗读**阶段转换。
|
|
|
|
|
|
- **短暂停顿**(静音窗口)后,当前转录文本被发送。
|
|
|
|
|
|
- 回复被**写入 WebChat**(与打字相同)。
|
|
|
|
|
|
- **语音中断**(默认开启):如果用户在助手朗读时开始说话,我们会停止播放并记录中断时间戳供下一个提示使用。
|
2026-02-01 22:47:44 +01:00
|
|
|
|
|
|
|
|
|
|
## 回复中的语音指令
|
|
|
|
|
|
|
|
|
|
|
|
助手可以在回复前添加**单行 JSON** 来控制语音:
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "voice": "<voice-id>", "once": true }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
规则:
|
|
|
|
|
|
|
2026-02-03 13:23:00 -08:00
|
|
|
|
- 仅适用于第一个非空行。
|
2026-02-01 22:47:44 +01:00
|
|
|
|
- 未知键会被忽略。
|
2026-02-03 13:23:00 -08:00
|
|
|
|
- `once: true` 仅适用于当前回复。
|
|
|
|
|
|
- 没有 `once` 时,该语音成为 Talk 模式的新默认值。
|
2026-02-01 22:47:44 +01:00
|
|
|
|
- JSON 行在 TTS 播放前会被移除。
|
|
|
|
|
|
|
|
|
|
|
|
支持的键:
|
|
|
|
|
|
|
|
|
|
|
|
- `voice` / `voice_id` / `voiceId`
|
|
|
|
|
|
- `model` / `model_id` / `modelId`
|
|
|
|
|
|
- `speed`、`rate`(WPM)、`stability`、`similarity`、`style`、`speakerBoost`
|
|
|
|
|
|
- `seed`、`normalize`、`lang`、`output_format`、`latency_tier`
|
|
|
|
|
|
- `once`
|
|
|
|
|
|
|
|
|
|
|
|
## 配置(`~/.openclaw/openclaw.json`)
|
|
|
|
|
|
|
|
|
|
|
|
```json5
|
|
|
|
|
|
{
|
|
|
|
|
|
talk: {
|
|
|
|
|
|
voiceId: "elevenlabs_voice_id",
|
|
|
|
|
|
modelId: "eleven_v3",
|
|
|
|
|
|
outputFormat: "mp3_44100_128",
|
|
|
|
|
|
apiKey: "elevenlabs_api_key",
|
|
|
|
|
|
interruptOnSpeech: true,
|
|
|
|
|
|
},
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
默认值:
|
|
|
|
|
|
|
|
|
|
|
|
- `interruptOnSpeech`:true
|
2026-02-03 13:23:00 -08:00
|
|
|
|
- `voiceId`:回退到 `ELEVENLABS_VOICE_ID` / `SAG_VOICE_ID`(或当 API 密钥可用时使用第一个 ElevenLabs 语音)
|
2026-02-01 22:47:44 +01:00
|
|
|
|
- `modelId`:未设置时默认为 `eleven_v3`
|
2026-02-03 13:23:00 -08:00
|
|
|
|
- `apiKey`:回退到 `ELEVENLABS_API_KEY`(或 Gateway 网关 shell profile(如果可用))
|
|
|
|
|
|
- `outputFormat`:macOS/iOS 上默认为 `pcm_44100`,Android 上默认为 `pcm_24000`(设置 `mp3_*` 以强制 MP3 流式传输)
|
2026-02-01 22:47:44 +01:00
|
|
|
|
|
|
|
|
|
|
## macOS UI
|
|
|
|
|
|
|
|
|
|
|
|
- 菜单栏切换:**Talk**
|
2026-02-03 13:23:00 -08:00
|
|
|
|
- 配置标签页:**Talk Mode** 组(voice id + 中断开关)
|
2026-02-01 22:47:44 +01:00
|
|
|
|
- 悬浮窗:
|
2026-02-03 13:23:00 -08:00
|
|
|
|
- **监听**:云朵随麦克风电平脉动
|
|
|
|
|
|
- **思考**:下沉动画
|
|
|
|
|
|
- **朗读**:辐射圆环
|
2026-02-01 22:47:44 +01:00
|
|
|
|
- 点击云朵:停止朗读
|
2026-02-03 13:23:00 -08:00
|
|
|
|
- 点击 X:退出 Talk 模式
|
2026-02-01 22:47:44 +01:00
|
|
|
|
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
|
2026-02-03 13:23:00 -08:00
|
|
|
|
- 需要语音 + 麦克风权限。
|
|
|
|
|
|
- 使用 `chat.send` 针对会话键 `main`。
|
|
|
|
|
|
- TTS 使用带有 `ELEVENLABS_API_KEY` 的 ElevenLabs 流式 API,并在 macOS/iOS/Android 上进行增量播放以降低延迟。
|
|
|
|
|
|
- `eleven_v3` 的 `stability` 验证为 `0.0`、`0.5` 或 `1.0`;其他模型接受 `0..1`。
|
|
|
|
|
|
- 设置时 `latency_tier` 验证为 `0..4`。
|
2026-02-01 22:47:44 +01:00
|
|
|
|
- Android 支持 `pcm_16000`、`pcm_22050`、`pcm_24000` 和 `pcm_44100` 输出格式,用于低延迟 AudioTrack 流式传输。
|