手把手带你搭建一个语音对话机器人,轻松定制个人AI小助手(新手入门篇)

20241003131909351

猴哥的第 期分享,欢迎追看

全文3227字

预计阅读时间8分钟

如果你的身边有一个随时待命、聪明绝顶的AI小助手,能够听懂你的话,理解你的需求,用温暖的声音回应你,会是一种什么体验?

今天,带大家一起搭建一个语音对话机器人,拥有一个专属的个人AI小助手。

本文面向技术小白,以最通俗易懂的语言,最贴心的步骤指导,确保你能够轻松上手,快速掌握。

语音对话系统的基本组成有哪些?

一个可以实现语音对话的机器人,通常需要由硬件和软件构成,硬件可以理解为机器人的躯体。

本篇主要来聊聊语音对话机器人的软件部分。

说到软件部分,通常又可以抽象为三个部分:

  • 自动语音识别(Automatic Speech Recognition, 简称 ASR),相当于 机器人的耳朵,用于把我们的语音识别成文字;
  • 自然语言处理(Natural Language Processing, 简称 NLP),相当于 机器人的大脑,理解上一步得到的文字信息,并进行答复,当前主流的解决方案是大语言模型LLM
  • 文本到语音合成(Text to Speech,简称 TTS),相当于 机器人的嘴巴,把上一步的答复用语音回答出来
20241003131911740
在这里插入图片描述

如何快速搭建语音对话系统?

为了帮助大家从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 ,方便后续调用。(PS:如需源码可到文末自取~)

2 大语言模型(LLM)

为了实现对话功能,我们可以采用当前的大语言模型(LLM),对上一步识别出来的文字进行理解,并给出答复。

本文的 LLM 采用 LLaMA3-8B,开源社区已经实现了对 LLaMA3-8B 的中文指令微调,为此中文效果会比原始版本效果更好。

GitHub地址:https://github.com/ymcui/Chinese-LLaMA-Alpaca-3 模型地址:https://modelscope.cn/models/ChineseAlpacaGroup/llama-3-chinese-8b-instruct/summary

在上述的 GitHub 仓库中,给出了一键部署的脚本,非常方便。四步走搞定它:

  • 下载代码
  • 下载模型
  • 安装必要的包
  • 服务启动
  • 服务调用

step 1 下载代码:

git clone https://github.com/ymcui/Chinese-LLaMA-Alpaca-3

step 2 下载模型:

git clone https://www.modelscope.cn/ChineseAlpacaGroup/llama-3-chinese-8b-instruct.git

step 3 安装必要的包:

pip install fastapi uvicorn shortuuid sse_starlette peft bitsandbytes
pip install flash-attn --no-build-isolation # 如果要使用flash-attention的话

step 4 服务启动:服务启动的代码如下,--base_model 替换为自己的模型路径,--load_in_4bit 指定了采用 4bit 量化。

注意:如果采用不量化的方案,显存占用12G,回复非常慢,有请求过来显存占用最高近14G,而采用4bit 量化,显存只占用 6G。

python scripts/oai_api_demo/openai_api_server.py 
--base_model /path/to/models/llama-3-chinese-8b-instruct/ 
--gpus 2 
--port 2001 
--load_in_4bit 
--use_flash_attention_2 
> log.txt 2>&1 &

step 5 服务调用:为了实现 LLM 的个性化回答,当然需要给它设定一个特定的人设啦 ~ ,这一步可以通过人设提示词来轻松搞定。下面给一个示例:

# 设置人设提示词,根据需要进行修改
prompt_dict = {
    'llama3-8b': [
        {"role""system""content""你是猴哥的全能小助手,上知天文,下知地理,可解决生活中的一切困扰。"},
    ],
}

如果本地没有 GPU 资源部署 大语言模型,也可以选择调用云端 API 来实现这一步,猴哥下一篇就来梳理一下:我们都可以调用哪些免费的 LLM API?

欢迎追更!

3 语音生成(TTS)

为了将大模型输出的文字生成语音返回,这里我们采用 2024.5 刚开源的项目 - ChatTTS,生成效果非常惊艳。关于 ChatTTS 的具体使用,猴哥会单独出一篇教程,否则本文的篇幅就太长了。

同样还是采用 FastAPI 来实现封装,和部署 ASR 模型类似,在此不再赘述。

(PS:如需源码可到文末自取~)

4 前端交互实现(Gradio)

Gradio是一个用于快速创建机器学习模型的交互式演示的开源库。它允许开发者通过简单的Python代码快速构建一个用户界面。

为了快速搭建应用,我们还是要请出我们的老朋友 - Gradio,交互界面如图所示:20241003131911296

来一段效果展示:






未完待续

至此,一个语音对话交互系统就搭建好了,当然目前只是为了演示基本功能,界面还比较简陋,在此基础上 ,还可以增加更多功能:

  • ASR : 目前采用的 FunASR 模型,在有噪声情况下识别效果还有待增强,需要找到更有效的平替;
  • LLM:模型本地部署对很多小伙伴还是有一定门槛,需要找到平价 or 免费的云端 API
  • TTS:ChatTTS的效果非常不错,后续可以增加说话人身份,实现更丰富的输出;支持流式对话,像 GPT-4o 那样自然打断。

 

阅读剩余
THE END