Files
CamTalk/docs/06-语音交互.md
hhs 10f676f3b4 docs: 扁平化目录结构,优化文档为 Coding Agent 可读格式
- 移除 Obsidian 特有语法(callout、wikilinks、YAML frontmatter)
- 目录结构从 3 层嵌套扁平化为编号文件(01~09)
- 新增 docs/README.md 文档索引与推荐阅读顺序
- 精简冗余解释,保留所有代码块和实现参考
- CLAUDE.md 全面中文化
2026-06-12 17:08:20 +08:00

2.5 KiB
Raw Blame History

语音交互

概述

语音交互全链路:VAD语音活动检测STT语音转文字LLM 推理TTS文字转语音

用户感知延迟 = VAD 响应 + STT 耗时 + LLM 首 token + TTS 首包。人类对话中停顿超过 300ms 就会感到"对方在想"。

延迟目标:端到端 1.5~2 秒(用户说完话到听到 AI 回应);流式 TTS 下LLM 开始生成后 0.5 秒听到第一个词。

全链路

麦克风 → VAD → STT → LLM → TTS → 扬声器

环节一VAD语音活动检测

从持续音频流中检测"人什么时候在说话",避免将环境噪音当作有效输入。浏览器端完成,节省 ~70% 带宽。

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();

环节二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) {
    onFinalTranscript(transcript); // 一句完整语音,送入 LLM
  }
};

环节三TTS文字转语音

流式 TTS检测 LLM 输出中的句子边界,每检测到一句就立即送入 TTS 合成并播放,不必等全部生成完。

方案选择:

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

延迟优化要点

  • VAD 浏览器端处理(减少无效传输)
  • 流式 STT边说边识别
  • LLM 流式输出
  • TTS 句子级流式合成
  • STT 与上下文准备并行处理