DuerOS技能交互

以下内容来自百度的官方文档,个人整理后梳理一遍,仅供学习参考。

DuerOS 开放平台主要面向企业级用户及个人开发者,为硬件开发者提供支持语音控制的智能家居开放平台,为软件开发者提供对话式操作的技能开放平台。

官方文档地址:https://dueros.baidu.com/didp/doc/dueros-bot-platform/QuickStart_markdown

技能简介

技能提供的是对话式交互服务。用户仅通过语音就可以完成与技能的交互,享用技能提供的服务,中间不需要借助其他交互。技能与用户交互过程是模拟用户实际生活中的交互场景,用户与技能交互时,就像与人交互一样自然。

  • 技能分类
    • 自定义技能
    • 智能家居技能
    • 内容播报技能

自定义技能

自定义技能的系统包括用户、语音输入设备、DuerOS系统、技能系统。如图所示,以天气技能为例,讲述自定义技能如何响应用户请求。

  1. 用户向语音输入设备表达用户的请求,如“小度小度,今天天气怎么样”。
  2. 语音输入设备将请求信息发送给DuerOS解析,DuerOS解析出用户的意图(查询天气),将该意图请求及相关时间(今天)、地点(定位点)信息发送给技能。
  3. 技能接收到请求后进行处理,并将处理结果“今天天气晴,气温4度”返回给DuerOS。
  4. DuerOS将处理结果转换成语音,发送到语音输入设备,播放给用户。会话结束。

在自定义技能中,你需要设计技能与用户的语音交互模型,并且在DBP平台上建立相应交互的模型,DuerOS根据技能的交互模型去解析用户的请求。

交互模型

在自定义技能的交互模型中,你需要定义如下信息。

  1. 定义技能的调用名称,用户请求时需要使用调用名称唤醒技能。
    • 你可以这样说“小度小度,打开路况信息,查看下去北京站的路况”,其中“路况信息”是技能的调用名称。
    • 你可以这样说“小度小度,打开订外卖,买一份汉堡,一杯可乐”,其中“订外卖”是技能的调用名称。
    • 你可以这样说“小度小度,打开挂号,预约口腔医院修复科的普通号”,其中“挂号”是技能的调用名称。
    • 你可以这样说“小度小度,打开游戏,我想玩成语接龙”,其中“游戏”是技能的调用名称。
  2. 定义技能可以处理的请求,即意图。 技能可以处理以下任何一项请求:
    • 查看出行路况信息请求。
    • 订购外卖请求。
    • 预约挂号请求。
    • 互动游戏请求。
  3. 定义用户请求时所说的语句,即用户表达。 当用户发出请求时,DuerOS进行解析,将请求内容和意图发给技能进行处理。
    • 查看去北京站的路况信息。(对应查看路况信息的意图)
    • 我想买K餐厅的鸡翅。(对应订购外卖的意图)
    • 预约医院外科的普通号。(对应预约挂号的意图)
    • 玩一个猜谜游戏吧。(对应互动游戏的意图)
  4. 定义技能询问信息语句。当用户发出请求的信息不够全面时,技能需要主动向用户收集信息。
    • 你想买奥尔良鸡翅还是香辣鸡翅?(用户请求中没有明确鸡翅种类,技能需要进行询问。)
    • 你想预约哪天的普通号。(用户请求中没有提供预约的时间信息,技能需要进行询问。)
  5. 定义技能的上下文语境信息。在一些场景下,技能需要结合上下文信息对用户的请求进行分析。
    • 再来两个香辣鸡腿堡(用户在买完了鸡翅后,又要买两个香辣鸡腿堡,这里隐含了K餐厅的信息是从上文语境中继承的。)
    • 后天的号还有吗 (用户得知明天的外科普通号已经挂满时,追问后天的号。这里隐藏了’外科’和’普通号’两个信息,这两个信息是继承上文语境的。)

订餐技能示例

