今年微软的编程之美的主题是“对话即平台”,“人工智能”,要求参赛选手用到Bot Framework与Cognitive Services。

大多数人应该对这两个技术都不怎么熟悉吧,我就在这里写写自己所学会的一点东西,带大家调用LUIS做一个简单的Bot聊天机器人。

打开浏览器,直接搜索Bot Framework,进入官网,点击Documentation,进入如下页面。

  把滚动条拉到页面最底下,点击Downloads,进入下载页面

然后我们需要下载的就是Visual Studio Template C#  和Bot Framework Emulator。

下载好Emulator后直接运行安装即可。

(注意要用管理员权限,不然可能会出现每次想打开Emulator都必须重新安装的BUG)。

安装好后它的图标是这样:

下载好C#  template以后,我们需要把它复制粘贴到vs2015的相应模板文件里。

一般情况下,这个路径是:我的电脑->我的文档->Visual Studio2015->Templates->ProjectTemplates(注意是“ProjectTemplate”,很多人都误以为ItemProject)->Visual C#

然后我们把sdk粘贴到这里就好了,不用解压。

现在打开vs2015,新建项目,选择C#语言:

拉到最下面,我们会发现多了Bot Application。选择这个模板,创建。

这个模板已经帮我们做好了很多东西,我们先不修改它,直接点击编译。

选择一个你习惯的浏览器(我喜欢chrome),然后点击运行。

这是浏览器会跳转出一个基本页面

把窗口最小化,双击运行Bot Emulator

打开后,最上方的输入窗口会提示你输入Endpoint Url。

回到浏览器显示的那个网页,把那个网页的地址粘贴到最上方的输入窗口。大多数默认的都是:

http://localhost:3979

然后记得要在这个地址后面加上:“/api/massages”。

因为我们现在是本地调试,且对bot 模板内容没有修改,所以下方出现的app ID和app password我们都可以留空不去管它们,直接点击CONNECT。

然而很遗憾,我们会在右下角的log窗口会看到:POST connectECONNREFUSED 127.0.0.1:3979

这个错误是因为我国伟大的防火墙。。。((lll¬ω¬))

就如同因为我国防火墙的存在,你不能直接访问google页面一样,我们也无法直接访问bot终端。而且挂vpn并不能解决这个问题。这个时候就需要ngrok的帮助了。

我们可以把ngrok当成一个链接外面世界和墙内网络的管道,访问bot时,可以通过这个管道访问。

我们先在vs里把运行的程序停止。

然后打开浏览器,输入ngrok,搜索。

找到其官方下载页面,下载ngrok。

进入ngrok的下载路径,解压,运行EXE文件。

这是一个命令行应用程序,直接输入:”ngrok.exe http 80”。

然后就会出现这个界面,你的状态是online说明成功了。

接下来我们重新运行Bot程序,重复我之前所说的操作,在BotEmulator里点击CONNECT:

漂亮,这次的返回值是200,连接成功了!

我们试着在文本输入窗口输入一些东西,比如:你好!

Bot自动回复我们的是:你输入了“你好”,你的输入共2个字符。

(这个回复真是。。。笨笨的(ˉ▽ˉ;)…)

回到vs,先停止程序,然后我们打开RootDialog.cs文件。

为了不让回复那么蠢,我们在MessageReceivedAsync这个函数里用如下代码替换原来的代码:

var activity = await result asActivity;

if (activity.Text.Contains("你好"))

{

await context.PostAsync("你好,老铁");

}elseif(activity.Text.Contains("你叫什么名字"))

{

await context.PostAsync("你就叫我特浪扑吧");

}elseif(activity.Text.Contains("你有对象吗"))

{

await context.PostAsync("不要问这么悲伤的问题啊!扎心了,老铁。。。");

}else

{

await context.PostAsync("你在用脸滚键盘么。。。你发的我看不懂");

}

// calculatesomething for us to return

int length = (activity.Text ??string.Empty).Length;

// return ourreply to the user

await context.PostAsync($"You sent{activity.Text} which was{length} characters");

context.Wait(MessageReceivedAsync);

截个图让大家看的更明白一点:

编译,运行,然后按照我们代码里写的套路在对话框里输入:

很尴尬,我们只能按照提前预设好的套路和bot交流,一旦超出预设的输入,程序就会执行else里的代码,很无语的回复,使我们的用户体验非常不好。

如果要实现用户和bot的简单交流,我们得敲成千上万个if-else语句。等你写出来,黄花菜都凉了。而且这样的代码很不美观,太Low了。

