在16年3月30号微软的全球开发者大会Build上发布了Bot Framework,微软认为下一个big thing是Conversation as a Platform,简称CaaP,中文应该叫做"对话即平台"。在我们的下个时代,我们将会处在对话即平台的时代,不管是一个屏幕,一个桌子,一个冰箱,甚至是人,都是一个app,都是一个对话的窗口,所有的交互都通过对话来完成。起床,你用自然语言唤起梳妆台的镜子显示今日的天气,还有新闻。家里的小娜(Cortana)提醒你要赶紧出门,路上因为限号4,9,根据历史的预测,会提早堵车,需要提前20分钟出发。

那这个时代,将是如何实现的呢?人工智能不是简单一个团队,一小段时间就能完成的,需要经过大量的科研人员,进行大量的研究才能实现的。那怎么样才能实现物物智能,智能众生的构想呢?微软将微软亚太研究院多年的研究技术开放出来,让各个开发者,不管是大公司,小公司甚至是个人都可以借助"智能"的"洪荒之力",实现智能对话平台的未来。

打造这样的智能服务需要涉及到微软的两个技术,Bot Framework和Cognitive Services(认知服务)。

Bot Framework就是帮你快速搭建智能服务的后端,快速在各种终端和服务上提供服务。包括三大组件。

Bot Builder SDKs:

这个是Bot的生成器,快速生成一个ASP.NET和Node.js的后端服务,提供了像Dialog、FormFlow帮你管理与用户的会话。

Bot Connector:

这是个Bot的Channel,帮你把你的服务快速发布到各个渠道,比如说Skype,Facebook Messager等等。这样用户就可以在Skype等Channel上使用你的服务了。

Bot Directory:

这个算是Bot 的商店,在这里可以找到各个bot,你也可以把自己的Bot发布出来,从而大家都可以看到你的Bot。

Cognitive Services(认知服务)的前身是Project Oxford(牛津计划),正式发布的时候更名的。这是微软将研究院研究的技术以API和SDK的形式开放给开发者的一系列智能化服务。

主要包括5大类的服务:视觉、语言、语言、知识和搜索。

其实就包括我们今天要讲的"语言理解(Language Understanding Intelligent Service,简称LUIS)"。

我们今天以一个例子举例,来详细介绍怎么利用Bot Framework和LUIS("撸以si")打造一个智能陪护机器人。

一、下载Bot Framework的SDK

首先,请下载Bot Framework的SDK,建议下载Bot Framework的Visual Studio的模板Bot Application

下载下来的模板(不用解压)请直接放置到C:\Users\你的用户名\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C# 下面,这样你在C#下面就可以看到有Bot Application的模板了。

如果是使用NuGet来下载SDK,请参考:

  1. 右键你的C#项目,选择"Manage NuGet Packages".
  2. 在"Browse"的tab页,输入"Microsoft.Bot.Builder".
  3. 点击"Install"的按钮.

如果你使用的是Node.js,请使用以下命令:

npm install botbuilder

二、在Azure上创建bot服务

咱们现在创建一个Bot Application的应用。我准备创建一个叫做"萌萌"的机器人。

在Azure上创建Bot服务:搜索bot,选择"Web App Bot"。

点击创建,填写相关的信息:

选择基本模板即可,其他默认选项即可。

配置完成后,点击创建,等待几分钟即可创建完成。

创建完成你可看到Bot服务帮你创建了5个相关服务。

点击第一个Web App Bot服务,即可配置Bot相关服务。

"Name":你的bot的名字,比如我的叫做"萌萌"。

"句柄(Bot Handle)":比如我的写"mengmeng",其实就是你的Bot的id,记下来。

"Description":你的Bot的描述,会在你的publish之后主页上显示。

点击"信道",其实就是配置各个平台,里头可以看到"Web Chat",这个是网页端的channel,已经帮你写好的一个iframe,咱们点击"Edit"。

生成Web Chat的密钥之后,把密钥复制,点击"I'm done configuring Web Chat"。

在资源组中,选择你创建的资源组,点击"部署":

