1、机 器 人 技 术 导 论 课 程 DIY 实 验 报 告成 员 李 俊 逸 、 高 时 清 学 号 14281009 、 15281205 日 期 2017.1.11北京交通大学机器人技术导论课程结课实验基 于 图 灵 机 器 人 API 的 在 线 对 话 机 器 人 模 拟组 长 : 李 俊 逸 14281009成 员 : 高 时 清 15281205所 在 院 系 : 计 算 机 与 信 息 技 术 学 院机 器 人 技 术 导 论 课 程 DIY 实 验 报 告成 员 李 俊 逸 、 高 时 清 学 号 14281009 、 15281205 日 期 2017.1.12一、背景概述:
2、1.1对 话 类 机 器 人 简 介 :聊 天 机 器 人 ( chatterbot) 是 一 个 用 来 模 拟 人 类 对 话 或 聊 天 的 程 序 。 “ Eliza” 和 “ Parry” 是 早 期非 常 著 名 的 聊 天 机 器 人 。 它 试 图 建 立 这 样 的 程 序 : 至 少 暂 时 性 地 让 一 个 真 正 的 人 类 认 为 他 们 正 在 和 另一 个 人 聊 天 。 Chatterbots 已 应 用 于 在 线 互 动 游 戏 Tinymuds。 其 他 较 知 名 的 聊 天 机 器 人 还 包 括 :TalkBot最 初 作 为 一 个 在 线 聊
3、天 系 统 , TalkBot 是 克 莉 斯 克 沃 特 于 1998 年 用 javascript 和 PERL 语 言 编写 完 成 的 , 并 于 2001 年 和 2002 年 两 次 获 得 “ Chatterbox Challenge” 比 赛 的 冠 军 。Elbot 艾 尔 伯 特在 德 语 聊 天 机 器 人 查 理 的 程 序 改 进 后 诞 生 了 艾 尔 伯 特 , 2000 年 底 德 语 版 艾 尔 伯 特 就 开 始 在 线 聊天 , 并 且 到 了 2001 年 连 英 语 版 也 有 了 。 在 2003 年 获 得 “ Chatterbox Challen
4、ge” 比 赛 冠 军 。eLise 伊 莉 斯讲 德 语 的 聊 天 机 器 人 。 伊 莉 斯 由 Java 分 子 编 辑 器 前 端 、 Java 服 务 器 以 及 一 种 知 识 编 辑 器 组 成 。 其中 , 知 识 程 序 包 括 了 1100 多 节 点 , 而 且 还 在 不 停 升 级 。Alice 艾 丽 斯1995 年 11 月 23 日 , 艾 丽 斯 Alice 诞 生 了 。 艾 丽 斯 的 名 字 是 由 英 文 “ 人 工 语 言 在 线 计 算 机 实 体 ”的 头 一 个 字 母 的 缩 写 拼 成 。 科 学 家 华 莱 士 将 这 个 聊 天 程
5、序 安 装 到 网 络 服 务 器 , 然 后 待 在 一 边 观 察 网 民会 对 它 说 什 么 。 随 着 华 莱 士 对 艾 丽 斯 的 升 级 与 艾 丽 斯 聊 天 经 验 的 日 渐 丰 富 , 艾 丽 斯 越 来 越 厉 害 。 2000年 、 2001 年 、 2004 年 艾 丽 斯 三 夺 勒 布 纳 奖 。 艾 丽 斯 是 乔 治 的 强 劲 对 手 , 曾 一 度 被 认 为 是 最 聪 明 的 聊天 机 器 人 。Laylahbot 蕾 拉 伯 特由 原 始 的 艾 丽 斯 程 序 改 头 换 脸 而 来 。 整 个 程 序 和 华 莱 士 在 2002 年 编 写
6、 的 艾 丽 斯 的 程 序 基 本 没 什么 差 别 。 蕾 拉 伯 特 的 存 在 是 试 图 对 基 本 的 “ 人 工 语 言 在 线 计 算 机 实 体 ” 聊 天 机 器 人 的 性 能 、 功 能 提 供一 个 范 本 。Siri(苹 果 语 音 助 手 )Siri 是 苹 果 公 司 在 其 产 品 iPhone4S, iPad 3 及 以 上 版 本 手 机 和 Mac 上 应 用 的 一 项 智 能 语 音 控 制 功能 。 Siri 可 以 令 iPhone4S 及 以 上 手 机 ( iPad 3 以 上 平 板 ) 变 身 为 一 台 智 能 化 机 器 人 , 利
7、用 Siri 用 户 可以 通 过 手 机 读 短 信 、 介 绍 餐 厅 、 询 问 天 气 、 语 音 设 置 闹 钟 等 。 Siri 可 以 支 持 自 然 语 言 输 入 , 并 且 可 以调 用 系 统 自 带 的 天 气 预 报 、 日 程 安 排 、 搜 索 资 料 等 应 用 , 还 能 够 不 断 学 习 新 的 声 音 和 语 调 , 提 供 对 话式 的 应 答 。1.2图 灵 机 器 人 简 介 :图 灵 机 器 人 是 中 文 语 境 下 智 能 度 最 高 的 机 器 人 大 脑 , 是 全 球 领 先 的 中 文 语 义 与 认 知 计 算 平 台 。 图灵 机
8、 器 人 对 中 文 语 义 的 理 解 准 确 率 高 达 90%, 可 为 智 能 化 软 硬 件 产 品 提 供 中 文 语 义 分 析 、 自 然 语 言 对话 、 深 度 问 答 等 人 工 智 能 技 术 服 务 。 2014 年 11 月 , 图 灵 机 器 人 CEO 俞 志 晨 在 发 布 会 上 推 出 的 该款 产 品 。 截 至 目 前 , 图 灵 机 器 人 对 中 文 语 义 的 理 解 准 确 率 高 达 90%以 上 , 累 计 开 发 者 及 合 作 伙 伴 超 23万 。 图 灵 机 器 人 大 脑 具 备 强 大 的 中 文 语 义 分 析 能 力 , 可
9、 准 确 理 解 中 文 含 义 并 作 出 回 应 , 是 最 擅 长 聊 中机 器 人 技 术 导 论 课 程 DIY 实 验 报 告成 员 李 俊 逸 、 高 时 清 学 号 14281009 、 15281205 日 期 2017.1.13文 的 机 器 人 大 脑 , 赋 予 软 硬 件 产 品 自 然 流 畅 的 人 机 对 话 能 力 。“ 图 灵 机 器 人 ” 本 身 并 非 机 器 人 , 而 是 加 载 在 机 器 人 身 上 的 类 似 于 Siri 的 一 整 套 语 音 语 义 系 统 。接 入 了 图 灵 机 器 人 大 脑 机 器 人 在 联 网 的 情 况 下
10、 可 做 到 和 人 自 如 的 对 话 , 就 像 是 真 人 一 样 。二、实验目的:中 国 工 程 院 原 院 长 宋 健 曾 经 说 过 : 机 器 人 学 的 进 步 和 应 用 是 20 世 纪 自 动 控 制 最 有 说 服 力 的 成 就 ,是 当 代 最 高 意 义 上 的 自 动 化 。 机 器 人 技 术 综 合 了 多 学 科 的 发 展 成 果 , 代 表 了 高 技 术 的 发 展 前 沿 , 它 在 人 类生 活 应 用 领 域 的 不 断 扩 大 , 是 各 个 发 达 国 家 争 相 发 展 的 核 心 技 术 , 也 是 衡 量 一 个 国 家 综 合 实
11、力 的 基 础 。 本次 实 验 作 业 旨 在 让 我 们 让 我 们 掌 握 有 关 对 话 类 机 器 人 的 相 关 知 识 , 并 对 自 主 机 器 人 的 几 大 核 心 技 术 有 一 个较 为 深 入 的 理 解 。 同 时 , 在 实 验 环 节 , 通 过 开 发 基 于 安 卓 平 台 的 机 器 人 对 话 程 序 , 提 高 了 我 们 组 两 人 的 开发 能 力 和 API 接 入 能 力 , 既 提 高 了 我 们 的 动 手 能 力 和 学 习 兴 趣 , 又 能 将 所 学 的 基 础 理 论 和 实 际 结 合 起 来 ,锻 炼 分 析 问 题 、 解
12、决 问 题 的 能 力 。三、实验环境:安 卓 集 成 开 发 环 境 : Android Studio 2.1.1Jdk 版 本 : jdk 1.8.0_91真 机 测 试 版 本 : 红 米 NOTE4-android 6.0-MIUI 8.0四、实验原理:4.1 接 口 接 入 原 理 :通 过 图 灵 机 器 人 下 用 户 可 以 获 取 机 器 人 对 话 id, 向 tuling123 服 务 发 送 包 含 该APIKey 信 息 的 请 求 ( 请 求 方 式 POST) , 具 体 请 求 方 式 如 下 : Key: APIKey,Info: 发 送 内 容 ,User
13、id: 用 于 确 定 上 下 文 环 境 。4.2 返 回 信 息 处 理 原 理 :机 器 人 技 术 导 论 课 程 DIY 实 验 报 告成 员 李 俊 逸 、 高 时 清 学 号 14281009 、 15281205 日 期 2017.1.14从 返 回 的 信 息 格 式 如 下 ( JSON 类 型 字 符 串 ) Code: 返 回 状 态 值 ,Text: 返 回 内 容 文 本 ,Url: 链 接 文 本在 文 本 处 理 java 类 JSONHandle 中 分 别 实 现 方 法 : getMessage()、 getStatus(), 分 别 通 过 解 析 J
14、SON对 象 字 符 串 来 获 取 状 态 值 和 返 回 内 容 ( 在 javascript 中 已 经 实 现 了 对 json 对 象 的 解 析 和 转 化 , 但 在 Java中 需 要 自 行 解 析 ) , 并 将 此 值 返 回 给 android 界 面 Activity 响 应 界 面 , 传 入 数 据 转 运 对 象 Bundle。4.3 安 卓 界 面 更 新 原 理 :聊 天 响 应 界 面 如 下 :在 android 界 面 对 应 的 Activity 响 应 界 面 中 , 在 输 入 框 进 行 文 本 输 入 , 按 下 发 送 , Activity
15、 响 应 会对 文 本 框 中 的 内 容 进 行 提 取 , 监 测 是 否 为 空 或 者 全 是 空 格 类 字 符 串 , 会 提 示 请 输 入 内 容 。 若 不 为 空 ,通 过 MessageRequest类 中 实 现 的 基 于 .HttpUrlConnection的 java网 络 通 信 , 实 现 与 的 链 接 和 规 范 化 请 求 发 送 。 并 将 返 回 内 容 通 过 解 析 获 得 。在 Activity 中 , 独 立 开 一 个 线 程 监 听 数 据 转 运 对 象 Bundle, 如 果 其 中 获 得 了 返 回 数 据 , 则 将 其 取出
16、, 在 安 卓 界 面 中 打 印 出 来 。机 器 人 技 术 导 论 课 程 DIY 实 验 报 告成 员 李 俊 逸 、 高 时 清 学 号 14281009 、 15281205 日 期 2017.1.15五、实验代码:字 符 串 解 析 类 JSONHandle:publicclassJSONHandlepublicstaticintgetStatus(Strings)Stringanswer=s.replace(“,“).replace(“,“);intstatus=0;Stringlist=answer.split(“,“);for(inti=0;i=0)status=Integ
17、er.parseInt(listi.replace(“code“:“,“);returnstatus;publicstaticStringgetMessage(Strings)Stringanswer=s.replace(“,“).replace(“,“);Stringmessage=null;Stringlist=answer.split(“,“);for(inti=0;i=0)message=listi.replace(“text“:“,“).replace(“,“);returnmessage;消 息 发 送 类MessageRequest:publicclassMessageReque
18、stpublicfinalstaticStringapi=“http:/ 器 人 技 术 导 论 课 程 DIY 实 验 报 告成 员 李 俊 逸 、 高 时 清 学 号 14281009 、 15281205 日 期 2017.1.16publicstaticStringrequestByPost(Stringmessage)throwsExceptionStringpath=“http:/ 求 的 参 数 转 换 为byte数 组Stringparams=“key=“+URLEncoder.encode(“1464ce1718ef4cf6b2602e0174a59b0f“,“UTF-8“)
19、+“bytepostData=params.getBytes();/新 建 一 个URL对 象URLurl=newURL(path);/打 开 一 个HttpURLConnection连 接HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();/设 置 连 接 超 时 时 间urlConn.setConnectTimeout(5*1000);/Post请 求 必 须 设 置 允 许 输 出urlConn.setDoOutput(true);/Post请 求 不 能 使 用 缓 存urlConn.setUseCaches
20、(false);/设 置 为Post请 求urlConn.setRequestMethod(“POST“);urlConn.setInstanceFollowRedirects(true);/配 置 请 求Content-TypeurlConn.setRequestProperty(“Content-Type“,“application/x-www-form-urlencode“);/开 始 连 接urlConn.connect();/发 送 请 求 参 数DataOutputStreamdos=newDataOutputStream(urlConn.getOutputStream();dos
21、.write(postData);dos.flush();dos.close();/判 断 请 求 是 否 成 功if(urlConn.getResponseCode()=200)/获 取 返 回 的 数 据bytedata=newbyte1000;urlConn.getInputStream().read(data);Log.i(“tag_post“,“Post请 求 方 式 成 功 , 返 回 数 据 如 下 :“);Log.i(“tag_post“,newString(data,“UTF-8“);returnnewString(data);elseLog.i(“tag_post“,“Po
22、st方 式 请 求 失 败“);return“error“;机 器 人 技 术 导 论 课 程 DIY 实 验 报 告成 员 李 俊 逸 、 高 时 清 学 号 14281009 、 15281205 日 期 2017.1.17publicstaticStringsendPost(Stringurl,Stringparam)PrintWriterout=null;BufferedReaderin=null;Stringresult=“;tryURLrealUrl=newURL(url);/打 开 和URL之 间 的 连 接URLConnectionconn=realUrl.openConnec
23、tion();/设 置 通 用 的 请 求 属 性conn.setRequestProperty(“accept“,“*/*“);conn.setRequestProperty(“connection“,“Keep-Alive“);conn.setRequestProperty(“user-agent“,“Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)“);/发 送POST请 求 必 须 设 置 如 下 两 行conn.setDoOutput(true);conn.setDoInput(true);/获 取URLConnection对 象 对
24、应 的 输 出 流out=newPrintWriter(conn.getOutputStream();/发 送 请 求 参 数out.print(param);/flush输 出 流 的 缓 冲out.flush();/定 义BufferedReader输 入 流 来 读 取URL的 响 应in=newBufferedReader(newInputStreamReader(conn.getInputStream();Stringline;while(line=in.readLine()!=null)result+=line;catch(Exceptione)System.out.println
25、(“发 送POST请 求 出 现 异 常 !“);Log.e(“请 求 异 常“,e.toString();returne.getMessage();/使 用finally块 来 关 闭 输 出 流 、 输 入 流finallytryif(out!=null)out.close();if(in!=null)in.close();机 器 人 技 术 导 论 课 程 DIY 实 验 报 告成 员 李 俊 逸 、 高 时 清 学 号 14281009 、 15281205 日 期 2017.1.18catch(IOExceptionex)ex.printStackTrace();returnresu
26、lt;publicstaticvoidmain(Stringargs)MessageRequestmr=newMessageRequest();Stringanswer=“;answer=mr.sendPost(MessageRequest.api,“key=1464ce1718ef4cf6b2602e0174a59b0fSystem.out.println(answer);answer=mr.sendPost(MessageRequest.api,“key=1464ce1718ef4cf6b2602e0174a59b0fSystem.out.println(answer);Android界
27、面 对 应 的Activity类 :publicclassStartextendsAppCompatActivityprotectedEditTextinput;protectedButtonsend;protectedTextViewshow;protectedScrollViewscroll;/privatefinalMessageRequestmr=newMessageRequest();privateintflag=0;privateStringsaid=“;privateHandlerhandler=newHandler()publicvoidhandleMessage(Messag
28、emsg)super.handleMessage(msg);Bundledata=msg.getData();Stringanswer=data.getString(“answer“);intstatus=JSONHandle.getStatus(answer);Stringcontent=JSONHandle.getMessage(answer);Log.i(“mylog“,answer);if(content=null)机 器 人 技 术 导 论 课 程 DIY 实 验 报 告成 员 李 俊 逸 、 高 时 清 学 号 14281009 、 15281205 日 期 2017.1.19co
29、ntent=“请 确 保 网 络 连 接 喔 !“;show.append(“-图 灵 :ntt“+content+“n“);scroll.fullScroll(ScrollView.FOCUS_DOWN);OverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_start);input=(EditText)findViewById(R.id.messageInput);send=(Button)findV
30、iewById(R.id.sendButton);show=(TextView)findViewById(R.id.textShow);scroll=(ScrollView)findViewById(R.id.scroll_view);/获 取scrollView组 件newThread(getResponse).start();send.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewview)CharSequencecs=input.getText();Strings=cs.toString
31、();if(s.replace(“,“).equals(“)Toastt=Toast.makeText(getApplicationContext(),“请 输 入 聊 天 内 容“,Toast.LENGTH_SHORT);/显 示Toastt.show();elsesaid=s;show.append(“-我 :ntt“+cs+“n“);scroll.fullScroll(ScrollView.FOCUS_DOWN);input.setText(“);flag=1;);OverridepublicbooleanonCreateOptionsMenu(Menumenu)/TODO Auto-g
32、enerated method stubMenuInflaterinflater=getMenuInflater();机 器 人 技 术 导 论 课 程 DIY 实 验 报 告成 员 李 俊 逸 、 高 时 清 学 号 14281009 、 15281205 日 期 2017.1.110inflater.inflate(R.menu.menu,menu);returntrue;OverridepublicbooleanonOptionsItemSelected(MenuItemitem)Log.e(“ZHANGBIN“,“createoptionmenu“);/Handleitemselect
33、ionswitch(item.getItemId()caseR.id.Item_Exit:finish();returntrue;caseR.id.Item_About:Toast.makeText(Start.this,“By李 俊 逸and高 时 清“,Toast.LENGTH_SHORT).show();returntrue;default:returnsuper.onOptionsItemSelected(item);RunnablegetResponse=newRunnable()Overridepublicvoidrun()while(true)if(flag=1)tryMessa
34、gemsg=newMessage();Bundledata=newBundle();Stringanswer=newMessageRequest().sendPost(MessageRequest.api,“key=1464ce1718ef4cf6b2602e0174a59b0f/Stringanswer=newMessageRequest().requestByPost(said);data.putString(“answer“,answer);msg.setData(data);handler.sendMessage(msg);flag=0;catch(Exceptione)Log.e(“
35、send“,e.toString();机 器 人 技 术 导 论 课 程 DIY 实 验 报 告成 员 李 俊 逸 、 高 时 清 学 号 14281009 、 15281205 日 期 2017.1.111;六、实验结果演示:请 见 附 件 演 示 视 频 。七、实验总结纸 上 得 来 终 觉 浅 , 得 知 此 事 要 躬 行 。 课 堂 上 我 们 学 习 了 机 器 人 技 术 的 基 本 概念 、 发 展 历 史 及 运 动 学 基 础 知 识 、 数 学 基 础 知 识 , 在 此 基 础 上 , 了 解 了 机 器 人的 两 个 核 心 技 术 : 感 知 和 控 制 , 然 后
36、 对 机 器 人 的 规 划 和 导 航 技 术 中 的 常 用 算 法进 行 了 学 习 。 最 终 还 是 应 用 到 实 践 中 才 能 成 为 我 们 的 东 西 。 本 次 实 验 使 我 了 解了 聊 天 类 机 器 人 发 展 历 史 和 运 行 原 理 , 对 web 应 用 的 认 识 更 上 了 一 个 层 次 , 我还 要 继 续 学 好 机 器 人 硬 件 相 关 知 识 , 提 高 自 己 的 专 业 能 力 。机 器 人 学 的 进 步 和 应 用 是 20 世 纪 自 动 控 制 最 有 说 服 力 的 成 就 , 是 当 代 最 高意 义 上 的 自 动 化 。 机 器 人 技 术 综 合 了 多 学 科 的 发 展 成 果 , 代 表 了 高 技 术 的 发 展前 沿 , 它 在 人 类 生 活 应 用 领 域 的 不 断 扩 大 , 是 各 个 发 达 国 家 争 相 发 展 的 核 心 技术 , 也 是 衡 量 一 个 国 家 综 合 实 力 的 基 础 。 作 为 新 时 代 的 大 学 生 , 我 们 有 义 务 去发 展 机 器 人 事 业 , 为 祖 国 的 繁 荣 富 强 献 出 自 己 的 绵 薄 之 力 。