Microsoft Bot Framework with LUIS
今年微软的编程之美的主题是“对话即平台”,“人工智能”,要求参赛选手用到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。
回到浏览器显示的那个网页,把那个网页的地址粘贴到最上方的输入窗口。大多数默认的都是:
然后记得要在这个地址后面加上:“/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的更多相关文章
- 如何将 Microsoft Bot Framework 链接至微信公共号
说到 Microsoft Bot Framework 其实微软发布了已经有一段时间了,有很多朋友可能还不太了解,微软Bot的功能今天我给大家简单的介绍一下,Bot Framework的开发基础以及如何 ...
- Microsoft Bot Framework 链接至微信公共号
如何将 Microsoft Bot Framework 链接至微信公共号 说到 Microsoft Bot Framework 其实微软发布了已经有一段时间了,有很多朋友可能还不太了解,微软Bot ...
- 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 ...
- Microsoft Bot Framework 上手
因为这前使用过MS Bot Frameowrk 做过开发, 最近心血来潮想做(挖坑)一个小的bot. 今天带领大家使用MS Bot Framework创建Hello World. 首先,我们要创建项目 ...
- 手把手教你利用微软的Bot Framework,LUIS,QnA Maker做一个简单的对话机器人
最近由于要参加微软亚洲研究院的夏令营,需要利用微软的服务搭建一个对话Bot,以便对俱乐部的情况进行介绍,所以现学了几天,搭建了一个简单的对话Bot,期间参考了大量的资料,尤其是下面的这篇博客: htt ...
- 如何将 Microsoft Bot Framework 机器人部署以及网页应用
<Bot Framework>是微软开发的一款可让任何人制作自己的聊天机器人.该工具可以理解自然语言并对图片进行分析等,初期开放了 22 个可集成到应用的 API. 首先说到Bot大家的第 ...
- Power BI Embedded 与 Bot Framework 结合的AI解决方案
最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...
- Power BI Embedded 与 Bot Framework 结合的AI报表系统
最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...
- 下一个时代,对话即平台 —— 开始使用Bot Framework和Cognitive Service来打造你的智能对话服务
在16年3月30号微软的全球开发者大会Build上发布了Bot Framework,微软认为下一个big thing是Conversation as a Platform,简称CaaP,中文应该叫做& ...
随机推荐
- pip install报错Can't roll back cryptography; was not uninstalled
当使用pip install或者pip install --upgrade报错 Can't roll back cryptography; was not uninstalled 可以进行以下的尝试: ...
- Spark SQL在100TB上的自适应执行实践(转载)
Spark SQL是Apache Spark最广泛使用的一个组件,它提供了非常友好的接口来分布式处理结构化数据,在很多应用领域都有成功的生产实践,但是在超大规模集群和数据集上,Spark SQL仍然遇 ...
- 传统前端工程使用 Vue 等框架重构的思路
这段时间遇到类似的问题,第一反应便是使用 cli 搭建项目,但是细想一下立马否决了,原因如下: 工程量太大,猴年马月能重构完,此期间原项目还是没有任何变动(如果没人跟你一起同步修改之前老项目的话 无法 ...
- 图解Redis之数据结构篇——链表
前言 Redis链表为双向无环链表! 图解Redis之数据结构篇--简单动态字符串SDS提到Redis使用了简单动态字符串,链表,字典(散列表),跳跃表,整数集合,压缩列表这些数据结构 ...
- .NET-记一次架构优化实战与方案-前端优化
目录 .NET-记一次架构优化实战与方案-梳理篇 .NET-记一次架构优化实战与方案-前端优化 .NET-记一次架构优化实战与方案-底层服务优化 前言 上一篇<.NET-记一次架构优化实战与方案 ...
- H5 19-序选择器下
19-序选择器下 我是项目 我是项目 我是项目 我是项目 我是项目 我是项目 我是项目 <!DOCTYPE html> <html lang="en"> & ...
- 如何恢复Eclipse中被误删除的文件
在使用Eclipse时,可能会不小心误删除一些文件,没关系,Eclipse有个非常强大的功能,能让这些误删除的文件恢复回来,下面就来介绍一下. 工具/原料 Eclipse Kepler 方法/步骤 ...
- Java 集合的简单理解
集合(容器) Java的集合类分别是Collection接口和Map接口派生而来. Collection接口 对于实现Collection接口的子类,都会实现Collection接口中抽象方法,所以他 ...
- 安装使用swoole
swoole首页:https://www.swoole.com/ 方法1:使用pecl安装 pecl install swoole 注意,php版本必须是7.0以及7.0以上的版本. 方法2:编译源码 ...
- 【学习总结】Markdown 使用的正确姿势
参考资料:Learning-Markdown 入门参考 注:原博可能对GitHub中的Markdown格式更适用. 有时间可以再GitHub中尝试并写一篇相关攻略. ps:在王熊猫的GitHub里也有 ...