就在一个月前,我们想尝试为Alice的功能
技能创建扩展。 从
Yandex.Dialog支持聊天中进行交流的经验中,我得到的印象是,使用语音界面的新手功能已经可以分享一些东西。
在笔记中,我想告诉大家我对
孩子的新年技能“雪姑娘 ”三个星期的印象,以及对话开发者聊天中的问题和答案。

对于
VUI的专业人员来说,注解不是什么新鲜事物,但是欢迎有经验的人提供好的建议和意见。 我是第一次写作,请不要严格判断。
为什么要注意爱丽丝?为什么要这样:声音,技能?如何创造技能?一般方法和常见错误。当前平台的缺陷。为什么要注意爱丽丝?
尽管国外的语音助手已经变得司空见惯,但与机器人的长时间对话已经
泄漏到网络中 ,然后我们仍然可以在与导航员互动,与爱丽丝的孩子聊天,为智能家庭宠爱极客的水平上使用它。 我很少有朋友使用Siri输入笔记和提醒,尽管我认为这是使用它的最方便的选择之一。 今年的情况很有可能会有所好转,因为已经奠定了基础:
- 爱丽丝只有一岁,她正在读书,但已经知道多少钱了。
- 退出Yandex站 -我认为它将逐渐变得更智能,更实用。
- 首款低成本附属迷你扬声器于12月发售。
- 爱丽丝学校开始为开发人员开发技能
- Yandex基础架构的重大改进。宣布了对话框,特别是“发现技能”-一种方便第三方开发商对技能进行搜索和排名的工具
所有这些告诉我,我们正处于俄罗斯语音接口开发的起步阶段,因此我们决定开始研究这些技术。
为什么要这样:声音,技能?
我认为许多人已经了解了某些情况下语音接口的优势,但是回想起来并不是多余的:有时这是最合适的选择。 例如,在汽车或厨房,做饭,手忙碌的其他活动中,通过语音发出命令更加方便。 例如,很长一段时间以来,存在着
由声音控制的机器人护士 ,有助于进行外科手术。
语音是人们熟悉的界面。 老年人和儿童学习此方法没有任何问题即可获取信息和管理小工具。
对于视力障碍的人来说,语音和听力是与环境互动的更重要渠道。 从
Yandex.Station聊天来看
,这类人真的很喜欢这种设备的外观,使他们的生活更轻松。
我不会继续列出案例,如果很有趣,那么您可以从专业文献中了解更多有关这方面的信息。
Skill是一个程序,该程序执行由Alice中给定的激活命令启动的特定对话,并扩展了Yandex语音助手的功能。
如何创造技能?
已经有许多优秀的第三方
技能 ,但是您可以占领更多利基市场,并成为真正有趣和有用的技能。
有关创建它们的几篇文章,包括有关Habré的文章。 有
文档 ,有简要的
一般建议 。 我将不深入介绍实现的技术细节,因为 我想为初学者分享常见的方法。
从技术上讲,该技能与漫游器非常相似,不同之处在于该漫游器自身无法发送消息,而只能回答用户的请求。
这是帮助您入门的简短资源列表:
Yandex对话框的库和资源
有关使用Yandex对话框的
非官方常见问题解答 。
该文档包含相关的链接,但不是非常的链接以及问题和答案。
上面
聊天Yandex Dialogs 。
要开始开发,您需要在Yandex上拥有一个帐户,Yandex是一个将在其上定位和执行我们的程序代码的服务器,一个Web服务器以及该应用程序本身,以您可以方便使用的任何语言编写,并可以通过
https协议提供工作。
在这里,我不会详细介绍我的技能的实施方式,如果社区有要求,我将在另一篇文章中对此进行关注。 而且,这种材料已经存在。
我只会
在PHP中留下
一个简单技巧的示例,并提供注释,我认为这将使初学者可以快速入门。
该存储库包含一个脚本,用于创建一个简单的开发环境,该环境运行内置在PHP中的Web服务器,并使用
serveo.net服务使可从Internet访问本地端口:

保存网址https://******.serveo.net-这将是您的webhook网址。 与
ngrok不同
,此URL不会随时间更改,您无需在对话框设置中对其进行更改。 您可以通过在浏览器中输入此URL来检查webhook的可用性-json应该返回错误。 这是正常现象,我们没有将必要的参数传递给脚本。
接下来,通过
链接注册技能本身:

选择项目“爱丽丝的技能”

我们根据对话框的提示和文档填写所有字段:

在webhook url字段中,输入之前收到的URL。
我们会尝试保存它,如果我们按照给出的说明进行操作,则应在第一时间解决所有问题。
在有关实现的本文中,我仅建议您特别注意记录用户操作的系统。 我是用户互动的所有问题领域,例如,我希望“是| 否,但是我得到了一些其他信息,将其写入日志并立即广播(作为Webhook速度的独立过程)到电报频道进行操作跟踪和响应。
一般方法和常见错误。
如我所料,常规Web开发或电报Bot开发的常用方法在这里不合适。 主要区别在于答案的频繁不可预测性。 对话平台允许您添加带有对问题的明确答案的按钮,但是用户通常根本不回答习惯于遵循明确逻辑的程序员所期望的内容。
一个例子。
你想学习另一首诗吗?
[是] [否]
我们希望这个人会回答“是”或“否”,但是还有很多其他选择:
- 是的
- 是的
- 我当然要
- 是的,妈妈,我们必须吃什么?
- 厌倦了
- 新西伯利亚的天气如何?
所有这一切都是出于几个原因。 一个人可以使用各种肯定的短语:“当然”,“是”,“是”,“加油”等。 以及负面的。 碰巧他没有按时开始回答问题,爱丽丝仍然不听答案,而这个人已经开始讲话了,最后我们听到了这句话的一部分。 反之亦然,一个人回答后,他“与现实中的人”继续与另一个对话者对话。 而且,该技能的用户可能根本不理解第三方对话中的内容,并且在不离开命令“足够”的情况下发出常规的aliso请求。
如果我们简单地重复同样的问题而没有识别出正确的答案,这可能会使用户烦恼并导致您的技能和语音界面失望。 因此,您应该特别注意错误消息,有时最好将问题重新表述,澄清,而不要再问。 用户可能会大声地回答相同的问题。
您还应该尝试为用户响应提供各种选项,突出显示语义部分。 视情况而定,有时最好一次犯一个错误,以使错误识别答案,而不是迫使用户清楚地做出响应。 如果在期望的答案中添加带有模式的内容(是*),那么它通常会按预期工作,并且当我们被告知“已经让我一个人呆着”的情况将是一个例外,并且程序逻辑中不会发生任何关键事件。 当然,如果由于不正确的识别而需要准确的答案,这将对系统造成不可逆转的后果,那么我们应该从用户那里得到明确的答案。 或者,如果我们不确定答案,我们可以要求提供其他丢失的信息。
每种交互情况都应分别考虑。
在上面的示例中,我们面临这样一个事实,用户要求一首短诗或某个人物的诗(“有一首短诗吗?”,“让我们谈论雪姑娘”)。
在这里,我们有选项-添加菜单的新级别,但不要忘记对话的“人性化”,或者根据用户的期望响应此类请求,但显然不提供它们。
无论我们一开始如何思考此对话框部分,我们都意识到真正的使用会更好地表达用户的意愿,因为我们以最小的功能开始了我们的第一技能,逐渐增加了Snow Maiden的功能,以及对我们之前不要求的要求的反应。
使用第三方API我们注意到,为了在技能上提供一些有用的功能,开发人员有时会过度使用第三方API。 但是,请不要忘记Webhook的响应时间不应超过1.5秒。 有时,这会导致负面的用户体验,其技能要么正确回答,要么写道:“出了点问题”。
识别 命名实体的功能 :并非所有名称,城市都可以正确识别,因此建议您使用此技能。 到目前为止,为了不让孩子无法识别的Yandex名称与Snow Maiden进行交流,我们不得不求助于一些“拐杖”。 开发时,请立即考虑到这一点,以免打扰用户使用Glory或Hope等名称。 我们希望Yandex会尽快解决此问题。
单词的发音现有的
语音合成测试工具并不总是与您实际掌握的技能相匹配。 不要懒于提供将tts添加到您的任何答案中的机制。 我们依靠Yandex引擎,现在我们的技能中有些短语难以
标注更好的发音(无需对代码进行重大更改)。 我们将考虑未来。
简单但有效的PHP
函数用于模糊词比较有很大帮助:
similar_text() ,
levenshtein() ,其他语言也有类似的工具。 好吧,当然还有正则表达式,如果没有它们的话。
这些功能允许,例如,以不同的偏斜正确地接受谜题的答案,而部分正确的答案-不能准确识别。
当然,对于
NLP (自然语言处理)专家来说,这看起来并不严重,但对于初学者来说,还是要注意的一点。
当前平台的弱点
我将简要概述开发人员对Yandex Dialogs的主要主张,我在聊天中注意到了这一点。
长期的,通常看似不合逻辑的节制。 碰巧,由于您拥有一个过于通用的技能名称(例如,“克里米亚的天气”),即使您已经拥有一个类似名称的技能(“塞韦罗德文斯克的天气”),您的技能也没有受到控制。 因此,我知道这是由于以下事实:较早的名称和激活字词要求更加简单,而
母亲的女友的
儿子为这个男人感到幸运,而您不会成功。 寻找其他短语或尝试使用
品牌 。
该文档并不总是正确的。 该平台本身发展迅速,文档跟不上,有时用户和Yandex代表对它的解释也有所不同。
到目前为止,该平台
仅提供
调试技能的基本工具 。
当您向开发人员面板添加一项技能时,您的Webhook应该已经正确响应,否则将发生验证错误。 什么样的错误,发送了哪种JSON,以及哪种错误-我们不会看到。 如果您设法增加了技能,那么您将拥有一个最小的面板,其中仅包含最后一个请求响应的内容,仅此而已! 在进行审核之前,无法检查它在设备上的实际运作方式和声音。 有一个
第三方仿真器在相当不稳定的环境中运行,并非在所有浏览器中都运行,并且不符合当前协议。
开发人员还有其他希望和要求,例如:与智能家居集成,通过他的声音确定对话者,为更好生成的技能选择声音的能力,集成支付系统,与Yandex帐户集成,包括与某人合作的技能。一个用户下的不同设备,深思熟虑的私人技能系统。 但是,这些功能需要仔细研究,并且从安全性的角度来看,还需要便利性。 我认为Yandex在适当级别实施时将能够提供这些机会。 但是,审核,调试以及有时不相关的文档方面的问题会极大地干扰初学者以适应平台。
这有助于在
聊天支持中稳定响应,还组织了一个经验不足且响应迅速的社区,这对我有很大帮助,将为您提供帮助。 支持人员通过“记录”,“我们知道有关文档,我们将对其进行修复”,“我们决定进行审核”的信息快速响应许多要求。 好的,我们很期待。
为了快速起步,我
建议您发布一项私人技能 ,现在已对他们进行了最低要求检查:
- 将检查技能的名称和激活短语 ,因为该基础对于所有开发人员都是通用的。
- Webhook应该正确响应请求。
- 私人技能应在其欢迎地址中报告该技能已关闭。 以便意外启动它的用户得到通知。
聊天提示:
一旦已发布的技能可用于通过代理将已发布的Webhook的请求代理到已开发的Webhook并通过user_id进行过滤来测试其预期的其他对话框,则可以考虑进行审核。
结论
总的来说,语音接口本身似乎是一个非常有趣的话题,在未来,它的需求将越来越大。我计划深入研究它,阅读来自国外类似服务(Google,Amazon,Siri等)的特殊文献,说明和技巧。
如果像我这样的人对此主题感兴趣,让我再次提醒您有关爱丽丝的Yandex学校的信息。
其他一些相关链接:
Yandex对话博客YouTube频道Yandex对话框轻松对话书籍设计语音用户界面Natasha:用于提取命名实体的库电报频道通知新技能非官方技能目录