请记下APPID和AppSecret两个参数,后面会用到。

三、准备你的机器人后端服务代码

从我的GitHub地址下载代码:https://github.com/cheneyszp/MengmengBot

在你的Web.config里,填上你的BotId,刚才创建的App ID和AppSecret。

打开网站的起始页default.htm

复制以下代码:

<!DOCTYPE html>

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

<html>

<head>

<title>萌萌</title>

<meta charset="utf-8" />

</head>

<body style="font-family:'Segoe UI'">

<iframe name="myframe" scrolling="auto" width="100%" height="100%"

onload="document.all['myframe'].style.height=myframe.document.body.scrollHeight"

src="https://webchat.botframework.com/embed/你自己的Bot句柄?s=你 自 己 的 Web Chat 密 钥 " style="height: 502px; max-height: 502px;"></iframe>

</body>

</html>

然后右键项目工程,点击"publish",之后你就可以拥有一个简单的Bot啦。

四、新建LUIS服务

请先登录:https://www.luis.ai/ ,这是语言理解服务的portal。如果还没注册的话用live id注册以下就可以了。

点击"App"这一栏,咱们先点击"new App"新建一个app。

新建完成后,点击应用的名称,进入编辑这个应用。

我们先看以下左边的tab,可以看到有仪表盘,意图(Intents),实体(Entities),功能。。。。

Intents:就是意图,比如咱们现在要提供天气查询的服务,那么咱们就创建一个"查询天气"的Intent。

实体里头有两类:

Entities:实体,比如在查询天气的时候需要有地理位置信息,需要把用户的语言里头的地点提取出来,这个地点就是这个句子里头的实例,咱们创建一个"地点"的实例。

Pre-built Entities(预建实体):这个是预置好的实例,比如说时间,数字等等,我加了一个datetime的预置实例。

在功能里头会有:

Phrase List(短语列表功能):固定的一些短语,能够直接识别,比如说航空公司的名字等已知信息

Pattern Features(模式功能):正则表达式,可以匹配出相应的一些字段,比如说航班号。

咱们现在来创建一个能够识别查询天气的语言理解服务。

首先,查询天气需要地点信息,咱们先创建一个"地点"的实例。

点击到"实体"里头,"添加自定义实体":

添加一个"预建实体" datetime:

再创建一个叫做"查询天气"的Intent。

点击Done之后,点击"查询天气"会进入以下界面:

输入几个例子,比如说"北京天气怎么样",可以多输入几个句子的类型,比如"北京今天有雾霾吗?"等等,每输入完一句按一下回车。

如果北京等地点信息没有显示标记的话,选中北京两个字,然后选择"地点"标注。然后点击"保存"。

随手点击该界面右上角的"Train"按钮进行训练。

可以点击Test进行测试。

随手点击"Publish"的tab页面,进入到一下界面,点击"Publish to production slot"

点击Publish之后,你可以在Publish的tab页面底下,可以看到"Resources and Keys" ,

试用的话会给你自动生成一个Starter Key,右边的链接就是Publish出来的链接地址啦

如:https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/LUIS_APP_ID?subscription-key=LUIS_subscription-key&timezoneOffset=0.0&verbose=true&q=

如果商用的话,需要在Azure Portal创建一个LUIS服务,然后点击"Add Key",把LUIS的Key添加进来。

url后面加上查询语句就是API了。

https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/LUIS_APP_ID?subscription-key=LUIS_subscription-key&timezoneOffset=0.0&verbose=true&q=北京今天天气怎么样?

把LUIS的ID(就是apps后面那串字符)和subscription-key记下来,后面需要用到。

在URL后面可以输入相关的语句,然后回车,就可以看到返回的json字符串了。

四、在Bot中集成LUIS服务

现在我们就把LUIS集成到你的Web服务里头来就可以了。

咱们用Dialog的方式来完成,比较好管理会话。

在MessagesController.cs里头的public class MessagesController : ApiController添加MengmengDialog的类。

[LuisModel("你LUIS的ID", "你LUIS的subscription-key ")]

[Serializable]

