前言
构建一个完整的AI语音助手需要三个核心模块:语音识别(ASR)、大模型生成回复、语音合成(TTS)。本文介绍如何将它们串联成完整的语音交互系统。
一、语音识别:Whisper
1.1 本地部署Whisper
# 安装
pip install openai-whisper
# 使用
import whisper
model = whisper.load_model("base") # tiny/base/small/medium/large
result = model.transcribe("audio.mp3", language="zh")
print(result["text"])
# 模型对比
# tiny: 39M参数, 速度快, 准确度一般
# base: 74M参数, 平衡选择
# small: 244M参数, 准确度好
# medium: 769M参数, 准确度很好
# large: 1550M参数, 最准确, 最慢
1.2 使用OpenAI Whisper API
from openai import OpenAI
client = OpenAI()
with open("audio.mp3", "rb") as f:
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=f,
language="zh"
)
print(transcript.text)
二、语音合成:Edge-TTS
2.1 Edge-TTS(免费方案)
import edge_tts
import asyncio
async def text_to_speech(text, output_file, voice="zh-CN-XiaoxiaoNeural"):
communicate = edge_tts.Communicate(text, voice)
await communicate.save(output_file)
# 可用中文语音
# zh-CN-XiaoxiaoNeural - 女声, 温柔
# zh-CN-YunxiNeural - 男声, 年轻
# zh-CN-YunjianNeural - 男声, 成熟
# zh-CN-XiaoyiNeural - 女声, 活泼
asyncio.run(text_to_speech("你好,我是AI助手", "output.mp3"))
2.2 ElevenLabs(高质量方案)
import elevenlabs
elevenlabs.set_api_key("your_api_key")
audio = elevenlabs.generate(
text="Hello, I am your AI assistant.",
voice="Rachel",
model="eleven_multilingual_v2"
)
elevenlabs.save(audio, "output.mp3")
三、完整语音助手流程
# 完整流程
1. 麦克风录音 -> audio.wav
2. Whisper语音识别 -> "今天天气怎么样"
3. GPT生成回复 -> "今天北京晴,气温25度,适合外出"
4. Edge-TTS语音合成 -> reply.mp3
5. 播放回复音频
# 完整代码
import whisper, edge_tts, asyncio, openai
# 识别
model = whisper.load_model("base")
result = model.transcribe("input.wav", language="zh")
user_text = result["text"]
# 生成回复
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role":"user","content":user_text}]
)
reply_text = response.choices[0].message.content
# 合成语音
async def synthesize():
c = edge_tts.Communicate(reply_text, "zh-CN-XiaoxiaoNeural")
await c.save("reply.mp3")
asyncio.run(synthesize())
四、WebSocket实时语音对话
# 使用WebSocket实现实时语音对话
import websockets
import json
async def voice_handler(websocket):
async for message in websocket:
# 接收音频数据
audio_data = message
# 识别
text = recognize(audio_data)
# 生成回复
reply = await generate_reply(text)
# 合成语音
audio = await synthesize(reply)
# 发送回复音频
await websocket.send(audio)
# 启动WebSocket服务器
async def main():
async with websockets.serve(voice_handler, "0.0.0.0", 8765):
await asyncio.Future()
asyncio.run(main())
五、性能优化
优化建议:
- 流式识别:使用Whisper的streaming模式,边录音边识别
- VAD检测:使用WebRTC VAD检测语音段,避免处理静音
- 异步处理:识别、生成、合成三步并行
- 模型缓存:预加载模型到内存,避免每次加载
总结
AI语音助手的核心是ASR+LLM+TTS三件套。Whisper负责语音识别,GPT负责生成回复,Edge-TTS/ElevenLabs负责语音合成。掌握这三个模块,就可以构建各种语音交互应用。
如果需要语音助手开发服务,欢迎联系17老师。
关于17老师:AI应用 · 数字化管理 · 全栈开发 · 网络安全全栈专家。联系邮箱:j.d88888888@qq.com,微信:AFIST17