用户: 小度小度,打开订外卖。 (打开技能)
技能: 你想买什么?
用户: 我想订K餐厅的2个鸡翅。(用户请求,需要与用户表达进行匹配)
技能: 你想要香辣鸡翅还是奥尔良鸡翅。 (技能询问信息语句)
用户: 奥尔良鸡翅。
技能: 好的,已经帮你订购K餐厅的2对奥尔良鸡翅。
用户: 再来2个香辣鸡腿堡。 (上下文语境信息)
技能: 好的,你订了K餐厅的2对奥尔良鸡翅,2个香辣鸡腿堡,已经下单成功,消费是58元,请确认。
用户: 确认。
(会话结束。)

技能创建条件

  • 部署技能服务。

    你可以选择以下方式部署你的技能服务。

    • 你可以将技能服务代码放到百度云函数计算CFC,而不用进行进其他配置。百度云CFC会完成技能所需的所有配置。目前支持Node.js和Python两种语言。
    • 你还可以将技能服务部署到百度云上。
    • 你还可以将技能服务部署在非百度云的web service上。要求该web service必须能接受HTTPS的请求,处理请求,并给出回应。
  • 创建技能的交互模式。 在DBP平台上创建交互模型,包括意图、词典等。 当用户向技能发送请求时,DuerOS根据模型信息将请求解析成相应的意图,并将这些意图发送给技能进行处理。

  • 测试设备(可选)。 你可以使用模拟器进行技能测试,但是有些场景模拟器不支持。针对这些场景你需要准备一台装有DuerOS的语音设备进行测试,如DuerOS开发套件个人版、小度音箱等。

智能家居技能

智能家居技能的系统包括用户、语音输入设备、DuerOS系统、设备云、智能家居设备。如图所示,以打开电灯为例,讲述智能家居技能如何响应用户请求。

  1. 用户向语音输入设备表达用户的请求,如“小度小度,打开客厅灯”,
  2. 语音输入设备将请求信息发送给DuerOS解析,DuerOS解析这是一条打开客厅灯的指令,然后将TurnonRequest指令发送给设备云。
  3. 设备云接收到TurnonRequest指令后打开客厅灯,当客厅灯成功打开后,技能获取到客厅灯的状态,向DuerOS发送TurnonConfirmation的指令。
  4. DuerOS收到该指令后,解析出指令对应的含义“客厅灯成功打开”,向用户返回信息“好的”,会话结束。

智能家居的技能不需要关注技能与用户交互实现过程,这部分工作由DuerOS完成。

如果你的智能设备在使用过程中想参与到用户交互中,那你需要设计技能与用户的交互模型,此时你需要选择自定义技能实现对设备的控制。

交互模型

在智能家居技能的交互模型中,你需要定义如下信息。

  1. 定义技能可以处理的用户请求的指令,称为设备指令。包括如下动词。
    • 打开
    • 关闭
    • 查询
    • 调高温度
    • 停止
  2. 定义用户请求技能操作相关设备的语句。包括如下语句。
    • 打开客厅灯
    • 关闭空调
    • 查询净化器的湿度
    • 调高空调的温度
    • 停止窗帘

交互举例

用户: 小度小度,发现设备。
技能: 正在发现设备,大约需要15秒,(15秒后)发现完成,找到设备。
用户: 小度小度,打开客厅灯。
技能: 好的。(成功打开客厅灯时)
(会话结束。)

DuerOS实现智能家居技能的语音交互模型,开发者不需要关注实现过程。

技能创建条件