public class MengmengDialog : LuisDialog<object>

{

public MengmengDialog()

{

}

public MengmengDialog(ILuisService service)

: base(service)

{

}

[LuisIntent("")]

public async Task None(IDialogContext context, LuisResult result)

{

string message = $"萌萌不知道你在说什么,面壁去。。。我现在只会查询股票和查询天气。。T_T" + string.Join(", ", result.Intents.Select(i => i.Intent));

await context.PostAsync(message);

context.Wait(MessageReceived);

}

public bool TryToFindLocation(LuisResult result, out String location)

{

location = "";

EntityRecommendation title;

if (result.TryFindEntity("地点", out title))

{

location = title.Entity;

}

else

{

location = "";

}

return !location.Equals("");

}

[LuisIntent("查询天气")]

public async Task QueryWeather(IDialogContext context, LuisResult result)

{

string location = "";

string replyString = "";

if (TryToFindLocation(result, out location))

{

replyString = await GetWeather(location);

await context.PostAsync(replyString);

context.Wait(MessageReceived);

}

else

{

await context.PostAsync("亲你要查询哪个地方的天气信息呢,快把城市的名字发给我吧");

context.Wait(AfterEnterLocation);

}

}

}

GetWeather这个函数需要自己实现,调用相关的API返回相应的天气信息。

然后在Task<HttpResponseMessage> Post([FromBody]Activity activity)下创建MengmengDialog来处理对话的内容。

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)

{

if (activity.Type == ActivityTypes.Message)

{

await Conversation.SendAsync(activity, () => new MengmengDialog());

}

else

{

HandleSystemMessage(activity);

}

var response = Request.CreateResponse(HttpStatusCode.OK);

return response;

}

然后发布,这样我们的天气查询机器人就完成啦!

测试一下:

换着问法问天气,发现都没问题,都能够正确地识别出来。

在LUIS Portal里头,点击"Review endpoint utterances",可以看到所有调用LUIS API发过来的消息,也就是说,你可以在这里看到所有用户发来的消息。

你可以看看LUIS标注得对不对,如果错了勾选,然后选择"重新分配意图",然后保存,之后LUIS会学习到这个知识,变得越来越准。

重新标注之后记得重新train一下然后publish哈。

比如说,输入"北京现在天气怎么样",发现只识别出来Intent,但是没有识别出来地点。

重新标注,train,重新publish一下。

发现已经能够正确识别。

试试吧,有问题留言:)

代码已经发布到GitHub,请参考:https://github.com/cheneyszp/MengmengBot