为了提高Bility和效率,接下来我们就要用到LUIS服务了。

Luis全称为:language understand intelligent servis。它利用已经写好的算法,跑神经网络来准确地识别用户的输入。

在浏览器地址栏里输入:luis.ai/

点击登陆。这个是要用microsoft 账户的,还没有的话就快去申请一个。

如果你是初次登陆的话,就会跳转到这样的欢迎界面,按照提示把相关信息填好,accept一些条款,然后continue。

在这个界面,点击NewApp 来创建我们的luis App。

我们给这个app取一个名字,就叫“Niu Bility“好啦。Culture选项,指的是这个app要处理什么语言,这里我们选择中文。在描述部分,我们就随便写写就好了。

在Key to use 这栏,我们选择BootstrapKey,这个可以免费试用30天。最后create!

(注:如果你的account是刚注册的,可能不会出现BootstrapKey,没关系,我们可以以后再管,这时就保留默认就好)

在我们开始构建这个app之前,我们先用一个简单通俗的例子搞懂一些术语:

例句:我想去电影院

对于上面的例子,LUIS把它分为几个部分:

Entities:电影院

Intents:去电影院

Utterance:我想去电影院。

所以,Entities指的是用户具体指代的事物;Intents就是用户的意图、目的;Utterance是用户输入的一段话。

现在我们添加一个Intent:打招呼。

不同人打招呼的方式不尽相同,所以我们要考虑到很多种打招呼的方式,也就是要创建多种不同的Utterance:

点击save,然后再添加一个Intent:询问名字,想一些不同的问名字的语句,save:

我们还可以添加一个讲笑话的Intent。还想添加其他更多Intent的话,就由大家自己去想咯。

(需要提及的是,在intent中会有一个默认的None Intent,这个就相当于我们一开始写的else。因为我们无法完全预知用户的所有意图,所以当Luis经过计算发现没有意图和用户的输入匹配时,它就会返回None这个意图。)

当我们把Intent和Utterance都创建好后,就需要训练我们的app了,让他明白我们刚才输入的Utterance对应的Intent是什么。点击Train!

  

训练好以后,就可以发布了。在publish页面,点击publish!记得发布的时候,需要在EndPoint Key这里要改为BootstrapKey。

Perfect,我们的app就可以在bot里调用了。

我们此时要先记下两个东西:appID和key。

这两个东西一会儿我们要用到的。先回到vs,在项目名称附近右键,添加一个class,名称为:LuisDialog

下面是代码:

代码里,写“you app id“,”key“ 的地方要替换为刚才记下的那两个app ID和key。

using Microsoft.Bot.Builder.Dialogs;

using Microsoft.Bot.Builder.Luis;

using Microsoft.Bot.Builder.Luis.Models;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

using System.Web;

namespace Bot_Application1

{

[LuisModel("your app id","key")]

[Serializable]

publicclassLuisDialog:LuisDialog<object>

{

[LuisIntent("打招呼")]

publicasyncTask Greeting(IDialogContext context,LuisResult result)

{

await context.PostAsync("你好啊,老铁");

context.Wait(MessageReceived);

}

[LuisIntent("询问名字")]

publicasyncTask Name(IDialogContext context,LuisResult result)

{

await context.PostAsync("你就叫我特浪扑吧。");

context.Wait(MessageReceived);

}

[LuisIntent("讲笑话")]

publicasyncTask Amuse(IDialogContext context,LuisResult result)

{

await context.PostAsync("你的存在其实就是一个笑话。");

context.Wait(MessageReceived);

}

[LuisIntent("")]

publicasyncTask none(IDialogContext context,LuisResult result)

{

await context.PostAsync("老铁,发烧就该吃药,不能胡言乱语啊。");

context.Wait(MessageReceived);

}

}

}

再截个图让大家明白点:

然后打开MessagesController.cs文件

把我截图中圈出来的地方改为:

LuisDialog());

然后就可以编译运行了。下面是测试截图:

其实我们看到,LUIS能做的是帮助bot更好的理解用户的意图。而准确获得用户意图的前提是我们预先设定了这些Intents,如果没有意图符合我们的预先设定,同样会有笑话。

但是和if-else比起来,我们的代码更简洁,更有逼格。我们只要不停地训练,完善LUIS app,就可以更好地解决问题。

以上就是我想和大家分享的内容了,如有不当,不正确之处请指出。谢谢。

