机器人服务应该是个比较容易上手的AI服务,发展也非常的快。距离我之前写的随笔没多久吧,已经从原来的独立站点,变为Azure中的Bot Services了。而且支持的机器人种类也更加清晰和增多了。

    更新的Bot Service的文档可以看到,现在机器人可以分为五类。之前我尝试的应该是Basic类和Form类,而上次没来得及尝试的语义识别单列了Language类,主动触发机器人服务是Proactive类,而今天想玩的是QnA Maker类机器人。

Template Description
Basic Creates a bot that uses dialogs to respond to user
input.
Form Creates a bot that collects input from a user via a
guided conversation that is created using FormFlow in C#
or waterfalls in
Node.js.
Language understanding Creates a bot that uses natural language models
(LUIS) to understand user intent.
QnA Maker Creates a bot that uses the QnA Maker service to
answer user’s FAQs.
Proactive Creates a bot that uses Azure Functions to alert
users of events.

     QnA Maker的站点在:https://qnamaker.ai/ 这个站点很简洁,但是需要的信息都有了。QnA机器人应用场景类似问题和答案简单匹配,其实大部分的对话机器人和这个类似。结合其他的功能,比如Card,比如分支,就会让机器人流光溢彩。我觉得QnA应该是快速让机器人具备回答问题的最佳选择吧,至少比我上次写一堆代码来做人机交互快多了。站点提供了一张图来说明QnA机器人的逻辑,可从多种来源输入问题/回答,并将机器人服务连接到不同的频道。问题/回答可以提供索引和评分,便于机器人不断学习和优化回答。

从零开始玩人工智能-机器人服务-03_第1张图片

    对于QnA机器人,我初步打算做两个测试,第一,尝试使用QnA机器人建立一个KB自动答复。对于常见的问题,构建一个框架让机器人自动根据提问提供解决问题的KB文章。第二,尝试把这个机器人放到Azure的Bot Service上。

    QnA Maker使用两个UUID管理不同的机器人,首先要有一个订阅ID,才能够访问QnA的服务。其次每个QnA服务都有个KB ID,这样就能把不同用处的机器人分开了。每个服务都可以对指定的用户进行授权。

    为机器人准备问题/答案并训练它再简单不过了,在QnA Maker网站上就可以导入QnA的文本文件。文本文件的格式也非常简单,前面是问题,使用Tab分隔,然后是答案。导入文件后,点击“保存并训练”,导入的内容就被服务接受了。然后你在服务中就能够看到导入的问题/答案了。有了问题和答案,马上就能在TEST页面进行测试。

从零开始玩人工智能-机器人服务-03_第2张图片

    看到这里,估计你会说,这哪里看得出人工智能了?我写个脚本按照输入查找输出字符串不就搞定了?请仔细观察上图哦~ 第一次提问,我是按照导入的完整问题输入的,很准确的给出了预设的答案。第二次提问,我只输入了几个关键字哦,QnA服务自己进行了匹配,给出了最接近的答案。

    实际上QnA服务确实会对答案进行评分,从它返回的JSON格式就能看出来。对于QnA的Service使用方法,给了一个非常好的说明站点和Swagger实现。例如,调用服务来做应答,就可以使用POST方法,具体可以参考:

https://westus.dev.cognitive.microsoft.com/docs/services/58994a073d9e04097c7ba6fe/operations/58994a073d9e041ad42d9ba9

    除了在QnA站点的Test页面,使用Swagger可以也很快的验证你的机器人。   

从零开始玩人工智能-机器人服务-03_第3张图片

    输入你的订阅ID和机器人对应的KB ID,内容类型使用JSON。

从零开始玩人工智能-机器人服务-03_第4张图片

    页面会按照提供的信息自动构造HTTP请求。

从零开始玩人工智能-机器人服务-03_第5张图片

    点击发送后,QnA Maker Bot服务就会给出响应,对于可能的响应都给出了具体说明。

    方法很简单,所以写一个Python的实现也不难(虽然Pylint给示例代码打了个无比负的分哈哈)

从零开始玩人工智能-机器人服务-03_第6张图片

    可以看到,代码返回的HTTP响应和之前Swagger测试的一致,同样包含问题、答案和评分。

    回到导入问题/答案导入的环节。需要注意的是,开始我发现每次导入文件时,中文都变成了乱码,我立即意识到,默认的notepad使用的ANSI编码可能有问题。改成UNICODE就正常了。

    除了使用TXT导入之外,QnA Maker的Service还支持添加URL,对于自动导入以前的QnA页面也非常方便。这个方式我是在测试Create Knowledge Base的POST方法时发现的,示例直接添加了文档的QnA页面:https://docs.microsoft.com/en-in/azure/cognitive-services/qnamaker/faqs

    我还奇怪它是如何识别问题和答案的,后来发现起作用的是问号~ 为了验证,我把TXT文本改成类似的格式,导入也成功了。

    限于篇幅,后续再继续写Azure Bot Service部分和学习Node.JS部分。