创建智能家居技能需要满足如下条件:

  • 部署技能服务。
    • 你可以将技能服务代码放到百度云函数计算CFC,而不用进行进其他配置。百度云CFC会完成技能所需的所有配置。目前支持Node.js和Python两种语言。
    • 你还可以将技能服务部署到百度云上。
    • 你还可以将技能服务部署在非百度云的web service上。要求该web service必须能接受HTTPS的请求,处理请求,并给出回应。
  • 在用户DuerOS完成与用户交互,并将用户的请求转化成指令发送给技能,技能接受指令并控制相应的设备,如收到打开灯的命令时,将灯打开。技能不需要与用户进行交互。
  • 测试设备(可选)。 你可以使用模拟器进行技能测试,但是有些场景模拟器不支持。针对这些场景你需要准备一台装有DuerOS的语音设备进行测试,如DuerOS开发套件个人版、小度音箱等。
  • 技能控制的家居设备。

内容播报技能

内容播报技能的系统包括用户、语音输入设备、DuerOS系统、技能。以新闻技能为例,讲述内容播报技能如何与用户交互。

  1. 用户对语音输入设备表达想要收听新闻的请求,如“小度小度,我想听新闻”。(新闻是技能的调用名称)
  2. 语音输入设备将请求信息发送给DuerOS,DuerOS解析出用户想要获取新闻技能的资源,并向新闻技能发送请求。
  3. 新闻技能收到请求将请求资源相关信息发送给DuerOS。
  4. DuerOS获取到资源后,进行资源播放。会话结束。

内容播报的技能不需要关注技能与用户交互的实现过程,这部分工作由DuerOS完成。

如果你的内容播报技能在使用过程中想参与到用户交互中,那你需要设计技能与用户的交互模型,此时你需要选择自定义技能实现对资源的播报。

交互模型

在内容播报技能的交互模型中,你需要定义如下信息。

  1. 定义技能的调用名称,用户通过调用名称来唤醒技能。
    • 用户可以这样说“小度小度,打开新闻”,其中“新闻”是技能的调用名称。
    • 用户可以这样说“小度小度,打开睡前故事”,其中“睡前故事”是技能的调用名称。
  2. 允许用户使用上一条、下一条选择资源,使用暂停、继续播放等控制资源播放。

DuerOS实现内容播报技能的语音交互模型,开发者不需要关注实现过程。

技能创建条件

创建内容播报技能需要满足如下条件:

  • 将资源内容按照协议格式编写成xml文档,资源内容可以是文本形式,也可以是音频形式的,需要持续更新。
  • 测试设备(可选)。你可以使用模拟器进行技能测试,但是有些场景模拟器不支持。针对这些场景你需要准备一台装有DuerOS的语音设备进行测试,如DuerOS开发套件个人版、小度音箱等。

技能设计规范

技能场景定义

技能功能独立清晰

一个技能应该有独立且明确清晰的场景,避免一个技能面向的场景模糊或者同时支持多个功能场景。

反面示例

单一技能“小白电话”,同时具备电话号码归属地查询、电话丢失拨打、电话缴费、电话订外卖、电话订机票等多个功能。

正面示例

拆分为多个独立技能:“小白电话缴费”、“小白手机”、“小白外卖”。

技能风格设计

  • 礼貌友好

必须严格避免技能中出现任何暴力、色情、反动或者不礼貌的内容。

  • 真实可靠

必须严格保证技能提供的所有内容均真实、准确、可靠。

技能话术设计

  • 简洁自然

在自然易懂的前提下,应该尽可能的提炼出简洁的技能话术。可以尝试大声并多次重复朗读你的技能话术,直到能够一口气流畅通顺地完成朗读。若表达信息过多,可尝试将话术拆解细分为多轮对话表达。

反面示例

用户:打开小白手机,我的手机不见了
技能:感谢你使用小白手机,当前技能可以通过拨打你的电话的方式快速找到你的手机,你可以直接对我说你的电话号码,请问你的电话号码是多少?

正面示例

用户:打开小白手机,我的手机不见了
技能:请说你的电话号码

  • 直白易懂

技能中的话术应该使用日常直白通用的表达方式,避免使用缩略词或生僻词汇,例如“未”、“勿”,应替换为更易于理解的“没有”、“不要”等。

反面示例

