大型网站 中小型网站失效网站建设费支出
大型网站 中小型网站,失效网站建设费支出,ciid中国室内设计官网,企业服务网站制作写在前面
如果你的身边有一个随时待命、聪明绝顶的AI小助手#xff0c;能够听懂你的话#xff0c;理解你的需求#xff0c;用温暖的声音回应你#xff0c;会是一种什么体验#xff1f;
今天#xff0c;带大家一起搭建一个语音对话机器人#xff0c;拥有一个专属的个人…写在前面
如果你的身边有一个随时待命、聪明绝顶的AI小助手能够听懂你的话理解你的需求用温暖的声音回应你会是一种什么体验
今天带大家一起搭建一个语音对话机器人拥有一个专属的个人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(modeliic/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch,vad_modeldamo/speech_fsmn_vad_zh-cn-16k-common-pytorch,punc_modeldamo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch,spk_modeldamo/speech_campplus_sv_zh-cn_16k-common,)
rec_result funasr_model.generate(test.wav, return_raw_textFalse, is_finalTrue)接下来我们需要将其封装成一个 API 方便后续调用。最简单的我们可以采用 FastAPI 来实现封装示例代码如下
# 定义asr数据模型用于接收POST请求中的数据
class ASRItem(BaseModel):wav : str # 输入音频base64编码time_stamp : int 0 # 时间戳可选默认为0app 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_textFalse, is_finalTrue)res rec_result[0][sentence_info] if time_stamp else rec_result[0][text]result_dict {code: 0, msg: ok, res: res}except Exception as e:result_dict {code: 1, msg: str(e)}return result_dictif __name__ __main__:uvicorn.run(app, host0.0.0.0, port2002)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-3step 2 下载模型
git clone https://www.modelscope.cn/ChineseAlpacaGroup/llama-3-chinese-8b-instruct.gitstep 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 21 step 5 服务调用 为了实现 LLM 的个性化回答当然需要给它设定一个特定的人设啦 ~ 这一步可以通过人设提示词来轻松搞定。下面给一个示例
from openai import OpenAI# 枚举所有可用的模型服务
model_dict {llama3-8b: {api_key: sk-xxx,base_url: http://10.18.32.170:2001/v1,},
}# 设置人设提示词根据需要进行修改
prompt_dict {llama3-8b: [{role: system, content: 你是猴哥的全能小助手上知天文下知地理可解决生活中的一切困扰。},],
}class LLM_API:def __init__(self, api_key, base_url, model):self.client OpenAI(api_keyapi_key,base_urlbase_url,)self.model modeldef __call__(self, messages, temperature0.7):completion self.client.chat.completions.create(modelself.model,messagesmessages,temperaturetemperature,)return completion.choices[-1].message.contentif __name__ __main__:model llama3-8bllm LLM_API(model_dict[model][api_key], model_dict[model][base_url], model)user_question 你是谁messages prompt_dict[model] [{role: user, content: user_question},]print(llm(messages))如果本地没有 GPU 资源部署 大语言模型也可以选择调用云端 API 来实现这一步猴哥下一篇就来梳理一下 我们都可以调用哪些免费的 LLM API?
欢迎追更
3 语音生成TTS
为了将大模型输出的文字生成语音返回这里我们采用 2024.5 刚开源的项目 - ChatTTS生成效果非常惊艳。关于 ChatTTS 的具体使用猴哥会单独出一篇教程否则本文的篇幅就太长了。
同样还是采用 FastAPI 来实现封装和部署 ASR 模型类似在此不再赘述。
PS需要源码的可到文末自取~
4 前端交互实现Gradio
Gradio是一个用于快速创建机器学习模型的交互式演示的开源库。它允许开发者通过简单的Python代码快速构建一个用户界面。
为了快速搭建应用我们还是要请出我们的老朋友 - Gradio交互界面如图所示
WebUI 代码奉上
import gradio as gr
from speech_client import asr_damo_api, tts_chat_api
from llm_client import LLM_API, prompt_dict, model_dicthost_avatar assets/host_image.png
user_avatar assets/user_image.pngmodel llama3-8b
# model gpt-4
llm LLM_API(model_dict[model][api_key], model_dict[model][base_url], model)with gr.Blocks(themegr.themes.ThemeClass) as demo:state gr.State({messages: []})with gr.Row():with gr.Column(scale1):user_chatbot gr.Chatbot(value[[None, 欢迎你来]],elem_classesapp-chatbot,avatar_images[host_avatar, user_avatar],label交互区,show_labelTrue,bubble_full_widthFalse,height800)with gr.Column(scale1):audio_user gr.Audio(labelUser Input, sources[microphone], typefilepath)user_text gr.Textbox(label语音识别内容)user_submit gr.Button(提交, variantprimary)audio_bot gr.Audio(labelBot Output, autoplayTrue, typefilepath)def process_audio(audio):print(Processing audio:, audio)text asr_damo_api(audio, time_stamp0, srtFalse)print(text)return textdef user_submit_handler(user_text, state, chatbot):chatbot.append((user_text, None))yield (chatbot, None)messages state[messages]if len(messages) 0:messages prompt_dict[model] [{role: user, content: user_text}]else:messages.append({role: user, content: user_text})print(messages)response llm(messages)chatbot.append((None, response))messages.append({role: assistant, content: response})print(messages)state[messages] messagesaudio tts_chat_api(response)print(audio)yield (chatbot, audio)audio_user.stop_recording(process_audio, inputsaudio_user, outputsuser_text)user_submit.click(user_submit_handler, inputs[user_text, state, user_chatbot], outputs[user_chatbot, audio_bot])demo.launch(server_name0.0.0.0, server_port7861)最后我们来看下效果 语音对话机器人-个人AI小助手 未完待续
至此一个语音对话交互系统就搭建好了当然目前只是为了演示基本功能界面还比较简陋在此基础上 还可以增加更多功能
ASR : 目前采用的 FunASR 模型在有噪声情况下识别效果还有待增强需要找到更有效的平替LLM模型本地部署对很多小伙伴还是有一定门槛需要找到平价 or 免费的云端 APITTSChatTTS的效果非常不错后续可以增加说话人身份实现更丰富的输出支持流式对话像 GPT-4o 那样自然打断。
如果本文对你有帮助欢迎点赞收藏备用
目前猴哥开始运营一个公众号旨在分享关于AI效率工具、自媒体副业的一切。用心做内容不辜负每一份关注。
如需要获取本项目的源码可关注后台发送 “机器人” 获取。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89463.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!