最佳实践 | 用腾讯云智能语音打造智能对话机器人

在AI技术的推动下,智能对话机器人逐渐成为我们工作、生活中的重要效率工具,乃至是伙伴,特别是为企业带来最原始最直观的“降本增效”落地实现。

作为开发者,你是否有想过基于语音技术打造一款智能对话机器人呢?

本文将可以手把手教你技术实现细节。

首先我们分析下智能对话机器人需要些什么东西:

1.语音输入:想要智能对话肯定需要语音的输入,输出。

2.语音识别:将语音识别成文字。

3.智能问答服务:将语音识别结果,输入该服务,并得到结果。

4.语音合成:将智能问答服务回答生成音频

5.语音播报:将智能问答服务回答的问题,用语音的形式播报给您听。

流程图:

语音采集:

1.使用腾讯云语音识别提供的SDK(安卓,IOS,微信小程序)

2.可以自行使用硬件录音设备采集音频

3.自己在端上(IOS,安卓等)调起录音设备采集音频

 

技术流程:

1.先采集音频

2.用音频流数据调用腾讯云语音识别(ASR)

3.将语音识别的文本数据调用智能问答服务

4.使用智能问答服务的回答调用腾讯云语音合成(TTS)

5.最后将语音合成产生的音频返回给端上播放

一、准备工作

1.1开通语音识别服务

笔者使用的是腾讯的语音识别,先开通一下服务,点这里 腾讯云语音识别控制台 , 点击立即开通就能开通服务了。

可以点击这里领取一个新人的体验资源包: 语音识别_实时语音识别_录音文件识别_语音转文本服务 - 腾讯云

1.2获取调用服务的API密钥

访问腾讯云的服务,都需要一个秘钥,在腾讯云访问管理的 API密钥管理页面 ,可以新建一个秘钥,这个可一定要保管好,不能泄露出去,不然就被别人盗用了。秘钥后面我们要用到。

1.3获取语音识别,语音合成SDK

语音识别SDK获取:语音识别 实时语音识别(websocket)-API 文档-文档中心-腾讯云

语音合成SDK获取:语音合成 基础语音合成-API 文档-文档中心-腾讯云

端SDK获取:

1.IOS:登录 - 腾讯云

2.安卓:登录 - 腾讯云

3.微信小程序:腾讯云智能语音 | 小程序插件 | 微信公众平台

1.4、接入智能问答服务 

WeLM:- WeLM

这里也可以使用别的智能问答服务,比如ChatGPT

二、代码开发

逻辑包含:

1.请求ASR实时识别

2.请求智能问答服务

3.请求TTS语音合成,获取音频

代码编译:

1.执行命令生成go.mod环境 go mod init demo

2.go build 编译

3.执行 ./demo -e 16k_zh -f 测试音频地址 -format 1

注:本代码只包含了服务端部分,可以自行接入SDK将音频流传到服务端识别。

