
# 交互模式与 VAD

*三种标准交互模式 + 服务端 TEN VAD 调参*

交互模式决定「谁来判断一句话的起止」。它是**智能体的参数**（邀请 AI 时选择），服务端是权威来源。三种标准模式：

| 模式 | 谁决定起止 | 适用 |
|---|---|---|
| ptt（按住说话） | 客户端：按下开始、松开结束 | 嘈杂环境、对讲、明确边界 |
| multi_turn（多轮对话） | 点击启动，云端 VAD 判断每句结束，自动续轮；空闲超时结束 | 问答、客服、回合式 |
| natural（自然对话） | 服务端持续判断，随时打断 | 最自然的全双工对话 |

## VAD 来源（vad_source）

多轮/自然模式下，语音端点检测有两种来源：

| vad_source | 说明 | 特点 |
|---|---|---|
| server | Go Runtime 调用私有 TEN VAD sidecar | 音频留在服务内网；打断由 VAD 权威决定，换 ASR 行为一致 |
| asr | 用 ASR 自带的断句/部分结果 | 省一次 VAD 计算；打断灵敏度随 ASR 厂商不同 |

> 💡 **自我打断 / 换 ASR 行为不一致？**：用 **vad_source=server**。VAD 成为唯一的打断裁判，换 ASR 厂商不再改变打断；并用下面的参数过滤 TTS 回声导致的「自我打断」。

## VAD 调参

| 参数 | 默认 | 说明 |
|---|---|---|
| vad_threshold | 0–1（默认 0.5） | 语音概率阈值。↑ 更不敏感、更抗回声；↓ 更灵敏 |
| vad_min_speech_ms | 120 | 触发打断所需的持续语音时长。↑ 过滤短回声/杂音，但打断略迟 |
| vad_min_silence_ms | 600 | 判定一句结束的静音时长。↑ 不易被中途截断；↓ 收尾更快 |
| vad_speech_pad_ms | 160 | 起点前保留的预卷，避免吃掉首字 |

### 抗「自我打断」建议

AI 自己的 TTS 声音回灌进麦克风时，VAD/ASR 会把它当成人声而打断自己。处理顺序：①在浏览器采集约束中开启回声消除（WebRTC（实验）客户端也应显式请求）；②外放场景建议戴耳机；③调高 `vad_threshold`（0.6-0.7）与 `vad_min_speech_ms`（200-300）。

## 在演示页实时调

控制台「演示」页连上后，邀请 AI 的面板里就有**模式选择**与 **VAD 灵敏度滑块**（阈值 / 最短语音），邀请时带上、连接中还能「应用到当前对话」实时生效。对应到 [智能体规格](/docs/agents) 的 `vad.*` 字段。

```json
// 连接中实时调 VAD（通过控制消息发给智能体）
{ "type": "config",
  "vad": { "source": "server", "threshold": 0.6, "min_speech_ms": 240 } }
```
