如何使用google的Api.ai构建自己的AI助手

  • 时间:2017-05-23
  • 分类:科技头条
  • 3157 人浏览

如何使用Api.ai构建自己的AI助手

人造智能助手的世界正在增长 - Siri,Cortana,Alexa,Ok Google,Facebook M,Bixby - 所有技术上的大个子都有自己的。然而,许多开发人员并没有意识到,建立自己的AI助手也很容易!您可以根据自己的需求,自己的IoT连接的设备,自己的定制API进行自定义。天空的极限。

早些时候,我在2016年汇编了一个关于建立人工智能的五种简单方法的指南,其中我介绍了一些简单的选项,用于构建AI助手。在这篇文章中,我想看看在一个特定的服务,使得它非常简单,让不少功能齐全的AI助手用很少的初始设置- Api.ai

用Api.ai构建一个AI助手

这篇文章是一系列文章之一,旨在帮助您获得一个使用Api.ai运行的简单个人助理:

    如何使用Api.ai构建自己的AI助手(这个!)自定义您的Api.ai助理与意图和上下文授权您的Api.ai助手与实体如何将Api.ai助手连接到物联网

什么是Api.ai?

Api.ai是一项服务,允许开发人员构建语言对文本,自然语言处理,人工智能系统,您可以使用自己的自定义功能进行培训。他们拥有一系列现有的知识库,使用Api.ai构建的系统可以自动理解所谓的“域” - 这是我们将在本文中关注的内容。域名提供了百科全书知识,语言翻译,天气等知识库。在未来的文章中,我们将介绍Api.ai的一些更先进的方面,使我们能够进一步个性化我们的助理。

Api.ai入门

要开始,我们将前往Api.ai网站,并点击“免费入门”按钮或右上角的“免费注册”按钮。

然后我们被带到一个非常简单的注册表单:输入您的姓名,电子邮件和密码,然后点击“注册”。对于那些避免另一组登录凭据的用户,您也可以使用右侧的按钮使用GitHub或Google帐户注册。

由于Api.ai是由Google购买的,因此仅将Google帐户迁移到Google帐户登录。因此,如果您刚开始使用Api.ai,则需要使用Google帐户登录:

1e4b76f73bbf12d2e3b7ceb6575b0154_14945742381login.jpg

点击允许在以下屏幕中授予Api.ai访问您的Google帐户:

7517d31830c7e4b908b04d906b6f269f_14945742401login-b.jpg

您还需要阅读并同意其服务条款:

305b437c44185314aad4628d43acf8ba_14945742422toc.jpg

注册后,您将直接进入Api.ai界面,您可以在其中创建虚拟AI助手。 您创建和教授具体技能的每位助理在Api.ai中被称为“代理”。 因此,首先,您可以通过点击左上角的“创建代理”按钮创建您的第一个代理。

705446973790156c3312f62177e5ad3f_14945742453newagent.jpg

您可能需要再次授权Api.ai对您的Google帐户拥有其他权限。 这是正常的,没关系! 点击“授权”继续:

115b0056f55e45fdc921aad96b4dfeb2_14945742474authorize.jpg

接下来

7c4679bf1a70c095a00c990bffe99628_14945742504authorize-b.jpg

在下一个屏幕上,输入代理的详细信息,包括:

名称:这只是为了您自己的参考在api.ai界面区分代理。你可以叫代理人任何你喜欢的东西 - 一个人的名字(我选择了Barry)或一个代表他们所帮助的任务的名字(例如光控制器)。
描述:一个人类可读的描述,所以你可以记住代理人的责任。这是可选的,如果您的代理人的名称不言自明,可能不需要。
语言:代理人所使用的语言。一旦你选择了它,就不能改变 - 所以选择明智!对于本教程,请选择英语,英语可以访问最多的Api.ai域。您可以在Api.ai文档的“语言”表中查看哪些域可用于每种语言。
时区:正如您所料,您的代理是时区。有可能已经检测到您当前的时区。
它还将自动为您的代理设置一个Google Cloud Platform项目,因此您无需在此方面做任何事情;这一切都是自动化的!很高兴知道这是发生的,但是,如果您经历了大量测试并创建了许多代理商,只要知道有很多Google Cloud Platform项目正在创建,您可能希望清理一天。