package mainimport ("encoding/base64""flag""fmt"ttsCommon "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common""github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors""github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"tts "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tts/v20190823""github.com/tencentcloud/tencentcloud-speech-sdk-go/asr""github.com/tencentcloud/tencentcloud-speech-sdk-go/common""os""sync""time"
)var (AppID           = "输入appid"SecretID        = "输入密钥ID"SecretKey       = "输入密钥key"EngineModelType = "16k_zh"SliceSize       = 16000
)// MySpeechRecognitionListener implementation of SpeechRecognitionListener
type MySpeechRecognitionListener struct {ID int
}// OnRecognitionStart implementation of SpeechRecognitionListener
func (listener *MySpeechRecognitionListener) OnRecognitionStart(response *asr.SpeechRecognitionResponse) {
}// OnSentenceBegin implementation of SpeechRecognitionListener
func (listener *MySpeechRecognitionListener) OnSentenceBegin(response *asr.SpeechRecognitionResponse) {
}// OnRecognitionResultChange implementation of SpeechRecognitionListener
func (listener *MySpeechRecognitionListener) OnRecognitionResultChange(response *asr.SpeechRecognitionResponse) {
}// OnSentenceEnd implementation of SpeechRecognitionListener
func (listener *MySpeechRecognitionListener) OnSentenceEnd(response *asr.SpeechRecognitionResponse) {fmt.Printf("语音识别结果: %s \n", response.Result.VoiceTextStr)ConversationalRobot(response.Result.VoiceTextStr)
}// OnRecognitionComplete implementation of SpeechRecognitionListener
func (listener *MySpeechRecognitionListener) OnRecognitionComplete(response *asr.SpeechRecognitionResponse) {
}// OnFail implementation of SpeechRecognitionListener
func (listener *MySpeechRecognitionListener) OnFail(response *asr.SpeechRecognitionResponse, err error) {fmt.Printf("%s|%s|OnFail: %v\n", time.Now().Format("2006-01-02 15:04:05"), response.VoiceID, err)
}var proxyURL string
var VoiceFormat *int
var e *stringfunc main() {var f = flag.String("f", "test.pcm", "audio file")var p = flag.String("p", "", "proxy url")VoiceFormat = flag.Int("format", 0, "voice format")e = flag.String("e", "", "engine_type")fmt.Println("input-", *e, "-input")flag.Parse()if *e == "" {panic("please input engine_type")}if *VoiceFormat == 0 {panic("please input voice format")}proxyURL = *pvar wg sync.WaitGroupwg.Add(1)go processOnce(1, &wg, *f)fmt.Println("Main: Waiting for workers to finish")wg.Wait()fmt.Println("Main: Completed")}func processOnce(id int, wg *sync.WaitGroup, file string) {defer wg.Done()process(id, file)
}func process(id int, file string) {audio, err := os.Open(file)defer audio.Close()if err != nil {fmt.Printf("open file error: %v\n", err)return}listener := &MySpeechRecognitionListener{ID: id,}credential := common.NewCredential(SecretID, SecretKey)EngineModelType = *efmt.Println("engine_type:", EngineModelType)recognizer := asr.NewSpeechRecognizer(AppID, credential, EngineModelType, listener)recognizer.ProxyURL = proxyURLrecognizer.VoiceFormat = *VoiceFormaterr = recognizer.Start()if err != nil {fmt.Printf("%s|recognizer start failed, error: %v\n", time.Now().Format("2006-01-02 15:04:05"), err)return}data := make([]byte, SliceSize)//这里的data可以换成实时端上传输过来的音频流for n, err := audio.Read(data); n > 0; n, err = audio.Read(data) {if err != nil {if err.Error() == "EOF" {break}fmt.Printf("read file error: %v\n", err)break}//一句话识别结束会回调上面OnSentenceEnd方法err = recognizer.Write(data[0:n])if err != nil {break}time.Sleep(20 * time.Millisecond)}recognizer.Stop()
}func ConversationalRobot(text string) {//调用智能问答服务,获取回答Result := SendToGPTService(text)//把智能问答服务的文案转成音频文件audioData := TextToVoice(Result)//将音频文件返回给端上播放ResponseAudioData(audioData)
}func ResponseAudioData(audioData []byte) {//把音频数据audioData推到端上播放
}func SendToGPTService(text string) string {// API 调用智能问答服务// 获取智能问答服务返回结果result := "智能问答服务返回结果"fmt.Println("智能问答服务 API调用")return result
}func TextToVoice(text string) []byte {fmt.Println("语音合成调用")// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密// 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取credential := ttsCommon.NewCredential(SecretID,SecretKey,)// 实例化一个client选项,可选的,没有特殊需求可以跳过cpf := profile.NewClientProfile()cpf.HttpProfile.Endpoint = "tts.tencentcloudapi.com"// 实例化要请求产品的client对象,clientProfile是可选的client, _ := tts.NewClient(credential, "ap-beijing", cpf)// 实例化一个请求对象,每个接口都会对应一个request对象request := tts.NewTextToVoiceRequest()request.Text = ttsCommon.StringPtr(text)request.SessionId = ttsCommon.StringPtr("f435g34d23a24y546g")// 返回的resp是一个TextToVoiceResponse的实例,与请求对象对应response, err := client.TextToVoice(request)if _, ok := err.(*errors.TencentCloudSDKError); ok {fmt.Printf("An API error has returned: %s", err)return nil}if err != nil {panic(err)}// 输出json格式的字符串回包audioData, _ := base64.StdEncoding.DecodeString(*response.Response.Audio)fmt.Println("语音合成调用结束")return audioData
}