用户:订大杯不加糖拿铁
技能:现未营业暂无卖售,请勿下单

正面示例

用户:订大杯不加糖拿铁
技能:当前时段店铺没有营业,请于早上10点后再下单

  • 丰富多变

用户可能会多次进入技能,在保持话术简洁直白的同时,可以通过丰富话术和功能的多样性,使技能更加生动人性化。

正面示例

用户:打开今日美食推荐
话术1:今天将推荐给你好吃不贵的美食…
话术2:为你推荐健康又好吃的…
话术3:今天天气炎热,适合…
话术4:今晚就是平安夜,最棒的美食是…

技能引导设计

  • 欢迎引导

在用户打开技能的开始阶段,可以有简洁欢迎或技能简介,同时有友好的引导,让用户能够清晰地知道接下来应该怎样与你的技能进行交流。

反面示例

技能:欢迎来到小白声音,我可以为你播放打雷的声音、下雨的声音以及各种其他环境的背景音,你之前听过下雨的声音,可以告诉我现在你想听的声音,例如对我说播放海浪的声音即可进行播放海浪的声音

正面示例

技能:欢迎来到小白声音,可以为你播放海浪、下雨等环境背景音,请对我说你想要播放的背景音

若你的技能为需求明确且一轮交互即可满足的即用即走类型的技能,用户打开时可以省去欢迎和引导,直接回答以满足用户的问询。

反面示例

用户:打开历史上的今天
技能:欢迎使用历史上的今天,在这里你可以了解到历史上的今天发生了什么重大事件,你可以对我说今天发生了什么。

正面示例

用户:打开历史上的今天
技能:2006年的今天,美国灵魂乐歌手詹姆斯·布朗逝世。

  • 提供明确简洁且受限的选项

需要用户进行回答时,应该给到非常清晰简洁且范围受限的回答范围,以避免用户进行开放式回答。如果是进行选项引导时,应该严格控制选项内容及数量。

反面示例

技能:欢迎来到奇幻探险…请问接下来你将想要走那条路径?

正面示例

技能:欢迎来到奇幻探险…一共有三条路供你选择,分别是:花园、森林、古堡,请选择你要去的路径

  • 多轮对话中的友好引导
  • 句尾引导:多轮对话中,技能播报话术末尾必须包含明确的问询或者引导,告知用户接下来的多轮应该怎样与技能交互。

反面示例

用户:我的手机不见了
技能:好的,你可以通过我来找到你的手机

正面示例

用户:我的手机不见了
技能:好的,请说你的电话号码

  • 多次问询引导:当用户的回复没有命中意图时,应该明确告知用户没有理解,并且进行更清晰明确的引导话术。

反面示例

用户:我的手机不见了
技能:好的,请说你的电话号码
用户:还行还行
技能:请说你的电话号码

正面示例

用户:我的手机不见了
技能:好的,请说你的电话号码
用户:还行还行
技能:没有理解,请依次说出电话号码数字

  • 多次未命中的退出引导:当用户连续多次回复没有命中意图时,在告知没有理解并且进行更清晰引导的同时,需要明确告知用户应该怎样退出技能或主动为用户退出当前技能。

反面示例

用户:我的手机不见了
技能:好的,请说你的电话号码
用户:还行还行
技能:请说你的电话号码
用户:还行还行
技能:请说你的电话号码

正面示例

用户:我的手机不见了
技能:好的,请说你的电话号码
用户:还行还行
技能:没有理解,请依次说出电话号码数字
用户:还行还行
技能:没有理解,你可以表达退出来关闭当前技能。请依次说出电话号码数字,以便于查找你的手机

技能满足设计

  • 支持满足多样丰富表达

尽可能穷举用户可能的多样的口语化表达方式,并对此进行满足。

反面示例

用户1:帮我找手机
技能:好的,请说你的电话号码

用户2:我的手机不见了
技能:不能理解

