最近更新时间 2017年11月3日 11:40:11
本文翻译自freecodecamp 中Rajat Saxena 所发文章How I designed, developed, and deployed a chatbot entirely in the cloud 文中版权、图像代码等数据均归作者所有。为了本土化,翻译内容略作修改。
为什么要我做这个?
上面这个视频中演示的机器人就是我做的一个完全在服务器上的机器人,可能会有人问了,为什么我会有这样一个想法呢?几个月前我录制一段关于记忆相关视频,视频中谈到故意修改一些细节,能让你在很长时间内保持良好的记忆,并且这些记忆能为你后面工作少走很多弯路。
视频中,我还谈到了遗忘曲线 ,谈到为什么要重视这个问题,多久复习一次才能加深印象。
当然,除了视频,我还想给大家做一个能够督促大家去记忆的工具,以便能够更好的去加深记忆。作为一个程序猿,自然想到“来写一个APP吧!”
但是,如果你看过我的另一篇文章《APP注定失败,我在说一遍,注定失败!》 那你肯定知道我有多不愿意去为了遗忘曲线这件事写一个独立的APP了。退一万步来说,我不仅需要一个后台来存取用户的数据,还要写一个麻烦的前端来收集显示用户的数据。
让用户去下载一个不知名的APP很难,所以我希望我的这个工具能够简单易用,让用户不费力气就能使用。比如我做一个类似微信的聊天工具,我根本不用去说服谁去下载我这个APP,我也不用做一个繁琐的聊天的客户端,还要想尽办法把这个软件放到应用商店里去。
正因为有这样的想法,我的作品Revusebot诞生了!点击这里体验下Revusebot的魅力吧!~
如果你对这个机器人项目感兴趣,可以继续向下看,看看我是怎样把一个想法利用最先进的云服务做成一个比较完整的产品。
AI(人工智能)和NLP(自然语言处理)
稍微有点开发经验的同学都知道,任何智能的聊天机器人都离不开AI(人工智能)和NLP(自然语言处理)。所以,为了让我的机器人足够“聪明”,明白人类说什么,我必须使用AI(人工智能)和NLP(自然语言处理)去做铺垫。虽然我有一定的开发经验,但是我没有任何AI(人工智能)和NLP(自然语言处理)相关的开发经验。这就成了我机器人开发的一大难题,不过不用担心。
作为一名科技爱好者,我一直关注科技界巨头推出的各种书籍及工具。前一段时间Facebook发布了一个让您的应用或者网站拥有AI(人工智能)方面的工具Wit.ai (需要翻墙)。我试用了一段时间,发现这个API很难操作,上手比较麻烦。
正当我愁眉不展时,我发现了一个新的工具,Api.ai (需要翻墙),经过我的测试,发现这个工具对开发人员更加友好,所以,我决定使用这个工具去开发我的聊天机器人。
如果想你想使用这个API的话,你需要明白是这个API是怎样操作的:
- 首先,你要写出机器人与人类之间有可能出现的对话。
- 基于上面的对话,你需要创建一个流程图来引导处理对话造成的任何结果。
- 然后使用Api.ai的仪表盘来编程你所列出的所有对话及结果,一旦你学会了仪表盘的使用,你会发现,操作原来如此简单。
注意:如果Api.ai无法处理用户所说的话,就会调用位于后端的自定义逻辑去处理。在Revusebot上面,我会存储每一位用户所说的话,所问的问题。以方便后续去优化Revusebot的服务。
上面是我Revisebot使用Api.ai的NLP(自然语言处理)的编程截图
Api.ai还提供了一些最基础的对话逻辑,比如查询天气或者比较简单的谈话插件,这些插件即插即用,可以轻松回答用户所问的天气以及其他问题。
因为Revusebot需要处理用户所问的一些奇奇怪怪问题,所以我必须抽空写一些JavaScript/Node.js相关的代码,嗯!目前来看,进展不错!
服务器选型
服务器我一直使用的是digitalocean 家的产品,但是我的机器人如果一直使用digitalocean的产品的话,我至少要按照6$/月的价格去支付服务器费用,由于我并不想从Revisebot上面赚钱,因此在digitalocean托管没有任何意义。
所以,我这个项目需要一个免费的云服务器,我知道Firebase有免费托管的服务器,我也使用过openshift来存放我的Laravel等项目。但是这些还需要搭建麻烦的生产环境,所以为了更加便捷的部署Node.js,使用谷歌进行搜索可能是一个不错的主意!
搜索时,我遇到了另外一个令我振奋的东西,heroku 和它的免费计划!
我发现,heroku对Node.js集成非常棒。我看了官方的一些文档,在它们的免费容器里面快速创建了一个Node.js应用,唯一不足就是为了节省,这个容器会自动休眠,所以我的第一个API可能会调用失败,不过没关系,这些足够我使用了。况且我修改了Revusebot一些代码去应付这种情况。
云计算中的MongoDB
我一直没有机会去接触MongoDB,刚好趁这次机会去学习下MongoDB。所以我决定使用MongoDB作为我的聊天机器人的数据库。刚好,我也找到一个使用MongoDB作为数据库的聊天软件的Demo,简直太顺利了。
然而我的计划遇到了另一个问题,那就是Heroku没有免费的MongoDB的容器,不用太担心,有我的好朋友谷歌啊~搜索“免费MongoDB云服务”。
这就是我为什么我会使用免费MongoDB的秘密mLab 。
mLab不推荐使用他们家的免费产品应用在生产环境中,但没关系。对于我的机器人来说完全够用了!
云IDE
因为项目是在我工作之余的时间来写,所以我希望有一个灵活的开发平台来让我随时随地的写代码。所以我的开发环境必须在云端,我可以从任何有网络的地方去写代码。
我使用云IDE时间蛮长的,最开始使用的是nitrous.io ,可是它已经关闭了:(。我尝试了一些像cloud9和codeanywhere 这样在线的IDE后,我发现,对开发人员最友好的还是codenvy ,它提供了比较自由的创建或者销毁的开发空间及环境。
我在Codenvy中创建了一个基于Ubuntu的工作环境,并安装了node、npm、git和curl。Codenvy也提供了终端,所以操作Linux感觉就像在家中操作真实的物理机一样。我的云端开发环境全部部署完成。
接下来,我从Heroku克隆了我的项目。并用mlab的MongoDB实例做了数据库集成。如下图所示,bloom-escarpment-58368是我的Heroku Node.js的项目。
将聊天机器人与社交软件的集成
我的想法是我的机器人与Facebook Messenger和Slack一起工作,所以我必须学习这两个平台的开发API,并让我的开发机器去调用这两个平台的API。幸运的是,Api.ai提供大多数平台集成度按钮,只需要按照文档操作即可,这可为我省下不少麻烦。
如上图所示,我已经将Revisebot和我的Facebook Messenger和Slack集成在了一起,这不会花费太多时间。
因为这些工具,我能够编写、测试、部署我的聊天机器人(数据库、应用层、前端、AI等)的整个生产环境,以便对用户的操作做出反应。
但是Revisebot成为一个真正的产品,它还需要剩下的一些东西。
源代码管理
虽然我是这个聊天机器人的唯一开发人员,但我需要将代码存到某个地方。Git显然是源代码托管和版本控制最机智的选择,但是GitHub不支持免费的私有代码存储库。Revisebot我并不打算开源,所以不能在Github上存储代码。另外,我没有使用本地物理开发环境,我不能使用git repository来存放我的代码。
很久以前,我使用bitbucket.org来存放我的代码,我曾想他们什么时候支持免费的私人私人代码库。近期我去了他们的网站,发现,竟然有了,结果不言而喻。
LOGO
图像是一个科技产品的核心,我需要一个标志来展示我的应用能结合Facebook以及Slack。
很不幸,我不是一个设计师,我不得不得吧各种图标、图像等组合在一起,所以我需要一些帮助。
幸运的是,有这样一个工具,叫Ganva 。
它为社交媒体、YouTube等比较流行的产品提供了现成的模版,你可以按照自己需要进行自定义。我利用自己的想象力,在Canva上创建了Revisebot的标志,差不多搞定了。
结语
so,这就是我如何编写一个完完全全在云上能够工作的聊天机器人的全部经过,希望这篇文章能够帮助你在云中搭建任何你想要的东西。
这个项目没有花费我一分钱。如果你对这个项目有任何疑问,请告诉我。
如果你喜欢这篇文章,请给我一些鼓励,关我像我这样更多的帖子,如果你也喜欢开发,你应该订阅我的YouTube频道。
Till next time…