当您输入代理人的设置后,选择代理名称旁边的“保存”可保存所有内容:

01cc412c047b9fd370cd6d99d5e150fd_14945742555newagent.jpg

测试台
创建代理后,您可以使用右侧的测试控制台进行测试。 您可以在顶部输入查询,并将它们发送给您的代理,显示在听到这些语句之后将返回的内容。 输入一个问题,如“你好吗?”,看看它返回什么。 您的结果应显示在下面:

5de4e1f3195e34f131d2f6ff1d42ab34_14945742586newagent.jpg

如果您在结果的右侧向下滚动,您将看到有关Api.ai如何解释您的请求的更多详细信息(如上面的屏幕截图所示)。 下面有一个叫做“显示JSON”的按钮。 点击它可以看到API将如何在您的应用程序中返回此类响应。

Api.ai将打开JSON查看器,并向您显示一个类似于此的JSON响应:

你会看到...你的代理不知道如何回应!现在,它并不完全是“智能”的人造智能:它仍然需要添加智能位。action字段中的input.unknown值告诉我们不知道如何继续。以上,它返回的消息是“对不起,你能再说一遍吗”,这是它的默认回退之一。而不是告诉人类,它不明白,它只是要求他们再次说一遍又一遍。这不是理想的,我更愿意把它改变成一个让bot清楚的东西。如果你对这种事情很挑剔,想改变这里所说的话,你可以通过点击“默认回退意图”项目在“意图”页面上找到。

一段时间之前已经使用Api.ai的用户的注释(或已经在操作中看到它):您可能实际上期待它有更多的可用开箱即用。以前,它能够回答诸如“谁是史蒂夫·乔布斯”的查询,默认情况下。不再这样了!您必须添加自己与第三方API的集成,以采取行动和来源信息。 Api.ai提供了解释和解释事物的一面的句子。

添加小谈话
我们可以添加一些默认功能,这给我们的机器人提供了一些智慧 - “小谈话”功能。这提供了一系列常见问题的答案,包括上面的“你好吗”。默认情况下不是这样。要打开它,请转到左侧的“小谈话”菜单项,然后单击“启用”:

196a55311c2781a720b83d5376475ae5_14945742607smalltalk.jpg

启用后,如果您向下滚动,您可以看到一系列常见的小型谈话短语的类别。 找到“你好/再见”部分,点击它来展开它。 对问题“你好吗?”添加一些不同的回答,然后点击右上角的“保存”。 添加短语后,您将看到“Hello / Goodbye”部分旁边的百分比数字增加,以显示您定制了chatbot的数量。

cf484960585d28af5f293ec0cda26e37_14945742657smalltalk-b.jpg

如果你去测试台,问“你好吗?”再次,你应该回答你输入的一个答复!

584d628ae2a37d59e5f2598ae178d351_14945742697smalltalk-c.jpg

如果没有正确回复,请确认您确实点击“保存”,然后再发送!它不会自动保存。

理想情况下,您可以自定义尽可能多的小型对话响应,这样可以让您的Api.ai bot具有更加独特的个性。您可以选择其响应的语气和结构。这是一个脾气暴躁的聊天人,讨厌人类和它说话吗?这是一个痴迷于猫的聊天室吗?或者也许是在青少年互联网/文字聊天中做出回应的聊天室?你决定!

现在你至少有一些小的话题元素,您的代理程序现在可以让您将它们整合到自己的Web应用程序界面中。为此,您需要获得API密钥才能远程访问您的代理。

查找您的Api.ai API密钥
您需要的API密钥在代理的设置页面上。要找到它,请点击代理商名称旁边的cog图标。在出现的页面上,将“客户端访问令牌”复制并粘贴到安全的位置。我们需要对Api.ai的服务进行查询:

8ae05d362d8b394f66ade6b5e343d201_14945742718apikey.jpg

代码
如果您想查看工作代码并玩弄它,则可以在GitHub上使用。随意使用它,并扩展自己的AI个人助理的想法。