以上就是智能语音对话机器人技术细节的实现,感兴趣的同学也可以实操或者进行拓展开发。

目前,智能对话机器人已经在客户触达、营销运营、窗口服务和人机对话交互等经济生产活动环节进入规模化落地阶段,随着AI技术的不断创新,智能对话机器人也将衍生出更高阶、更智能的模式。

腾讯云智能面向企业客户与开发者也提供了一站式的语音技术服务,更多产品信息也可以前往腾讯云官网了解。

腾讯云智能语音识别:语音识别_实时语音识别_录音文件识别_语音转文本服务 - 腾讯云

腾讯云智能语音合成:语音合成_语音定制_文本转语音服务 - 腾讯云

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13360.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型(LLM)发展历程及模型相关信息汇总(2023-07-12更新)

大语言模型(large language model,LLM)发展历程及模型相关信息汇总(2023-07-12更新) LLM发展时间轴:以下用表格形式汇总了从 BERT(2018-10-11)到 Baichuan(203-06-15)共计 58种语言大…

一些常用的搜索技巧总结

最近ChatGPT的出现让全网哗然,其对自然语言和代码的处理能力,对文字的理解能力和固定模板下的创作能力都强得离谱。但比起这些,最令我惊讶的还是他及其庞大的知识库。数以千亿计的训练数据让他切实的做到了博古通今。在我看来,拥有…

chatgpt赋能Python-pycharm改名字

PyCharm更名为JetBrains PyCharm——专属Python开发者的最佳IDE JetBrains PyCharm是一款Python开发者最喜欢使用的IDE之一。然而,在2021年初,这款世界著名的Python IDE进行了一次重大更名——PyCharm更名为JetBrains PyCharm。在这篇文章中&#xff0c…

Claude 使用教程 AI助手,可平替Chatgpt,无需魔法

今天来分享下Claude AI工具2023-4月最新使用方法, Claude是Anthropic公司开发的一种基于大型语言模型的AI助手,类似于ChatGPT。 背景:Anthropic是一家由OpenAI的前联合创始人Dario Amodei和他的妹妹Daniela Amodei创立的AI研究公司 。他们的…

使用魔法改善魔法,用chatgpt生成剪贴板保存工具减轻工作量

最近开始使用chatgpt生成代码来编写小工具,大部分时候还算靠谱,就是每次从网页上粘贴内容到编辑器中比较麻烦,尤其是chatgpt洋洋洒洒,给了若干个程序代码,一个个的粘贴真是要了老命了。 试了试cursor,发现也…

Claude 免注册教程

前 OpenAI 副总裁创建的人工智能新项目 “Claude” 来了,有望与 ChatGPT 展开激烈竞争。 Claude 是什么? Claude 是由人工智能安全创业公司 Anthropic 开发的 AI 产品。Anthropic 由多位知名高校的人工智能专家联合创立,其宗旨是研究如何设计…

天津市人工智能计算中心揭牌 天下津梁融汇AI之力

“九河下稍天津卫,三道浮桥两道关”,这是天津人熟知的一句话,意思是九河下稍的尽头是天津卫,是说天津是九条河流的入海口。自明永乐二年天津设卫以来,这座城市就是江河汇聚、贯通南北的水陆码头。天津名字的由来之一&a…

昇腾AI深耕沽上:港口辐射力之后,天津再添基础创新辐射力

作者 | 曾响铃 文 | 响铃说 AI计算正在以新基建联动产业集群的方式,加速落地。 不久前,天津市人工智能计算中心正式揭牌,该中心整体规划300P算力,2022年底首批100P算力上线投入运营,并实现上线即满载。 这是昇腾AI…

AIGC:StableLM 简介

文章目录 [toc]简介应用实践小结其他 简介 众所周知,去年初创公司 Stability AI 发布的 AI 图像生成工具 Stable Diffusion,成为一种革命性的图像模型,也使 AI“文生图”实现了飞速的发展。满载着大家对其“不再局限于开发图像生成”和“开源…

