写在前面
如果你的身边有一个随时待命、聪明绝顶的AI小助手,能够听懂你的话,理解你的需求,用温暖的声音回应你,会是一种什么体验?
今天,带大家从0到1搭建一个语音对话机器人,分分钟拥有一个专属的个人AI小助手。
本文面向技术小白,以最通俗易懂的语言,最贴心的步骤指导,确保你能够轻松上手,快速掌握。
语音对话系统的基本组成有哪些?
一个可以实现语音对话的机器人,通常需要由硬件和软件构成,硬件可以理解为机器人的躯体。
本篇主要来聊聊语音对话机器人的软件部分。
说到软件部分,通常又可以抽象为三个部分:
自动语音识别(Automatic Speech Recognition, 简称 ASR),相当于 机器人的耳朵,用于把我们的语音识别成文字;
自然语言处理(Natural Language Processing, 简称 NLP),相当于 机器人的大脑,理解上一步得到的文字信息,并进行答复,当前主流的解决方案是大语言模型LLM;
文本到语音合成(Text to Speech,简称 TTS),相当于 机器人的嘴巴,把上一步的答复用语音回答出来
如何快速搭建语音对话系统?
为了帮助大家从0到1快速完成一个系统的搭建,本文将完全采用开源方案来实现。具体而言:
ASR 采用 FunASR,相比 OpenAI 开源的 Whisper,中文识别效果更好;
NLP 采用大语言模型(LLM)方案,比如我们这里可以采用 LLaMA3-8B,采用本地的 GPU 部署和运行,如果没有本地 GPU 资源,也可以调用云端 API 实现这一步;
TTS 采用 最新开源的 ChatTTS,它是专门为对话场景设计的文本转语音模型,支持英文和中文两种语言,效果非常惊艳。
1 语音识别 ASR
ASR 采用阿里开源的 FunASR,相比 OpenAI 开源的 Whisper,中文识别效果更好。
GitHub地址:https://github.com/modelscope/FunASR 模型调用参考:https://modelscope.cn/studios/iic/funasr_app_clipvideo/summary
通过如下代码,我们简单测试一下返回结果和模型效果:
from funasr import AutoModel
# asr model
funasr_model = AutoModel(model="iic/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch",
vad_model="damo/speech_fsmn_vad_zh-cn-16k-common-pytorch",
punc_model="damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch",
spk_model="damo/speech_campplus_sv_zh-cn_16k-common",
)
rec_result = funasr_model.generate("test.wav", return_raw_text=False, is_final=True)
接下来我们需要将其封装成一个 API ,方便后续调用。最简单的我们可以采用 FastAPI 来实现封装,示例代码如下:
# 定义asr数据模型,用于接收POST请求中的数据
class ASRItem(BaseModel):
wav : str # 输入音频,base64编码
time_stamp : int = 0 # 时间戳,可选,默认为0
app = FastAPI()
@app.post("/asr")
async def asr(item: ASRItem):
time_stamp = int(item.time_stamp)
try:
data = base64.b64decode(item.wav)
rec_result = funasr_model.generate(data, return_raw_text=False, is_final=True)
res = rec_result[0]['sentence_info'] if time_stamp else rec_result[0]['text']
result_dict = {
"code": 0, "msg": "ok"<