在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技术的不断创新,智能对话机器人也将衍生出更高阶、更智能的模式。

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

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

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

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

  1. 最佳实践 | 用腾讯云AI语音识别零基础实现小程序语音输入法

    先回顾下,生活.工作中你使用过哪些语音识别相关的产品或者服务? 培训/考试相关的小程序,使用语音识别来判断回答是否正确: 英语口语练习的小程序,使用语音识别来打分: 你画我猜类的小程序,使用语音识别来 ...

  2. 最佳实践 | 基于腾讯云MRCP-Server打造简单智能外呼系统

    一.智能外呼架构简介 智能外呼在国内已发展多年,整体的技术早已非常成熟.那么一个简单的智能外呼系统应该包含哪些东西呢? 运营商:运营商的线路资源是外呼系统的基础,国内就是移动.联通.电信,也有一些集成 ...

  3. 最佳实践 | 用腾讯云AI人像变换给自己一次“跨越年龄的体验”

    互联网时代,日新月异的技术更迭让大众的娱乐方式变得更加多元化.越来越多线上娱乐体验成为新潮流,不少公司各出奇招,推出了AI人像特效.VR游景点.可交互影视剧.元宇宙等:人们花在线上娱乐体验的时间越来越 ...

  4. 最佳实践 | 用腾讯云慧眼人脸核身为诚信考试保驾护航

    点击参与:腾讯云AI用户实践有奖征稿活动! 2020年新冠疫情爆发后,疫情之下的考试在各国均受到不同程度的影响,"延期"."取消"."补考" ...

  5. 最佳实践 | 基于腾讯云ES如何跨地域容灾?跨集群复制为您解忧!

    作者:吴容,腾讯云大数据Elasticsearch高级开发工程师 腾讯云大数据ES目前已经提供了多可用区部署,即支持同地域跨机房的高可用容灾方案,满足了绝大多数客户的需求.但是依然会有部分客户希望进一 ...

  6. 腾讯云全面更新数据智能服务全景图!

    近日在腾讯云AI大数据新品发布会上,腾讯云副总裁王龙向听众全面介绍了当前腾讯云数据智能服务的全景布局.针对目前整体AI行业的发展趋势,他表示过去一招鲜的发展模式已经难以为继,取而代之的是真正能够产生价 ...

  7. 墙裂安利!用腾讯云AI语音合成打造自己的第一本有声书

    现代生活中,我们不可避免会遇到很多碎片时间,等公交.倒地铁.排核酸.买早点等等.这些时间累积起来,无疑是一笔很大的个人资源,而想利用这部分时间,听显然是最好的方式. 国内云计算语音合成服务已经非常成熟 ...

  8. 腾讯云携手合作伙伴打造5G生态,覆盖“云边网端”助推“万物智联”

    腾讯云携手合作伙伴打造5G生态,覆盖"云边网端"助推"万物智联" 8月25日,腾讯云率先公布5G新基建最新进展,成为国内首家全面构筑起覆盖"云-边-网 ...

  9. 干货,分布式数据库在金融核心场景的落地实践|腾讯云数据库

    金融行业作为国民经济的命脉和枢纽,对底层数据库的能力要求在不断提高.具有高性能.可扩展.高可用等特性的分布式数据库是金融行业数字化转型的重要支撑. 金融企业如何在不同的应用场景下,做好分布式数据库的选 ...

最新文章

  1. ssh(Spring+Spring mvc+hibernate)——Dept.hbm.xml
  2. 还在直接操作Redis?赶快来试试它....
  3. short类型占16位,可以赋给short类型的最大值32767,最小值为-32768
  4. python.pandas数据清洗(数据填充与条件删除)
  5. 编写Spark SQL查询程序
  6. 红帽linux安装wordpress,linux Centos怎么安装wordpress
  7. 极光推送指定用户推送_苹果推送iOS 12.1.4和macOS 10.14.3修复FaceTime 国内用户可酌情...
  8. beatmaker3 android,Hip-Hop Beat Maker app
  9. 电脑插入耳机声音奇怪,模糊不清楚。解决方法
  10. Mysql主从同步时Slave_IO_Running:Connecting ; Slave_SQL_Running:Yes的情况故障排除
  11. MQTT连接阿里云IOT
  12. 误删除文件怎么找回 数据恢复用这些方法
  13. 音符起始点检测(音频节奏检测)(4.5)
  14. net npf 服务名无效_win10系统打开wireshark提示npF驱动没有运行的处理方法
  15. CRAFT:Character Region Awareness for Text Detection 论文详解
  16. 仁慈的独裁者——Python之父吉多·范罗苏姆
  17. nginx 进行 https 反向代理 nextcloud 后 APP 不能访问的解决办法
  18. Python 全栈 60 天精通之路
  19. 【Mime类型】mime.json
  20. 小B从测试小白到测试大牛的过程

热门文章

  1. 面向对象:13、内部类
  2. 6位顺序号生成_短网址是怎么生成的?代码献上
  3. 微型计算机在机电产品中的运用,机电一体化中的计算机技术微型计算机在机电一体化中9.ppt...
  4. 卡尔曼滤波五个公式各个参数的意义
  5. 为什么你需要RS485转LoRaWAN的数据采集器?
  6. 检测网络是否稳定的计算机命令,网络不稳定情况下,该如何快速检测?
  7. Kotlin实现Banner广告轮播功能
  8. [转]通货膨胀是什么意思
  9. java基于springboot房屋租赁
  10. 【19调剂】华东交通大学软件学院软件工程硕士点2019年考研调剂登记信息