城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

快速上手Dialogflow交互机器人

2月6日 颜如初投稿
  作者:MeshCloud脉时云公有云架构师陈博文简介:
  Dialogflow是Google提供的一款人机交互平台,通过该平台可以轻松地设计出属于自己的交互机器人,比如常见的网页聊天机器人,电话智能客服等。借助Dialogflow甚至可以用于扫地机器人交互系统或者更高级的使用。
  Dialogflow通过客户输入的语音或者文字甚至情感分析,来识别客户的意图(Intens),结合实体(Entities),来进行相应的回复。
  Dialogflow的几个优点:识别准确率高,响应速度快支持30多种语言和语言变体上手简单:图形界面配置;官方文档丰富、详细;网络上有案例可供参考有问题易解决:开发者社区超过150万名开发者
  Dialogflow经典案例:
  一、马航的订票查票机器人:
  使用GoogleCloud上的Dialogflow,马来西亚航空公司和Amadeus创建了一个聊天机器人,使客户能够搜索、预订和支付航班,从而使航空公司能够满足未来的需求并增加数字渠道的收入。
  二、达美乐披萨的订餐机器人:
  三、KLM预定、打包机器人:
  KLM于2016年开始探索为客户提供体验的方法。他们在测试多个平台后选择了Dialogflow。
  常用工具
  一、内置SmallTalk
  SmallTalk用于为闲聊对话提供响应。此功能可以解答代理范围之外的常见问题,极大地提升最终用户体验。
  SmallTalk有两种版本:内置SmallTalk:为代理启用SmallTalk后,它会自动处理闲聊对话,无需向代理添加意图。预建SmallTalk:导入预建SmallTalk代理时,它会提供处理闲聊对话的意图。
  二、prebuiltagent
  由Dialogflow提供的一组代理,适用于常见的使用场景。您可以这些代理为基础,构建涵盖特定场景(如外出就餐、酒店预订和导航)的对话。
  由Dialogflow提供的一组代理,适用于常见的使用场景。您可以这些代理为基础,构建涵盖特定场景(如外出就餐、酒店预订和导航)的对话。
  如何制作一个自己的天气新闻语音问答机器人
  使用了文字输入Dialogflow的方式
  通过speechtotext将音频麦克风流到Dialogflow的文本意图检测API
  案例使用了以下GCP产品:DialogflowESKnowledgeBasesSpeechtoText
  其它组件:WebhookWeathersNewsAPI
  在这个demo中你可以使用麦克风输入,然后返回新闻或者天气
  一、DialogflowES(页面配置)
  1、意图配置
  配置输入
  配置回复
  2、Webhook配置
  意图开启Fulfillment
  添加webhook
  webhook代码importrequests新闻接口fromnewsapiimportNewsApiClientimporttimeimportjson使用了flask框架fromflaskimportFlask,requestimportpycountryfromgevent。pywsgiimportWSGIServerappFlask(name)app。route(webhook,methods〔POST〕)defwebhook():Dialogflowdatajson。loads(request。data)intentDialogflowdata〔queryResult〕〔intent〕〔displayName〕print()ifintentnews:responseTextcallnewsapi()newsresponseText〔articles〕〔0〕〔title〕print(news)headlineheadlinenewsiss(news)需要按要求返回dialogflow才能回复给客户端fulfillmentText是客户端接收消息res{fulfillmentText:headline,fulfillmentMessages:〔{text:{text:〔headline〕}}〕}return(res)elifintentweather:CITYDialogflowdata〔queryResult〕〔parameters〕〔geocity〕key479284d0d8574437b8170935221508responseTextjson。loads(callweatherapi(key,CITY))mintempresponseText〔data〕〔ClimateAverages〕〔0〕〔month〕〔7〕〔avgMinTemp〕maxtempresponseText〔data〕〔ClimateAverages〕〔0〕〔month〕〔7〕〔absMaxTemp〕tempresLondonMaxtempissMintempeiss(maxtemp,mintemp)需要按要求返回dialogflow才能回复给客户端fulfillmentText是客户端接收消息res{fulfillmentText:tempres,fulfillmentMessages:〔{text:{text:〔tempres〕}}〕}return(res)defcallweatherapi(key,CITY):time。sleep(0。01)responserequests。post(http:api。worldweatheronline。compremiumv1weather。ashx?keysqsfxnoccnomcayesformatjson(key,CITY))ifresponse。statuscode200:return(response。text)defcallnewsapi():newsapiNewsApiClient(apikey0eaad3923a654da2a2a32d84870e0405)responsenewsapi。gettopheadlines(languagees)return(response)ifnamemain:WSGIServer((0。0。0。0,5000),app)。serveforever()app。run(host0。0。0。0,port5000,sslcontext(rootscs1660552637313cbw404。cnscs1660552637313cbw404。cnNginxscs1660552637313cbw404。cnserver。crt,rootscs1660552637313cbw404。cnscs1660552637313cbw404。cnNginxscs1660552637313cbw404。cnserver。key))
  新闻接口:http:api。worldweatheronline。compremiumv1weather。ashx?keyapikeyqcityfxnoccnomcayesformatjson
  天气接口:installpipinstallnewsapipythonusagefromnewsapiimportNewsApiClientinitnewsapiNewsApiClient(apikeyAPIKEY)v2topheadlinestopheadlinesnewsapi。gettopheadlines(qbitcoin,sourcesbbcnews,theverge,categorybusiness,languageen,countryus)v2everythingallarticlesnewsapi。geteverything(qbitcoin,sourcesbbcnews,theverge,domainsbbc。co。uk,techcrunch。com,fromparam20171201,to20171212,languageen,sortbyrelevancy,page2)v2topheadlinessourcessourcesnewsapi。getsources()
  二、Speechtotext(后面简称stt)toDialogflow
  1、准备工作
  权限配置下载serviceaccountjson格式Linux:配置环境变量exportGOOGLEAPPLICATIONCREDENTIALSjsonpathjsonpath为1中下载的sa的json文件Windows:setGOOGLEAPPLICATIONCREDENTIALSC:UsersAdministratorDownloadssa。json
  python包python包googlecloudspeechpyaudiogoogleclouddialogflowpythondotenvuuid
  。env文件用于读取配置PROJECTIDprojectid这里做的西班牙语测试LANGUAGECODEes语音的一些参数设置,保持默认ENCODINGAUDIOENCODINGLINEAR16SAMPLERATEHERZ16000SINGLEUTTERANCEfalseSPEECHENCODINGLINEAR16SSMLGENDERFEMALEdialogflow的区域(有us,es,zh)LOCATIONIDglobal
  2、Speechtotext
  使用实时流式音频执行识别(transcribestreamingmic),也就是麦克风持续输入,代码如下:!usrbinenvpythonGoogleCloudSpeechAPIsampleapplicationusingthestreamingAPI。NOTE:Thismodulerequirestheadditionaldependencypyaudio。Toinstallusingpip:pipinstallpyaudioExampleusage:pythontranscribestreamingmic。pyfromfutureimportpisionimportreimportsysfromgoogle。cloudimportspeechimportpyaudiofromsix。movesimportqueueRATE16000CHUNKint(RATE10)100msclassMicrophoneStream(object):Opensarecordingstreamasageneratoryieldingtheaudiochunks。definit(self,rate,chunk):self。raterateself。chunkchunkself。buffqueue。Queue()self。closedTruedefenter(self):self。audiointerfacepyaudio。PyAudio()self。audiostreamself。audiointerface。open(formatpyaudio。paInt16,channels1,rateself。rate,inputTrue,framesperbufferself。chunk,streamcallbackself。fillbuffer,)self。closedFalsereturnselfdefexit(self,type,value,traceback):self。audiostream。stopstream()self。audiostream。close()self。closedTrueself。buff。put(None)self。audiointerface。terminate()deffillbuffer(self,indata,framecount,timeinfo,statusflags):Continuouslycollectdatafromtheaudiostream,intothebuffer。self。buff。put(indata)returnNone,pyaudio。paContinuedefgenerator(self):whilenotself。closed:chunkself。buff。get()ifchunkisNone:returndata〔chunk〕whileTrue:try:chunkself。buff。get(blockFalse)ifchunkisNone:returndata。append(chunk)exceptqueue。Empty:breakyieldb。join(data)deflistenprintloop(responses):numcharsprinted0forresponseinresponses:ifnotresponse。results:continueresultresponse。results〔0〕ifnotresult。alternatives:continuetranscriptresult。alternatives〔0〕。transcriptoverwritechars(numcharsprintedlen(transcript))ifnotresult。isfinal:sys。stdout。write(transcriptoverwritecharsr)sys。stdout。flush()numcharsprintedlen(transcript)else:print(transcriptoverwritechars)ifre。search(rb(exitquit)b,transcript,re。I):print(Exiting。。)breaknumcharsprinted0defmain():languagecodeenUSBCP47clientspeech。SpeechClient()configspeech。RecognitionConfig(encodingspeech。RecognitionConfig。AudioEncoding。LINEAR16,sampleratehertzRATE,languagecodelanguagecode,)streamingconfigspeech。StreamingRecognitionConfig(configconfig,interimresultsTrue)withMicrophoneStream(RATE,CHUNK)asstream:audiogeneratorstream。generator()requests(speech。StreamingRecognizeRequest(audiocontentcontent)forcontentinaudiogenerator)responsesclient。streamingrecognize(streamingconfig,requests)Now,putthetranscriptionresponsestouse。listenprintloop(responses)ifnamemain:main()
  3、Dialogflow
  调用检测意图,代码如下:!usrbinenvpythonDialogFlowAPIDetectIntentPythonsampletouseregionalendpoint。Examples:pythondetectintenttextswithlocation。pyhpythondetectintenttextswithlocation。pyprojectidPROJECTIDlocationidLOCATIONIDsessionidSESSIONIDhellobookameetingroomMountainViewimportargparseimportuuiddefdetectintenttextswithlocation(projectid,locationid,sessionid,texts,languagecode):fromgoogle。cloudimportdialogflowsessionclientdialogflow。SessionsClient(clientoptions{apiendpoint:f{locationid}dialogflow。googleapis。com})session(fprojects{projectid}locations{locationid}agentsessions{sessionid})print(fSessionpath:{session})textinputdialogflow。TextInput(texttexts,languagecodelanguagecode)queryinputdialogflow。QueryInput(texttextinput)responsesessionclient。detectintent(request{session:session,queryinput:queryinput})print(20)print(fQuerytext:{response。queryresult。querytext})print(fDetectedintent:{response。queryresult。intent。displayname}(confidence:{response。queryresult。intentdetectionconfidence,}))print(fFulfillmenttext:{response。queryresult。fulfillmenttext})ifnamemain:parserargparse。ArgumentParser(descriptiondoc,formatterclassargparse。RawDescriptionHelpFormatter)parser。addargument(projectid,helpProjectagentid。Required。,requiredTrue)parser。addargument(locationid,helpLocationid。Required。,requiredTrue)parser。addargument(sessionid,helpIdentifieroftheDetectIntentsession。DefaultstoarandomUUID。,defaultstr(uuid。uuid4()),)parser。addargument(languagecode,helpLanguagecodeofthequery。DefaultstoenUS。,defaultenUS,)parser。addargument(texts,nargs,typestr,helpTextinputs。)argsparser。parseargs()detectintenttextswithlocation(args。projectid,args。locationid,args。sessionid,args。texts,args。languagecode,)
  4、(主要代码)将stt的结果(文字)输出到Dialogflow意图检测,Dialogflow作出回复
  流程:
  代码如下:!usrbinenvpythonGoogleCloudSpeechAPIsampleapplicationusingthestreamingAPI。NOTE:Thismodulerequirestheadditionaldependencypyaudio。Toinstallusingpip:pipinstallpyaudioExampleusage:pythontranscribestreamingmic。pyfromfutureimportpisionimportreimportsysfromgoogle。cloudimportspeechimportpyaudiofromsix。movesimportqueueimportosimportuuid调用Dialogflow意图检测包(代码见2。dialogflow)fromdetectintenttextswithlocationimportdetectintenttextswithlocationfromdotenvimportloaddotenvRATE16000CHUNKint(RATE10)100msclassMicrophoneStream(object):Opensarecordingstreamasageneratoryieldingtheaudiochunks。definit(self,rate,chunk):self。raterateself。chunkchunkself。buffqueue。Queue()self。closedTruedefenter(self):self。audiointerfacepyaudio。PyAudio()self。audiostreamself。audiointerface。open(formatpyaudio。paInt16,channels1,rateself。rate,inputTrue,framesperbufferself。chunk,streamcallbackself。fillbuffer,)self。closedFalsereturnselfdefexit(self,type,value,traceback):self。audiostream。stopstream()self。audiostream。close()self。closedTrueself。buff。put(None)self。audiointerface。terminate()deffillbuffer(self,indata,framecount,timeinfo,statusflags):Continuouslycollectdatafromtheaudiostream,intothebuffer。self。buff。put(indata)returnNone,pyaudio。paContinuedefgenerator(self):whilenotself。closed:chunkself。buff。get()ifchunkisNone:returndata〔chunk〕whileTrue:try:chunkself。buff。get(blockFalse)ifchunkisNone:returndata。append(chunk)exceptqueue。Empty:breakyieldb。join(data)deflistenprintloop(responses):loaddotenv(verboseTrue)numcharsprinted0forresponseinresponses:ifnotresponse。results:continueresultresponse。results〔0〕ifnotresult。alternatives:continuetranscriptresult。alternatives〔0〕。transcriptoverwritechars(numcharsprintedlen(transcript))ifnotresult。isfinal:sys。stdout。write(transcriptoverwritecharsr)sys。stdout。flush()numcharsprintedlen(transcript)else:从。env中导出Projectid等配置,可以通过修改。env修改TEXTtranscriptoverwritecharsprint(transcriptoverwritechars)PROJECTIDos。getenv(PROJECTID)SESSIONIDuuid。uuid1()LANGUAGECODEos。getenv(LANGUAGECODE)LocationIDLOCATIONIDos。getenv(LOCATIONID)意图检测TEXT为mic接收到的语音转成的文字(代码见2。dialogflow)detectintenttextswithlocation(PROJECTID,LOCATIONID,SESSIONID,TEXT,LANGUAGECODE)Exitrecognitionifanyofthetranscribedphrasescouldbeoneofourkeywords。对麦克风说exit即可退出ifre。search(rb(exitquit)b,transcript,re。I):print(Exiting。。)breaknumcharsprinted0defmain():languagecodeenUSBCP47clientspeech。SpeechClient()configspeech。RecognitionConfig(encodingspeech。RecognitionConfig。AudioEncoding。LINEAR16,sampleratehertzRATE,languagecodelanguagecode,)streamingconfigspeech。StreamingRecognitionConfig(configconfig,interimresultsTrue)withMicrophoneStream(RATE,CHUNK)asstream:audiogeneratorstream。generator()requests(speech。StreamingRecognizeRequest(audiocontentcontent)forcontentinaudiogenerator)responsesclient。streamingrecognize(streamingconfig,requests)listenprintloop(responses)ifnamemain:main()
  Locationid:(上面意图检测API的locationid参数)
  国家地区分组
  地理位置
  地区ID
  美洲
  爱荷华
  uscentral1
  美洲
  蒙特利尔
  northamericanortheast1
  美洲
  南卡罗来纳
  useast1
  美洲
  俄勒冈
  uswest1
  欧洲
  比利时
  europewest1
  欧洲
  伦敦
  europewest2
  欧洲
  法兰克福
  europewest3
  亚太地区
  悉尼
  australiasoutheast1
  亚太地区
  东京
  asianortheast1
  亚太地区
  孟买
  asiasouth1
  亚太地区
  新加坡
  asiasoutheast1
  全球
  全球服务,静态数据在美国
  global(首选)、us或无区域(默认)
  5、测试
  Dialogflowweb测试:Fulfillment通过webhookresponse格式化数据后返回给客户端,测试成功
  程测试:micsttdialogflowclient(defaultwelcomeintentdefaultresponse)
  测试成功:
  可以看到语音输入的内容转成了文字,并发送给了dialogflow的意图检测,并匹配意图给出相应的回复
  全流程测试:micsttdialogflowfulfillmentwebhookapiclient
  对麦克风说:noticias(西语新闻)
  返回:头条新闻的标题,测试成功
  三、总结
  至此,一个天气新闻语音问答机器人就做好了
  官方还提供了另外的集成或者使用方式,可以供大家参考学习。希望这篇文章对大家有抛砖引玉的作用,以便大家能做出更高级更智能、更符合自己项目的交互机器人