下一个时代,对话即平台 —— 开始使用Bot Framework和Cognitive Service来打造你的智能对话服务的更多相关文章

  1. 下一个时代的发展架构竟然是它!FaaaaaaaaS到底是个啥?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云serverless团队发表于云+社区专栏 导读:2018年7月6 - 7日,一年一度的技术圈盛会ArchSummit全球架构师 ...

  2. SNF快速开发平台MVC-审核流,审核完成后会给下一个审核人发邮件,下一个审核人可以不登录系统,在邮件里进行审核处理

    审核流设计和使用参考以下资料: 审核流设计 http://www.cnblogs.com/spring_wang/p/4874531.html 审核流实例 http://www.cnblogs.com ...

  3. 混乱中的ICO平台,会不会是下一个P2P的重灾区?

    当众多巨头和创业者还在为共享打车.共享单车.VR.IP化.互联网金融沉迷时,一种全新的"众筹"正在造就一个又一个暴富神话.其名为ICO,即首次代币众筹,一般指区块链初创项目在众筹平 ...

  4. VC眼中的众筹平台:将改变VC募集基金方式,成为下一个纳斯达克市场

    “一个好的投资平台可能会成为像纳斯达克一样的市场”,这是投资人给予众筹平台的未来憧憬. ”从长远的角度来说,众筹平台可能会改变VC募集基金的方式“,戈壁投资合伙人蒋涛说,“从二级市场看,不论是企业的I ...

  5. 引爆公式让你的APP游戏成为下一个“爆款”

    在2014年的移动互联网领域,“魔漫相机”是一款值得关注的产品.虽然没有腾讯.百度或阿里巴巴等大资源的支持,但是这款应用一上线就在中国市场发展迅猛,日下载量超过80万次,最高一日达300万次.类似的成 ...

  6. HR从业者的下一个十年该怎么做?

    众所周知,目前我们所处的以互联网为代表的新经济时代,有两个重要的特征一是客户价值至上,二是人力资本主权.围绕这两个基本特征,我们需要重新架构我们的商业模式和创新人力资源管理思维.模式.工具和方法. 人 ...

  7. VR全景:“互联网+之后的下一个“风口”

    2017年VR虚拟现实会成为流行趋势吗? 2017年,另一个时代正在悄然走来--720全景时代!如果你错过了前十年的互联网大爆发,千万不要再错过接下来十年的VR全景时代的机遇! VR全景是" ...

  8. 把握这两点,抢占下一个电商风口|2016最新中国电商App排名&研究报告

    序言 电商,是随着中国互联网经济的持续发展所成长起来的.淘宝.京东这些电商从交易额和影响力上看都位列中国最为成功.最具话题性的互联网企业之中.尽管近几年中国经济有所放缓,但中国消费市场的增长速度仍有望 ...

  9. 阿里将成为下一个谷歌?是谁Google真正的挑战者

    非常多观点觉得阿里下一步即将成为google的挑战者,但不管从技术储备还是产业布局来看,阿里都难当此任.在产业模式上.电商挑战搜索尚有诸多短板,在解决这些根本问题前,空泛谈论这些是没有意义的. < ...

随机推荐

  1. Java笔记8:Hibernate连接Oracle

    1下载hibernate-3.6.0 Final.zip到任意目录,解压缩后得到hibernate目录 2下载slf4j-1.7.13.zip到任意目录,解压缩后得到slf4j-1.7.13 3操作数 ...

  2. shell的浮点运算

    参考: https://www.linuxquestions.org/questions/linux-software-2/multiply-floats-in-bash-script-618691/ ...

  3. 我如何向HRMM介绍MICROSERVICE

    一天我司招才猫姐(HR 大人)问我,你给我解释一下 Microservice 是什么吧.故成此文.一切都是从一个创业公司开始的. 第一章:从集中到分权 最近的创业潮非常火爆,我禁不住诱惑也掺和了进去, ...

  4. Git库搭建好之后,当要提交一个新的文件,需要做的是3个步骤

    Git库搭建好之后,当要提交一个新的文件,需要做的是3个步骤 1.git add new.txt 2.git commit -m "add a new file" 3.git pu ...

  5. 通过LR监控Linux服务器性能

    1)设置监控服务器要监控 UNIX 资源,必须配置 rstatd 守护程序.注意,可能已经配置了 rstatd守护程序,因为当计算机收到一个 rstatd 请求时,该计算机上的 inetd 自动激活r ...

  6. vue vuex 大型项目demo示例

    1.vuex 动态模块配置 import Vue from 'vue' import Vuex from 'vuex' import store from '@/store'; // 使用Vuex插件 ...

  7. Odoo,OpenERP widget标签

    Odoo,OpenERP widget标签 widget="statusbar" 头部状态条标签 widget="email"  电子邮件地址标签 widget ...

  8. (五)Lucene——中文分词器

    1. 什么是中文分词器 对于英文,是安装空格.标点符号进行分词 对于中文,应该安装具体的词来分,中文分词就是将词,切分成一个个有意义的词. 比如:“我的中国人”,分词:我.的.中国.中国人.国人. 2 ...

  9. Some Principles

    立刻做 1.2分钟原则 凡是2分钟内就可以完成的事,立刻去做不要犹豫.人的大脑擅长分析处理,不擅长记忆. 应用举例: a.加微信加QQ顺手添加备注名,或许下次联系已经是三个月后了. b.吃完饭立刻洗碗 ...

  10. C# 反射只获取自己定义的属性,不获取父类的属性

    PropertyInfo[] p = user.GetType().GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | Bi ...