用户3:拨打一下我的电话
技能:不能理解

正面示例

用户1:帮我找手机
技能:好的,请说你的电话号码

用户2:我的手机不见了
技能:好的,请说你的电话号码

用户3:拨打一下我的电话
技能:好的,请说你的电话号码

  • 提供简洁清晰的反馈

可以通过“好的”、“收到”、“谢谢”等简洁的反馈话术,来告知用户已经收到并且理解了用户表达。

反面示例

技能:请问出发城市是北京吗
用户:是的
技能:请说目的地城市
用户:上海
技能:请说起飞日期

正面示例

技能:请问出发城市是北京吗
用户:是的
技能:好的,请说目的地城市
用户:上海
技能:收到,请说起飞日期

  • 处理潜在通用需求

    需要考虑技能内各个场景下的潜在通用表达需求,示例通用表达场景:

    • 在等待用户回答选项时,应该能够友好处理用户的回放需求,例如“再说一遍”、“我没听清”等等。
    • 游戏类技能应该能够满足用户的常见帮助需求,例如“我该做什么”、“你能做什么”、“这个怎么玩”等等。
    • 在游戏技能开头播放复杂的玩法介绍时,应该能友好处理用户多次使用后的跳过需求,例如“跳过”、“跳过介绍”等等。

反面示例1

技能:欢迎来到奇幻探险…一共有三条路供你选择,分别是:花园、森林、古堡,请选择你要去的路径
用户:再说一遍
技能:对不起,不能理解

正面示例1

技能:欢迎来到奇幻探险…一共有三条路供你选择,分别是:花园、森林、古堡,请选择你要去的路径
用户:再说一遍
技能:好的,请选择你要去的路径,分别是:花园、森林、古堡

反面示例2

技能:欢迎来到奇幻探险,在这里,你可以…
用户:这个游戏怎么玩
技能:对不起,不能理解

正面示例2

技能:欢迎来到奇幻探险,在这里,你可以…
用户:这个游戏怎么玩
技能:你可以对我说…

  • 多个信息同时传递话术

应该尽可能避免同时传递多个信息。当必须要传递时,应该在多个信息之间通过“第一步”、“第二步”、“首先”、“然后”、“最后”等简洁的序列话术,使用户更自然轻松的理解。

反面示例

用户:打开小白食谱,蛋炒饭怎么做
技能:将辣椒和火腿肠切丁,鸡蛋打散,倒入米饭并均匀搅拌,锅内放油,热后转中火并将米饭倒入,筷子搅拌至米饭颗粒分明。

正面示例

用户:打开小白食谱,蛋炒饭怎么做
技能:首先,将辣椒和火腿肠切丁。第二步,鸡蛋打散,倒入米饭并均匀搅拌。第三步,锅内放油,热后转中火并将米饭倒入。最后,筷子搅拌至米饭颗粒分明。

  • 合理处理同音词

对话式交互可能会出现同音词,需要合理处理同音词问题,以避免理解歧义。

反面示例

技能:请说你的城市
用户:fuzhou
技能:福州市当前…

正面示例

技能:请说你的城市
用户:fuzhou
技能:请问是福建省的福州市还是江西省的抚州市?
用户:江西省的抚州市
技能:抚州市当前…

  • 合理处理同义词

通过满足常用名称的同义词,将会满足用户更加自由的表达,以获得超出预期的 用户体验。

反面示例

用户:打开芒果台
技能:对不起,不能理解

正面示例

用户:打开芒果台
技能:已为你切换到湖南卫视

  • 重要信息二次确认

因为可能缺少视觉辅助,重要信息或通过对话表达易于出错的信息应该进行二次确认以保证信息正确。

反面示例

用户:我的手机不见了
技能:好的,请说你的电话号码
用户:188xxxx2958
技能:正在为你拨打。

正面示例