如果你想尝试,我有Barry跑在这里。请享用!

使用JavaScript连接到Api.ai
你目前有一个工作的个人助理,在Api.ai的云端运行。您现在需要一种方法来从您自己的界面与您的个人助理交谈。 Api.ai具有一系列平台SDK,可与Android,iOS,网络应用程序,Unity,Cordova,C ++等一起使用。您甚至可以将其整合到Slack机器人或Facebook Messenger机器人中!对于这个例子,您将使用HTML和JavaScript来制作一个简单的个人助理Web应用程序。我的演示构建了Api.ai的HTML + JS要点中所示的概念。

您的应用将执行以下操作:

在输入字段中接受书面命令,当您按Enter键时提交该命令。
或者,使用HTML5语音识别API(这仅适用于Google Chrome 25及更高版本),如果用户点击“说话”,他们可以说出自己的命令,并将它们自动写入输入字段。
收到命令后,您可以使用jQuery向Api.ai提交AJAX POST请求。 Api.ai将返回其作为JSON对象的知识,如上所述,在测试控制台中。
您将使用JavaScript读取该JSON文件,并在Web应用程序上显示结果。
如果可用,您的网络应用程序还将使用Web Speech API(可在Google Chrome 33及更高版本中)以口头方式回复您。
整个网络应用程序可在GitHub上找到。随意参考,看看我是如何设计样式和结构化的HTML。我不会在这篇文章中解释一下如何整合在一起,主要集中在Api.ai SDK方面的事情。我还会指出并简要解释哪些位使用HTML5语音识别API和Web Speech API。

您的JavaScript包含以下变量:

这些是以下几个:

的accessToken。这是您从Api.ai界面复制的API密钥。这些权限允许您访问SDK,并说明您正在访问的代理。我想访问我的个人经纪人巴里。
的baseUrl。这是对Api.ai SDK的所有调用的基本URL。如果新版本的SDK出来,您可以在这里更新。
$性的语音。这将存储您的<input>元素,以便您可以在JavaScript中访问它。
$ recBtn。当用户想要点击并与网络应用程序通话时,这将存储您将要使用的<button>元素。
承认。您将webkitSpeechRecognition()功能存储在此变量中。这是针对HTML5语音识别API。
messageRecording,messageCouldntHear,messageInternalError和messageSorry。这些是当应用程序记录用户的声音,无法听到他们的声音,当您有内部错误,以及您的代理不明白时显示的消息。您将这些存储为变量,以便您可以轻松地在脚本的顶部更改它们,并且还可以指定哪些不想让应用程序在以后大声朗诵的文件。
在这些代码行中,用户在输入字段中按Enter键时查找。当发生这种情况时,运行send()函数将数据发送到Api.ai:

接下来,看一下用户是否点击录音按钮,要求应用程序听他们听(或正在听,暂停听)。 如果他们点击它,运行switchRecognition()函数从录制切换到不录音,反之亦然:

最后,对于初始的jQuery设置,你设置一个按钮,它将在屏幕的右下方显示和隐藏JSON响应。 这只是为了保持清洁:大多数时候您不希望看到通过的JSON数据,但是每一次,如果发生意外事件,您可以单击此按钮切换JSON是否可见:

使用HTML5语音识别API
如上所述,您将使用HTML5语音识别API来聆听用户并转录他们所说的内容。 此功能目前仅适用于Google Chrome。

我们的startRecognition()函数如下所示:

这就是运行HTML5语音识别API。它都使用webkitSpeechRecognition()中的函数。以下是一些关于发生的事情的指针:

recognition.onstart。从用户麦克风录音开始运行。您使用一个名为respond()的函数来显示您的消息,告诉您正在收听的用户。稍后我会详细介绍一下respond()函数。 updateRec()将录制按钮的文本从“停止”切换为“说话”。
recognition.onresult。当您有语音识别的结果时运行。您解析结果并设置您的文本字段通过setInput()使用该结果(此函数只是将文本添加到输入字段,然后运行您的send()函数)。
recognition.onend。语音识别结束时运行。您将此设置为null,以识别。如果您有成功的结果,则阻止它运行。这样,如果识别运行,您知道语音识别API尚未了解用户。如果该功能运行,您回应用户告诉他们您没有正确听到它们。
recognition.lang。设置您要查找的语言。在演示的情况下,它正在寻找美国英语。
recognition.start()。开始整个过程!
我们的stopRecognition()函数要简单得多。它停止我们的认可,并将其设置为null。然后,它更新按钮以显示您不再录制:

switchRecognition()通过检查识别变量来切换是开始还是停止识别。 这可以让您的按钮打开和关闭识别:

与Api.ai沟通
要将您的查询发送到Api.ai,您可以使用send()函数:

这是一个典型的AJAX POST请求,使用jQuery来https://api.api.ai/v1/query。 您确定要向其发送JSON数据,并期待其中的JSON数据。 您还需要设置两个标题 - 授权和ocp-apim-subscription-key作为Api.ai的API密钥。 您将数据格式{q:text,lang:“en”}发送到Api.ai,然后等待响应。

收到响应时,运行prepareResponse()。 在此功能中,您将格式化您将放入网络应用程序的调试部分的JSON字符串,并取出Api.ai的响应的结果.speech部分,它为我们提供了我们助理的文本响应。 您通过respond()和debugRespond()显示每条消息:

您的debugRespond()函数将文本放入我们的字段中以获取JSON响应:

你的response()函数有几个步骤:

开始时,您检查响应值是否为空。 如果是这样,你设置它说这是不确定的问题的答案,因为Api.ai没有返回一个有效的回应给你:

如果您确实有要输出的信息,而不是您正在录制的信息,那么您可以使用Web Speech API使用SpeechSynthesisUtterance对象大声地显示该消息。 我发现没有设置voiceURI和lang,我的浏览器的默认语音是德语! 这使得演讲难以理解,直到我改变它。 要实际说出消息,你使用window.speechSynthesis.speak(msg)函数:

注意:重要的是不要让它说“录制...”文本位:如果你这样做,麦克风将会拿起该语音并将其添加到录制的查询中。

最后,显示您的响应框,并添加该文本,以便用户也可以阅读它:

托管您的Web界面
为获得最佳效果,您可能需要在启用了HTTPS的Web服务器上托管它。 您对Api.ai的请求已通过HTTPS,因此还可以在HTTPS上托管Web界面。 如果您希望将其用作原型,并且没有HTTPS安全的Web服务器可用,请尝试使用Glitch.com! 这是一个新的服务,可以托管包含前端和后端(Node.js)代码的代码段。

例如,我也有Barry也在https://barry.glitch.me主持。 目前Glitch主机完全免费! 这是一个很好的服务,我强烈推荐给它一个去。

如果您希望使其成为一个更大的项目,请考虑使用免费的SSL / TLS证书加密,或者查看从您的Web主机购买的证书。

在行动
如果您在GitHub repo中使用我的样式运行Web应用程序,它看起来像这样:

3fd573cb5b186bfe3a26b41d7c33696b_1452492549barryinaction.jpg

如果您通过点击“说出”并说“你好吗?”这个问题,最初显示你正在录制:

d3f9de8b25362cca6df3bdd756d3783a_14945742739web.jpg

(当您点击该按钮时,您可能需要授予Chrome访问麦克风的权限。显然,每次都会发生这种情况,除非您以HTTPS方式提供该页面。)

然后,它可以视觉地反应(并且说出来,这很难在屏幕截图中显示),如下所示:

c47e3aac2f1bba2ee81319edd55581e1_14945742789web-c.jpg

您也可以单击右下方的按钮,查看Api.ai给出的JSON响应,以防您想调试结果:

2d061eb06c7a42b7806122afebb5061a_14945742809web-d.jpg

如果你似乎主要得到“我听不到你,你可以再说一遍”的消息,请检查您的浏览器中的麦克风权限。 如果您在本地加载页面(例如,如果您的地址栏以file:///开头),则Chrome似乎根本不会访问麦克

来源:本文为线上采编,如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除!