Stable Diffusion公司开源大语言模型StableLM,网友:不是我想要的!

整理 | 朱珂欣 出品 | CSDN(ID:CSDNnews) 众所周知,去年初创公司 Stability AI 发布的 AI 图像生成工具 Stable Diffusion,成为一种革命性的图像模型,也使 AI“文生图”实现了飞速的发展。 满载着大家对其“…

copilot使用教程

Copilot简介 Copilot是⼀种基于⼈⼯智能的代码⾃动补全⼯具,由OpenAI和GitHub共同开发。它使⽤⼈⼯智能算 法来分析代码库,并根据上下⽂和编程语⾔的语法提⽰,⾃动⽣成⾼质量的代码。⽬前,Copilot只能 与GitHub上的代码库集成&…

zblog负载过高导致访问不流畅处理办法

当您的zblog负载过高时,可能会导致网站响应时间过长,甚至无响应。这会影响到您的访客体验,同时也会影响您的网站排名。以下是一些应对方法: 1. 增加服务器资源:如果您的服务器配置过低,可以考虑增加资源&am…

Stable Diffusion公司开源大语言模型StableLM,网友:能把人逼疯!

整理 | 朱珂欣 出品 | CSDN(ID:CSDNnews) 众所周知,去年初创公司 Stability AI 发布的 AI 图像生成工具 Stable Diffusion,成为一种革命性的图像模型,也使 AI“文生图”实现了飞速的发展。 满载着大家对其“…

GPT 学术优化 (ChatGPT Academic)搭建过程(含ChatGLM cuda INT4量化环境和newbing cookie)

文章目录 1、GPT Academic2、chatGPT3、chatGLM4、newbing 1、GPT Academic 项目地址:地址 安装部分 git clone https://github.com/binary-husky/chatgpt_academic.git cd chatgpt_academicconda create -n gptac_venv python3.11 conda activate gptac_venv pyt…

OpenAI GPT3.5/GPT3 + Flask 制作自己的交互网页教程 | 附源码 和 Github链接

1. OpenAI GPT API 1.1 GPT 3.5 API (更新) 真正的 ChatGPT API, gpt-3.5-turbo,终于来了!不同于之前的 GPT3 text-davinci-003 的 api 版本。 GPT 3.5 版本生成的回答将十分的智能。 下图是现在OpenAI提供的模型。…

ChatGLM实战 - 文本信息抽取

1. ChatGLM介绍 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存&…

【ChatGLM】本地版ChatGPT ?6G显存即可轻松使用 !ChatGLM-6B 清华开源模型本地部署教程

目录 感谢B站秋葉aaaki大佬 前言 部署资源 部署流程 实机演示 ChatGML微调(人格炼成)(个人感觉蛮有趣的地方) 分享有趣の微调人格 实机演示(潘金莲人格) 感谢B站秋葉aaaki大佬 秋葉aaaki的个人空间…

清华版Chatgpt:chatglm-6B教程——如何从训练中确定最合适的学习率

我们在使用chatglm-6B的时候,总会遇到一个问题。即学习率如何确定。我们首先先看chatglm的两个训练用sh文件的学习率是如何确定的。 一、如何第一时间确定学习率 我们可以看到在chatglm给的标准中,对于聊天的训练所默认的学习率是要小于训练广告词的&…

来自清华的ChatGPT?GLM-130B详解

原文:来自清华的ChatGPT?GLM-130B详解 - 知乎 本文会分析一下来自清华的ChatGPT,这篇论文的价值很大,为什么这么将?因为他开源了所有代码,包括模型,baseline。确实是一个不错的里程碑。 GLM-1…

一种平价的chatgpt实现方案,基于清华的 ChatGLM-6B + LoRA 进行finetune.(aigc大模型风口,校招找工作必备)

** 清华大学的chatglm-6b开源模型对话能力虽然能基本满足对话需求,但是针对专业领域和垂直领域回答显得智商捉急,这个时候就需要进行微调来提升效果,但是但是同学们显卡的显存更捉急,这时候一种新的微调方式诞生了,现在…