投诉 评论 转载

哪怕这个世界上孤身一人,我也想好好热爱这个世界不知道你们有没有经历过过春节的时候,明明是一家人好不容易团圆的日子,可是家里却经常都是争吵声的日子;不知道你们有没有想过一个人十几年一直活在争吵声的日子是怎么过来的一直以……京东物流与泰森中国在山东日照共建冷库开仓试运营据京东物流官微,10月8日,京东物流与泰森中国共建的位于山东日照的泰森山东自动化立体冷库开仓试运营。泰森中国与京东集团去年达成战略合作关系。根据战略合作协议,双方将在供应链规划……登月不再是美国的专属游戏很多人可能都有一个相同的梦想:也许有一天,我们能够走出地球,踏上太阳系里的其他星球的表面,建立能够支持大规模居住的前哨基地,前往更加遥远的星系,探索深远的太空。那样……蔚来ET7有对手了?岚图首款轿车定名追光低趴范儿十足日前,岚图汽车官方宣布,旗下的首款轿车名称为追光,而且官方称追光预计将于11月首发亮相。和这一消息一同公布的还有岚图轿车的光影图,新车采用了以光为翼的前脸造型,赋光于形的……世界杯巡礼之葡萄牙C罗大嘴扰乱军心?超级攻击线不逊巴西近日,C罗接受了名嘴皮尔斯摩根的采访,对曼联俱乐部上下一顿狂喷,他表示俱乐部被判了他,今年夏窗有人要逼他走,还对现任主教练滕哈赫以及前任主教练朗尼克大放厥词。在世界杯只剩一周的……中秋夜,来顺义一起读诗赏月!中秋这一天不论人们身在何处都会举头望月天涯共此时千里共婵娟一家人聚在一起吃月饼、赏月亮让我们聆听最美的中秋诗词寄一份情思,道一声……冰棒的出生和成长2021。12。28上午9。35分,冰棒出生啦妈妈凌晨三点推到产房,爸爸在外面焦急的等待,还好时间不长,你出生了。爸爸很开心,妈妈很辛苦。爸爸永远忘不了从产房出来,看到你……微信封号新规以下5种行为,就有被封号的风险微信作为当前人们使用最多的社交软件之一,不仅能够实现朋友间的交流、生活分享,还能够进行移动支付、金融理财。但伴随着越来越多的人使用微信,许多不法分子便开始利用微信从事违法犯罪活……全球纸质载带龙头,洁美科技聚焦高端离型膜,国产化大有可为(报告出品方分析师:华福证券魏征宇)一、公司分析:细分赛道龙头地位稳固,拓展产业链增厚利润1。1公司概况:多点布局深切景气赛道,步步加码打开离型膜市场洁美科技成立于……快速上手Dialogflow交互机器人作者:MeshCloud脉时云公有云架构师陈博文简介:Dialogflow是Google提供的一款人机交互平台,通过该平台可以轻松地设计出属于自己的交互机器人,比如常见的……XR技术带来的数据流动和隐私风险什么是XR技术?XR为ExtendedReality,包含了AR(增强现实)、VR(虚拟现实)、MR(混合现实),主要指通过相应的硬件设备,并结合多种软件技术手段,将虚拟……错过双十一不要紧,多款旧旗舰机型降至冰点价,超值优惠不容错过如果你担心错过双十一买手机会贵,不妨考虑一下这三款旧旗舰机型,配置出色不说价格还合适,入手真的很香。第一款:iQOO9Pro不得不说这款手机的配置和颜值还是很出彩的,如果……
荣耀X40GT和荣耀80GT相比,各有什么优势?需求不同选择二叠纪大灭绝期间紫外线辐射增加?化石花粉粒中防晒霜添证据27岁的运动员王一博去世,人生苦短,且行且珍惜中国斯诺克大捷,丁俊晖42完胜真的是开眼了!连世界杯赛场上使用的草坪都是满满的高科技自驾游时,走国道还是走高速更划算?老司机国道省时不省钱盘点神探狄仁杰中的圣旨和奏章文字,与诸君共赏必须了解的Linux性能基础知识女超联赛第10轮比赛在平淡中结束,张琳艳们进入集训时间油价调整消息今天11月4日,加油站9295号汽油调后新零售价胡明轩一战对不起5个人!该主动道歉退出男篮,才能帮杜锋减压人生没有如果
巨型贵宾犬(巨型贵宾犬,为什么少人养?)热评聚热点网 二年级下册班务工作总结2007年安徽高考满分作文提篮春光看妈妈(7)多地楼盘烂尾业主强制停贷,多少业主悔不当初买了期房学生之间互相送礼物一般都送什么学生之间互相送礼物一般都送哪些游览美丽的五象湖公园刘智扬曝初秋写真大片橙系热情演绎最美的青春人的感情居然不如狗万方数据库如何免费下载开裆裤造句用开裆裤造句大全怎么知道男性精液是否健康十个方面来解析麦克风不能说话(语音话筒不发音时解决办法)

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