Files
note/课题一/AI 视觉对话助手/语音交互.md

3.8 KiB
Raw Blame History

tags, create time
tags create time
AI
语音交互
STT
TTS
VAD
流式处理
多模态
2026-06-12 11:13

语音交互

概述

语音是人机对话中最自然的交互方式。一个完整的语音交互链路包含:语音活动检测 (VAD)语音转文字 (STT)LLM 推理文字转语音 (TTS)。本节拆解每个环节的技术选型与优化策略,重点关注端到端延迟的控制。

正文

语音交互全链路

graph LR
    A["麦克风"] --> B["VAD"]
    B --> C["STT"]
    C --> D["LLM"]
    D --> E["TTS"]
    E --> F["扬声器"]

用户感知到的延迟 = VAD 响应 + STT 耗时 + LLM 首 token + TTS 首包。任何一个环节拖后腿,对话体验都会"卡顿"。

[!question] 思考 人类对话中,停顿超过 300ms 就会感到"对方在想"。你认为端到端延迟控制在多少毫秒以内,才能让 AI 对话"像真人"

环节一:语音活动检测 (VAD)

VAD 的作用是从持续的音频流中检测"人什么时候在说话",避免将环境噪音当作有效输入。

// 使用 WebRTC VAD浏览器端轻量方案
import { MicVAD } from "@ricky0123/vad-web";

const vad = await MicVAD.new({
  onSpeechStart: () => console.log("用户开始说话"),
  onSpeechEnd: (audio) => {
    // audio: Float32Array送入 STT
    sendToSTT(audio);
  },
  positiveSpeechThreshold: 0.5, // 检测灵敏度
  minSpeechDuration: 250        // 最短语音时长 ms
});

vad.start();

[!tip] 为什么要在浏览器端做 VAD 如果把所有音频都发给服务端,带宽成本会很高。浏览器端 VAD 只在检测到语音时才上传数据,能减少 70%+ 的无效传输。

环节二:语音转文字 (STT)

主流方案对比:

方案 延迟 成本 特点
Whisper API 1-3s 按分钟计费 准确率高,支持多语言
Deepgram <500ms 按分钟计费 流式识别,延迟极低
浏览器原生 ~1s 免费 依赖浏览器,中文效果一般
FunASR <500ms 自部署免费 阿里开源,中文优化

流式 STT 是低延迟的关键——不必等用户说完,边说边识别:

// Deepgram 流式识别示例
const ws = new WebSocket("wss://api.deepgram.com/v1/listen", {
  headers: { Authorization: `Token ${API_KEY}` }
});

ws.onmessage = (event) => {
  const { transcript, is_final } = JSON.parse(event.data).channel.alternatives[0];
  if (is_final) {
    // 一句完整语音,送入 LLM
    onFinalTranscript(transcript);
  }
};

环节三TTS 语音合成

TTS 是用户听到"AI 声音"的最后一环。流式 TTS 可以在 LLM 生成第一个句子时就开始朗读,大幅缩短感知延迟。

graph TD
    A["LLM 流式输出"] --> B{"句子边界检测"}
    B -->|"检测到句号/逗号"| C["送入 TTS"]
    C --> D["流式播放音频"]
    B -->|"继续生成"| A

方案选择:

  • OpenAI TTS:音质好,延迟中等,按字符计费
  • Edge TTS:微软免费方案,音质不错,延迟略高
  • Fish Speech / CosyVoice:开源方案,支持声音克隆,可自部署

延迟优化汇总

graph TD
    A["端到端延迟优化"] --> B["VAD 浏览器端处理"]
    A --> C["流式 STT 边说边识别"]
    A --> D["LLM 流式输出"]
    A --> E["TTS 句子级流式合成"]
    A --> F["并行处理: STT 与上下文准备"]

[!info] 关键数字 一个优化良好的语音对话链路,端到端延迟可以控制在 1.5~2 秒以内——从用户说完话到听到 AI 回应。如果做到流式 TTS用户在 LLM 开始生成后 0.5 秒就能听到第一个词。

关联笔记