美文网首页我爱编程
女生科技体验节,wechaty专场技术复盘

女生科技体验节,wechaty专场技术复盘

作者: HelenYin | 来源:发表于2018-01-28 22:58 被阅读0次

    在2018女生科技体验节中,讲师李佳芮向大家讲解了《从0到1,搭建你的个人智能助理》,基于同学们大多没有太多编码经验,所以这篇文章做一个技术复盘,把课程中讲到的技术知识点做一个总结。

    OK,时间是把杀猪刀。课程第一步做了什么呢?嗯,做了课前准备。对,就是整个课程最复杂最麻烦的一步!很多同学在就牺牲在了第一步,俗话说得好,万事开头难,开了头就可以骑着马跑~为了保证到场人数达标,活动方派出了两位助教帮助同学们装环境(于是雨鸟为100多位同学装了docker,装得手抽经)废话说太多了,下面开始讲技术。
    安装Wechaty有两种方法,Node和Docker。课前希望同学们能安装好。因为安装会花费很多时间,一个是本身软件很大,再加上wechaty镜像很大,如果全在会场来下载,会场的网络怕是扛不住的。。。
    具体安装方法,安装成功的标志是,在命令行中输入node --version,会显示node的版本。

    接下来讲一下docker, docker是一个简化部署的工具。为什么我们需要docker?对于初学者来说可能比较难理解,打一个比喻,集装箱!在集装箱出现之前,我们是怎么运输货物的呢,货物从工厂生产出来之后装箱,然后一箱箱的搬到卡车上,然后再一箱箱卸下来,一箱箱送上火车,运送到码头附近的火车站,再一箱箱卸下来,装上卡车,拉到货轮上,再一箱一箱的装上。可以看出在这个整个流程中,大量的时间,人力 ,物力全部浪费在了中间的装卸上。集装箱重要在它提供了一种通用的封装货物的标准规格(尺寸,外形符合统一标准)。只需要在运输前一次性封装,集装箱就可以放上火车,卡车,拉到码头,直接放在货船上这里后面还会具体介绍。理解就是,docker可以把整个开发环境中所需要应用按照一定的格式封装,开发者可以直接拉取镜像进行安装,就可以很容易的获取一套开发环境。如果把镜像比喻成面向对象中的类,容器就是一个实例。容器的实质就是一个进程。

    docker安装好的标志是命令行运行:docker --version会显示docker的版本号。

    好了,安装好docker之后我们要做的就是download wechaty的镜像

    获取镜像的命令:docker pull [选项] [Docker Registry 地址]<仓库名>:<标签>

    获取wechaty的镜像:docker pull [registry.docker-cn.com/zixia/wechaty]

    获取镜像之后 运行 docker run zixia/wechaty

    如果看到wechaty的欢迎界面就表示已经在本地成功运行wechaty

    以上是环境搭建,搭好环境之后就可以编写我们想要的微信机器人了。

    Wechaty

    Wechaty是一个为个人微信号搭建的chat bot框架。
    这里讲师给大家提供了一个机器人代码,实现了简单的自动通过好友请求,拉人入群,欢迎新人入群,踢人等功能。

    需要大家拉下这个仓库,使用命令git clone https://github.com/lijiarui/wechaty-getting-started.git,没有安装git的同学可以直接下载这个仓库。下载好仓库后,需要进入到项目目录下(使用命令行:cd wechaty-getting-started),然后运行项目(使用命令行:docker run -ti --volume="$(pwd)":/bot --rm zixia/wechaty mybot.ts)这里我解释一下这两句命令行的意思:

    1.cd wechaty-getting-started就是进入到wechaty-getting-started这个文件夹下面;

    2.docker run -ti --volume="$(pwd)":/bot --rm zixia/wechaty mybot.ts

    docker run的意思是创建一个新的容器,并运行一个命令,语法是docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

    -ti是两个命令:-i是以交互模式运行容器,-t是为容器重新分配一个伪输入终端,这里我们打算进入bash执行一些命令并查看返回结果,因此我们需要交互式终端。

    —rm这个参数是指容器退出后随之将其删除。

    --volume是增加一个数据卷,具体什么是数据卷,将在后面的文章详细讲,这里只需要理解--volume="$(pwd)":/bot的意思就是把当前目录映射到容器里的bot

    然后就是运行的zixia/wechaty这个镜像下的mybot.ts文件。

    可能对js有了解的同学可能会问.ts文件和.js文件的区别,Wechaty框架是使用Typescript编写的项目,TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,TypeScript 通过类型注解提供编译时的静态类型检查。我们也可以直接用JavaScript进行编写

    讲师提供的这个机器人做了一件什么事儿呢?

    首先,当有好友请求添加好友的时候,能够自动添加为好友。

    具体是这段代码

    .on('friend', async function (contact, request) {
        if (request) {
            await request.accept()
            console.log(`Contact: ${contact.name()} send request ${request.hello}`)
        }
    })
    

    然后当接收到消息的时候,当对方说“hello”,机器人就会回应:"hello how are you”。这里的代码有一个小bug,就是回应的语句中也含有“hello”这个词,所以发生的当天著名的炸群事件,群里一个劲儿的回复“hello how are you”,导致当天有同学的微信号被封了。要修改这个bug很简单,就是将回复语中的“hello”换成其他词。继续往后,当同学们输入”room”的时候,机器人会找到一个名为“test”的群,然后将该同学拉进群里,并且会说:“welcome!${同学的名字}”,

    .on('message', async function (m) {
            const contact = m.from()
            const content = m.content()
            const room = m.room()
            if (/room/.test(content)) {
                let keyroom = await Room.find({ topic: "test" })
                if (keyroom) {
                    await keyroom.add(contact)
                    await keyroom.say("welcome!", contact)
                }
            }
        })
    

    当同学发送“out”这个信息的时候,会把自己从“test”这个群里把自己踢出去(这个功能也是很有意思的,自己把自己踢出群)

            if (/out/.test(content)) {
                let keyroom = await Room.find({ topic: "test" })
                if (keyroom) {
                    await keyroom.say("Remove from the room", contact)
                    await keyroom.del(contact)
                }
            }
    
    

    好了,我把代码实现的功能讲述了一边,具体的就需要同学们自己去看代码了。这里我重点给大家介绍一下这段代码中用到的wechaty的几个类,分别是Wechaty、Contact、Message、和FriendRequest。每次我们只需要引入需要用到的类就可以使用类提供的方法了。
    还提供了一些事件:‘scan’(扫描二维码),,’login’(机器人登录),‘logout’(机器人退出),‘message’(接收到新消息),‘error’(程序报错),‘friend’(好友请求)等。Wechaty提供了一套非常方便的API,供开发者方便的使用,满足机器人来管理群。

    Server酱

    网页版微信会经常把用户踢下线,Server酱可以帮助我们知道Wechaty发生了哪些异常。
    Server酱,他是一个能从服务器推报警和日志到手机的工具,非常简单易操作:

    1.用GitHub账号登入后,获得一个SCKEY(在「发送消息」页面) 按照引导,点击“微信推送”,扫码关注“方糖”后即可完成绑定 2.在login、logout、scan、和error事件触发后,将一些关键信息往 http://sc.ftqq.com/SCKEY.send 发Get请求,我自己的微信里就收到消息了。

    这样,当我的机器人出现各种异常情况,我随时随地都可以知道,需要再扫码进入的时候,方糖这公众号就会把二维码推到我的手机上,我只要用机器人的微信扫码就可以了。

    UNIT

    最后,我们向大家介绍了怎么去制作智能微信机器人,使用了百度的UNIT框架。UNIT不需要有开发经验,我们需要做的是了解机器人使用在什么样的场景下,如何理解、如何回应用户。机器人是通过识别意图和词槽理解用户的。我们通过建立词槽,引入词典,配置词槽的澄清话术。配置回复文本及触发条件,配置引导话术、引导目标和触发条件,最后保存所有配置,导入语料,编辑对话模板,最后训练并生效模型。
    这篇文章先写到这里,后面将会对同学们在课程中遇到的问题和一些专有名词进行解释。

    相关文章

      网友评论

        本文标题:女生科技体验节,wechaty专场技术复盘

        本文链接:https://www.haomeiwen.com/subject/ekltzxtx.html