用户:我的手机不见了
技能:好的,请说你的电话号码
用户:188xxxx2958
技能:请问是要找188xxxx2958的手机吗。
用户:是的
技能:正在为你拨打。
(*说明:电话号码数字较长且信息关键,在用户表达后,应该进行二次确认)

  • 记录用户重要信息

可通过记录用户之前表达的重要信息,例如技能功能相关信息、游戏进度等,以降低用户的交互成本,并传递友好贴心的使用体验。

反面示例

用户(第二次使用):我的手机不见了
技能:好的,请说你的电话号码
用户:188xxxx2958
技能:请问是要找188xxxx2958的手机吗。
用户:是的
技能:正在为你拨打。

正面示例

用户(第二次使用):我的手机不见了
技能:请问是要找尾号2958的手机吗
用户:是的
技能:正在为你拨打。
(*说明:通过记录用户上次使用的电话号码,避免用户二次输入)

  • 覆盖所有分支

除了能覆盖用户最常用的表达外,也需要尽可能周全完善地设计技能场景范围内所有可能遇到的分支流程,并给到对应的满足策略。

反面示例

用户:我的手机不见了
技能:请问是要找尾号2958的手机吗
用户:我要拨打188xxxx2978
技能:对不起,不能理解,请问是要找尾号2958的手机吗

正面示例

用户:我的手机不见了
技能:请问是要找尾号2958的手机吗
用户:我要拨打188xxxx2978
技能:好的,请问是要找188xxxx2978的手机吗。
(*说明:当前场景下,用户最常用的表达可能)

  • 无响应主动退出

多轮对话中,用户面对问询或者引导无任何响应连续超过2次时,建议应该主动退出技能并告知用户已主动退出。

反面示例

用户:我的手机不见了
技能:好的,请说你的电话号码
用户:(无响应)
技能:请说你的电话号码
用户:(无响应)
技能:请说你的电话号码

正面示例

用户:我的手机不见了
技能:好的,请说你的电话号码
用户:(无响应)
技能:没有听清,需要依次说出电话号码数字,以便于查找你的手机
用户:(无响应)
技能:已退出小白手机,欢迎再次使用

  • 结束时汇总反馈

在多次信息问询完成后,结束时应该汇总用户在各轮回答的信息字段并反馈告知用户确认。

反面示例

技能:请问出发城市是北京吗
用户:是的
技能:好的,请说目的地城市
用户:上海
技能:收到,请说起飞日期
用户:2月16日
技能:好的,请说起飞时段
用户:17点之后
技能:好的,为你找到…

正面示例

技能:请问出发城市是北京吗
用户:是的
技能:好的,请说目的地城市
用户:上海
技能:收到,请说起飞日期
用户:2月16日
技能:好的,请说起飞时段
用户:17点之后
技能:请问你要预订的是2月16日、17点之后、从北京飞往上海的航班吗
用户:对
技能:好的,为你找到…

技能发布上线

  • 技能服务稳定可靠

应该严格保证技能的后端服务稳定可靠,快速响应用户请求,达到用户良好的使用预期。

  • 技能信息有标识度

通过定义清晰独立而有差异化的技能功能、选择不易于混淆的技能调用名称等技能信息,让用户在众多技能中能快速的区分出你的技能并乐于选择使用。

  • 技能描述简洁易懂

尽可能完善技能的描述信息,也可以在描述信息中提供更多技能内的常用表达示例,为用户快速了解技能功能。

智能家居技能

一般常用的是智能家居技能。

DuerOS平台支持开发者创建智能家居技能,用户通过您的技能可以使用声音控制智能设备,如打开空调,打开电视等。当用户发出语音指令时,DuerOS解析出用户的意图,然后向技能发送该意图相应的指令。技能收到指令时,对设备进行相应的操作。这个过程中技能不需要做任何的语义分析工作。

如何创建智能家居技能,见https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/smart-home-skill/create-smart-skill_markdown

猜你喜欢

转载自blog.csdn.net/liuliusix/article/details/113175459