您好,欢迎访问三七文档
当前位置:首页 > 中学教育 > 初中教育 > 基于图灵机器人API的在线对话机器人模拟
机器人技术导论课程DIY实验报告成员李俊逸、高时清学号14281009、15281205日期2017.1.11北京交通大学机器人技术导论课程结课实验基于图灵机器人API的在线对话机器人模拟组长:李俊逸14281009成员:高时清15281205所在院系:计算机与信息技术学院机器人技术导论课程DIY实验报告成员李俊逸、高时清学号14281009、15281205日期2017.1.12一、背景概述:1.1对话类机器人简介:聊天机器人(chatterbot)是一个用来模拟人类对话或聊天的程序。“Eliza”和“Parry”是早期非常著名的聊天机器人。它试图建立这样的程序:至少暂时性地让一个真正的人类认为他们正在和另一个人聊天。Chatterbots已应用于在线互动游戏Tinymuds。其他较知名的聊天机器人还包括:TalkBot最初作为一个在线聊天系统,TalkBot是克莉斯·克沃特于1998年用javascript和PERL语言编写完成的,并于2001年和2002年两次获得“ChatterboxChallenge”比赛的冠军。Elbot艾尔伯特在德语聊天机器人查理的程序改进后诞生了艾尔伯特,2000年底德语版艾尔伯特就开始在线聊天,并且到了2001年连英语版也有了。在2003年获得“ChatterboxChallenge”比赛冠军。eLise伊莉斯讲德语的聊天机器人。伊莉斯由Java分子编辑器前端、Java服务器以及一种知识编辑器组成。其中,知识程序包括了1100多节点,而且还在不停升级。Alice艾丽斯1995年11月23日,艾丽斯Alice诞生了。艾丽斯的名字是由英文“人工语言在线计算机实体”的头一个字母的缩写拼成。科学家华莱士将这个聊天程序安装到网络服务器,然后待在一边观察网民会对它说什么。随着华莱士对艾丽斯的升级与艾丽斯聊天经验的日渐丰富,艾丽斯越来越厉害。2000年、2001年、2004年艾丽斯三夺勒布纳奖。艾丽斯是乔治的强劲对手,曾一度被认为是最聪明的聊天机器人。Laylahbot蕾拉伯特由原始的艾丽斯程序改头换脸而来。整个程序和华莱士在2002年编写的艾丽斯的程序基本没什么差别。蕾拉伯特的存在是试图对基本的“人工语言在线计算机实体”聊天机器人的性能、功能提供一个范本。Siri(苹果语音助手)Siri是苹果公司在其产品iPhone4S,iPad3及以上版本手机和Mac上应用的一项智能语音控制功能。Siri可以令iPhone4S及以上手机(iPad3以上平板)变身为一台智能化机器人,利用Siri用户可以通过手机读短信、介绍餐厅、询问天气、语音设置闹钟等。Siri可以支持自然语言输入,并且可以调用系统自带的天气预报、日程安排、搜索资料等应用,还能够不断学习新的声音和语调,提供对话式的应答。1.2图灵机器人简介:图灵机器人是中文语境下智能度最高的机器人大脑,是全球领先的中文语义与认知计算平台。图灵机器人对中文语义的理解准确率高达90%,可为智能化软硬件产品提供中文语义分析、自然语言对话、深度问答等人工智能技术服务。2014年11月,图灵机器人CEO俞志晨在发布会上推出的该款产品。截至目前,图灵机器人对中文语义的理解准确率高达90%以上,累计开发者及合作伙伴超23万。图灵机器人大脑具备强大的中文语义分析能力,可准确理解中文含义并作出回应,是最擅长聊中机器人技术导论课程DIY实验报告成员李俊逸、高时清学号14281009、15281205日期2017.1.13文的机器人大脑,赋予软硬件产品自然流畅的人机对话能力。“图灵机器人”本身并非机器人,而是加载在机器人身上的类似于Siri的一整套语音语义系统。接入了图灵机器人大脑机器人在联网的情况下可做到和人自如的对话,就像是真人一样。二、实验目的:中国工程院原院长宋健曾经说过:机器人学的进步和应用是20世纪自动控制最有说服力的成就,是当代最高意义上的自动化。机器人技术综合了多学科的发展成果,代表了高技术的发展前沿,它在人类生活应用领域的不断扩大,是各个发达国家争相发展的核心技术,也是衡量一个国家综合实力的基础。本次实验作业旨在让我们让我们掌握有关对话类机器人的相关知识,并对自主机器人的几大核心技术有一个较为深入的理解。同时,在实验环节,通过开发基于安卓平台的机器人对话程序,提高了我们组两人的开发能力和API接入能力,既提高了我们的动手能力和学习兴趣,又能将所学的基础理论和实际结合起来,锻炼分析问题、解决问题的能力。三、实验环境:安卓集成开发环境:AndroidStudio2.1.1Jdk版本:jdk1.8.0_91真机测试版本:红米NOTE4-android6.0-MIUI8.0四、实验原理:4.1接口接入原理:通过图灵机器人tuling123.com下用户可以获取机器人对话id,向tuling123服务发送包含该APIKey信息的请求(请求方式POST),具体请求方式如下:{Key:APIKey,Info:发送内容,Userid:用于确定上下文环境。}4.2返回信息处理原理:机器人技术导论课程DIY实验报告成员李俊逸、高时清学号14281009、15281205日期2017.1.14从tuling123.com返回的信息格式如下(JSON类型字符串){Code:返回状态值,Text:返回内容文本,Url:链接文本}在文本处理java类JSONHandle中分别实现方法:getMessage()、getStatus(),分别通过解析JSON对象字符串来获取状态值和返回内容(在javascript中已经实现了对json对象的解析和转化,但在Java中需要自行解析),并将此值返回给android界面Activity响应界面,传入数据转运对象Bundle。4.3安卓界面更新原理:聊天响应界面如下:在android界面对应的Activity响应界面中,在输入框进行文本输入,按下发送,Activity响应会对文本框中的内容进行提取,监测是否为空或者全是空格类字符串,会提示请输入内容。若不为空,通过MessageRequest类中实现的基于java.net.HttpUrlConnection的java网络通信,实现与tuling123.com的链接和规范化请求发送。并将返回内容通过解析获得。在Activity中,独立开一个线程监听数据转运对象Bundle,如果其中获得了返回数据,则将其取出,在安卓界面中打印出来。机器人技术导论课程DIY实验报告成员李俊逸、高时清学号14281009、15281205日期2017.1.15五、实验代码:字符串解析类JSONHandle:publicclassJSONHandle{publicstaticintgetStatus(Strings){Stringanswer=s.replace({,).replace(},);intstatus=0;String[]list=answer.split(,);for(inti=0;ilist.length;i++){if(list[i].indexOf(\code\)=0){status=Integer.parseInt(list[i].replace(\code\:,));}}returnstatus;}publicstaticStringgetMessage(Strings){Stringanswer=s.replace({,).replace(},);Stringmessage=null;String[]list=answer.split(,);for(inti=0;ilist.length;i++){if(list[i].indexOf(\text\)=0){message=list[i].replace(\text\:,).replace(\,);}}returnmessage;}}消息发送类MessageRequest:publicclassMessageRequest{publicfinalstaticStringapi=(){userid=newRandom().nextInt(100000);}机器人技术导论课程DIY实验报告成员李俊逸、高时清学号14281009、15281205日期2017.1.16publicstaticStringrequestByPost(Stringmessage)throwsException{Stringpath=请求的参数转换为byte数组Stringparams=key=+URLEncoder.encode(1464ce1718ef4cf6b2602e0174a59b0f,UTF-8)+&info=+URLEncoder.encode(message,UTF-8);byte[]postData=params.getBytes();//新建一个URL对象URLurl=newURL(path);//打开一个HttpURLConnection连接HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();//设置连接超时时间urlConn.setConnectTimeout(5*1000);//Post请求必须设置允许输出urlConn.setDoOutput(true);//Post请求不能使用缓存urlConn.setUseCaches(false);//设置为Post请求urlConn.setRequestMethod(POST);urlConn.setInstanceFollowRedirects(true);//配置请求Content-TypeurlConn.setRequestProperty(Content-Type,application/x-);//开始连接urlConn.connect();//发送请求参数DataOutputStreamdos=newDataOutputStream(urlConn.getOutputStream());dos.write(postData);dos.flush();dos.close();//判断请求是否成功if(urlConn.getResponseCode()==200){//获取返回的数据byte[]data=newbyte[1000];urlConn.getInputStream().read(data);Log.i(tag_post,Post请求方式成功,返回数据如下:);Log.i(tag_post,newString(data,UTF-8));returnnewString(data);}else{Log.i(tag_post,Post方式请求失败);returnerror;}}机器人技术导论课程DIY实验报告成员李俊逸、高时清学号14281009、15281205日期2017.1.17publicstaticStringsendPost(Stringurl,Stringparam){PrintWriterout=null;BufferedReaderin=null;Stringresult=;try{URLrealUrl=newURL(url);//打开和URL之间的连接URLConnectionconn=realUrl.openConnection();//设置通用的请求属性conn.setRequestProperty(accept,*/*);conn.setRequestProperty(connection,Keep-Alive);conn.setRequestProperty(user-agent,Mozilla/4.0(compatible;M
本文标题:基于图灵机器人API的在线对话机器人模拟
链接地址:https://www.777doc.com/doc-7106838 .html