从零开始玩人工智能-机器人服务-01
2018-01-25

     image

        原来并不打算写下来,因为除了很久以前写Delphi,后来写一点脚本,基本上没怎么写过代码。

        时代不同了,年纪也大了,不知道自己还能不能学习多少东西。想想,要不就当学习笔记吧,也许后面就没法继续写,写多少算多少。

        微软及行业近几年沧桑巨变,一觉醒来,感觉已经被时代抛弃。所以非常焦虑。总得挤一点时间学习一下,没法跟别人比,至少自己对新名词有些认识体会吧。看了看,其实很多新东西会有所交汇。例如,我想让树莓派上运行Cortana,根据环境传感器和互联网信息,利用认知服务和我交流,管理家里的电器,通过机器学习,越来越主动的完成生活工作的辅助……有多少东西需要学习啊!所以,我得从零开始学习。

        这算是一个开始吧,学习一个机器人如何工作,集成到cortana里,慢慢的开始。

        说起机器人框架,其实并不陌生。最早微博微信,就有聊天机器人,根据你的对话自动给出响应。微信里有小冰,人工智能在不断进化。而我希望通过初步的学习,让机器人框架能够帮助设备更加懂我的要求,交互更加有趣。

        有关机器人框架,微软有很完整的网站及很多示例代码来帮助人学习开发。我就是这么开始的。网站地址:https://docs.microsoft.com/en-us/Bot-Framework/index

        开始学习写一个机器人之前,可以快速的了解一下工作机理。

    architecture-resize

        从上图看,机器人框架还是相当厉害的。基于SDK开发的代码,利用机器人连接服务,连接到很多服务,例如自己的数据库、API接口,Azure的机器学习,搜索……连接到很多交互频道,例如Web聊天、邮件、UC软件和各种社交应用…利用认知服务,例如自然语言、机器翻译、机器视觉……完成很多以前需要花费不少人力时间的事情。举个例子,约个饭,机器人框架首先可以通过告知的人员,利用社交和其他信息了解个人喜好,通过地理位置和社交评价推荐餐厅,通过个人的日程安排商量时间,通过邮件短信社交软件来约人……简直是我辈懒人的福音和未来~

        虽然美好的未来需要依托Azure的众多服务,但是并不意味着没有Azure就无法开始玩机器人框架。可以先下载一个机器人框架模拟器:Bot Framework Emulator 

       同时,开始写代码也不用上来就是宇宙第一开发平台 Visual Studio~ 完全可以用开源的神器,Visual Studio Code。轻巧简便跨平台。机器人框架代码支持.Net和Node.js,作为一个完全的小白,我向懂开发的朋友了解了下,决定从node.js开始学习~

       万事开头难,还好机器人框架网站从最简单的示例代码开始。可我一开始就掉坑里了。装完Code,再装完一堆很牛的扩展,接着就是安装Node.js了。

       安装完Node.js,接着就是安装SDK的包。

       npm install –save botbuilder

       安装完SDK包之后,就可以跑起来最简单的代码了。

       var builder = require(‘botbuilder’);

       var connector = new builder.ConsoleConnector().listen();

       var bot = new builder.UniversalBot(connector, function (session) {

                 session.send(“You said: %s”, session.message.text);

        });

       把代码贴到Code里面就能跑起来了~连我没写过任何java的,看这段也没啥太困难。可我也遇到问题了。提示我缺少botbuilder包。我不是刚安装的么……

       仔细想想,刚才npm init的时候,好像问了一堆问题,是不是自动生成了啥配置文件之类?这几行代码我重新保存了一个路径,难道找不到刚才的配置了?

       clip_image001[5]

       我重新在当前路径初始化试试……

       clip_image001

       把SDK也重新装一下~

       node app.js

       终于能运行了。

       然后继续装restify包,为了让机器人能够连接,这是必须的~

       clip_image001[8]

       有了restify包,就可以修改一下代码。

       var restify = require(‘restify’);

       var builder = require(‘botbuilder’);

       // Setup Restify Server

       var server = restify.createServer();

       server.listen(process.env.port || process.env.PORT || 3978, function () {

               console.log(‘%s listening to %s’, server.name, server.url);

        });

       // Create chat connector for communicating with the Bot Framework Service

       var connector = new builder.ChatConnector({

               appId: process.env.MICROSOFT_APP_ID,

               appPassword: process.env.MICROSOFT_APP_PASSWORD });

      // Listen for messages from users

      server.post(‘/api/messages’, connector.listen());

      // Receive messages from the user and respond by echoing each message back (prefixed with ‘You said:’)

      var bot = new builder.UniversalBot(connector, function (session) {

               session.send(“You said: %s”, session.message.text);

       });

       和之前的代码比较,一个是多了连接微软云的Bot Framework Service的凭据。然而运行本地Bot Framework Emulator并不需要连接这个云服务,所以我把这几行都注释掉了。

       另一个就是把本地输入回显的交互,变成了通过restify的post,然后机器人回复“You said:”加上你的输入的简单交互。

       打开机器人框架模拟器,在蓝色框内,输入运行代码时的地址,就可以测试机器人框架了。

       clip_image001[10]

       右下角还能提示POST和GET的来往消息。看,从来没写过java代码,没用过node.js的我,就开始了第一个机器人程序。

原文:https://hoohao.wordpress.com/2017/10/03/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e7%8e%a9%e4%ba%ba%e5%b7%a5%e6%99%ba%e8%83%bd-%e6%9c%ba%e5%99%a8%e4%ba%ba%e6%9c%8d%e5%8a%a1-01/