(注意:luis app有时会因为用户网络问题,或者服务器自身问题,导致无法访问,或者响应缓慢的情况。)

Microsoft Bot Framework with LUIS的更多相关文章

  1. 如何将 Microsoft Bot Framework 链接至微信公共号

    说到 Microsoft Bot Framework 其实微软发布了已经有一段时间了,有很多朋友可能还不太了解,微软Bot的功能今天我给大家简单的介绍一下,Bot Framework的开发基础以及如何 ...

  2. Microsoft Bot Framework 链接至微信公共号

    如何将 Microsoft Bot Framework 链接至微信公共号   说到 Microsoft Bot Framework 其实微软发布了已经有一段时间了,有很多朋友可能还不太了解,微软Bot ...

  3. How the Microsoft Bot Framework Changed Where My Friends and I Eat: Part 1

    Bots are everywhere nowadays, and we interact with them all of the time. From interactions on our ph ...

  4. Microsoft Bot Framework 上手

    因为这前使用过MS Bot Frameowrk 做过开发, 最近心血来潮想做(挖坑)一个小的bot. 今天带领大家使用MS Bot Framework创建Hello World. 首先,我们要创建项目 ...

  5. 手把手教你利用微软的Bot Framework,LUIS,QnA Maker做一个简单的对话机器人

    最近由于要参加微软亚洲研究院的夏令营,需要利用微软的服务搭建一个对话Bot,以便对俱乐部的情况进行介绍,所以现学了几天,搭建了一个简单的对话Bot,期间参考了大量的资料,尤其是下面的这篇博客: htt ...

  6. 如何将 Microsoft Bot Framework 机器人部署以及网页应用

    <Bot Framework>是微软开发的一款可让任何人制作自己的聊天机器人.该工具可以理解自然语言并对图片进行分析等,初期开放了 22 个可集成到应用的 API. 首先说到Bot大家的第 ...

  7. Power BI Embedded 与 Bot Framework 结合的AI解决方案

    最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...

  8. Power BI Embedded 与 Bot Framework 结合的AI报表系统

    最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...

  9. 下一个时代,对话即平台 —— 开始使用Bot Framework和Cognitive Service来打造你的智能对话服务

    在16年3月30号微软的全球开发者大会Build上发布了Bot Framework,微软认为下一个big thing是Conversation as a Platform,简称CaaP,中文应该叫做& ...

随机推荐

  1. P3368 【模板】树状数组 2--洛谷luogu

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

  2. JavaScript的基本包装类型说明

    一.基本包装类型: 为了便于操作基本类型值,ECMAScript 还提供了3个特殊的引用类型:Boolean.Number和String.这些基本包装类型,具有与各自基本类型相应的特殊行为. 实际上我 ...

  3. linux日志:syslogd和klogd及syslog

    一. 日志守护进程 syslogd和klogd是很有意思的守护进程,syslogd是一个分发器,它将接收到的所有日志按照/etc/syslog.conf的配置策略发送到这些日志应该去的地方,当然也包括 ...

  4. js 动态调用字符串方法并传入对应参数

    在项目应用中,经常会需要根据业务数据需要动态去拼凑字符串,然后将字符串作为js代码进行执行. js提供eval()来支持.这里分享一个调用函数并传入需要参数的一个方法demo //动态调用自定义js方 ...

  5. [Spark][Flume]Flume 启动例子

    Flume 启动例子: flume-ng agent --conf /etc/flume-ng/conf --conf-file /etc/flume-ng/conf/flume.conf --nam ...

  6. NanoFabric-ServiceFabric 操作手册

    service-fabric-52abp-ocelot A Service Fabric sample with a Frontend, one API Gateway and 52abp Micro ...

  7. MySQL之索引原理

    --------------------------------------------------------------------------------堕落的状态,无疑是慢性自杀.想想自己为什 ...

  8. 用Flask+Redis维护Cookies池

    Redis数据库:存储微博账号密码 这里需要购买账号 登录后的cookies:键值对的形式保存 GitHub:https://github.com/LXL-YAN/CookiesPool 视频讲解:h ...

  9. 输入input

    用input接收到的类型全部都是字符串!!! 要查看变量类型,可以使用type()模块: 字符串不能和数字进行比较,因此如果输入是以input方式输入的,需要先转换成数字格式:

  10. Linux启动/停止/重启Mysql数据库

    1.查看mysql版本 1)status; 2)select version(); 2.Mysql启动 1)使用 service 启动: service mysqld start (5.0版本是mys ...