AI Agent 中级 20分钟
语音交互助手
端到端语音交互系统,支持语音唤醒、连续对话、语音合成,可嵌入硬件设备。
WhisperGPT-4ElevenLabsWebRTCPython
项目概述
语音交互是人机交互最自然的方式之一。从智能音箱到车载助手,从客服热线到无障碍辅助,语音交互场景广泛但实现复杂。
本案例构建了一个端到端的语音交互助手系统。支持语音唤醒(离线)、连续对话、多音色合成,端到端延迟控制在 2 秒以内。
关键指标
< 2s
端到端延迟
98%
唤醒成功率
95%
ASR 准确率
70%
用户留存(周)
系统架构
系统采用「语音活动检测 → ASR → LLM 对话 → TTS」的四步流水线。
(diagram)
实现细节
1
语音前端
语音唤醒
本地运行唤醒词检测(Porcupine),无需联网。支持自定义唤醒词。
VAD 检测
WebRTC VAD 模块检测说话人是否在发言。连续静音超过 1.5 秒自动结束录音。
噪音抑制
RNNoise 深度学习降噪模型处理麦克风输入,大幅削减背景噪音。
2
语音理解与对话
ASR 转写
Whisper large-v3 将语音转为文本。支持中英文混合、流式处理。
LLM 对话
GPT-4o 处理转写文本。上下文管理支持多轮对话,自动维护最近 10 轮对话历史。
意图路由
对指定意图(查天气、设闹钟、控制设备)路由到专用函数,非路由场景走自由对话。
3
语音合成
TTS 引擎
ElevenLabs 提供高保真语音合成,支持多种音色和情感调节。延迟约 300-500ms。
流式播放
TTS 结果边生成边播放。用户无需等待完整文本生成完毕即可听到声音。
打断机制
用户可以在 TTS 播放时说话打断。VAD 检测到新语音后立即停止播放并开始新的 ASR 循环。
语音助手核心循环
class VoiceAssistant:
def __init__(self):
self.vad = webrtcvad.Vad(2)
self.asr = whisper.load_model("large-v3")
self.llm = ChatOpenAI(model="gpt-4o")
async def conversation_loop(self):
while True:
audio = await self.record_until_silence()
text = self.asr.transcribe(audio)["text"]
response = self.llm.invoke([{"role": "user", "content": text}])
audio = generate(text=response.content, voice="Rachel")
play(audio) 经验教训
- 端到端延迟最大的瓶颈在 LLM 推理
- 打断机制的体验决定了用户是否愿意持续使用
- 噪音环境下的语音识别是最大挑战
- 唤醒词误触发会严重破坏体验