对话指令

摘要

目前DuerOS平台支持6种对话控制指令,分别是:

  • Dialog.ElicitSlot
  • Dialog.ConfirmSlot
  • Dialog.SelectSlot
  • Dialog.ConfirmIntent
  • Dialog.SelectIntent
  • Dialog.Delegate

Dialog.ElicitSlot

技能可用于询问意图中的一个不知道的槽位。

例如,在查询个人所得税场景中,需要收集用户所在城市和月薪才能准确计算。在技能收到查询个人所得税意图后,可以返回对城市的询问,例如“请问您所在城市是哪里”,并指定slotToElicit为城市的槽位名city。DuerOS会分析出用户回答内容,并将槽位信息填写到city槽位中。

消息样例

{
    "type": "Dialog.ElicitSlot",
    "slotToElicit": "{{STRING}}",
    "updatedIntent": {
        "name": "{{STRING}}",
        "confirmationStatus": "NONE",
        "slots": {
            "{{STRING}}": {
                "name": "{{STRING}}",
                "values": ["{{STRING}}"],
                "confirmationStatus": "NONE"
            }
        }
    }
}

参数说明

  • type
    • 对话指令类型,即"Dialog.ElicitSlot"。
  • slotToElicit
    • 对话指令需要询问的槽位。
  • updatedIntent
    • DuerOS发送给技能的意图结果,或技能结合自身资源信息修正后的结果。updatedIntent.name名称必须是DuerOS发送给技能的请求中的意图名称之一。
    • updatedIntent内容详见标准请求中意图的定义。

Dialog.ConfirmSlot

技能可用于确认意图中的一个槽位。

例如,在打车场景中,需要确认用户的目的地,在技能收到打车意图和槽位后,可以返回对目的地槽位的确认,例如“请问您确定是要去天安门吗”,DuerOS会分析出用户回答内容,如果用户回答了确定话术,对应槽位的confirmationStatus设置为CONFIRMED,当用户回答了否定话术,对应槽位的confirmationStatus为DENIED。

消息样例

{
    "type": "Dialog.ConfirmSlot",
    "slotToConfirm": "{{STRING}}",
    "updatedIntent": {
        "name": "{{STRING}}",
        "confirmationStatus": "NONE",
        "slots": {
            "{{STRING}}": {
                "name": "{{STRING}}",
                "value": "{{STRING}}",
                "confirmationStatus": "NONE"
            }
        }
    }
}

参数说明

  • type
    • 对话指令类型,即"Dialog.ConfirmSlot"。
  • slotToConfirm
    • 填槽类型Directive的内容,需要确认的槽位。
  • updatedIntent
    • DuerOS发送给技能的意图结果,或技能结合自身资源信息修正后的结果。updatedIntent.name名称必须是DuerOS发送给技能的请求中的意图名称之一。
    • updatedIntent内容详见标准请求中意图的定义。

Dialog.SelectSlot指令

技能针对某个槽位返回一系列的选项供用户选择。

例如,在打车的场景中,有三种车型可供用户选择,技能可以询问用户,“请问您要选择出租车、快车还是专车呢”,并指定slotToSelect为车型的槽位名称carType。DuerOS会分析用户的回答内容,用户回答“第一个”或者“出租车”,都会将槽位信息merge到NLU信息中并发给技能。

消息样例

{
    "type": "Dialog.SelectSlot",
    "slotToSelect": "{{STRING}}",
    "updatedIntent": {
        "name": "{{STRING}}",
        "confirmationStatus": "NONE",
        "slots": {
            "{{STRING}}": {
                "name": "{{STRING}}",
                "values": ["{{STRING}}"],
                "confirmationStatus": "NONE"
            }
        }
    },
    "options": [
        {
            "type": "{{ENUM}}",
            "value": "{{STRING}}",
            "entity": "{{ENUM}}",
            "synonyms": [
                "{{STRING}}"
            ],
            "index": {{INT32}}
        }
    ]
}

参数说明

  • type
    • 对话指令类型,即"Dialog.SelectSlot"。
  • slotToSelect
    • 技能提供的选项对应的槽位名称。
  • updatedIntent
    • DuerOS发送给技能的意图结果,或技能结合自身资源信息修正后的结果。updatedIntent.name名称必须是DuerOS发送给技能的请求中的意图名称之一。
    • updatedIntent内容详见标准请求中意图的定义。
  • options
    • 技能提供的选项。
  • options.type
    • 选项中元素的类型,取值如下:
      • KEYWORD
  • options.value
    • 选项中元素取值。
  • (optional) options.entity
    • 选项元素所属的实体,利于DuerOS解析。
  • (optional) options.synonyms
    • value的同义词,有利于DuerOS的解析,最多可以填5个。
  • options.index
    • 当前元素的位置,从1开始。选项中不同元素可以有相同的index。

Dialog.SelectIntent指令

技能返回一系列的选项供用户选择,这些选项对应不同的意图。

例如,技能可以询问用户“您是想听周杰伦的歌还是郭德纲的相声呢?”,技能期望用户选择“周杰伦的歌”和“郭德纲的相声”对应不同的意图,则针对每个选项提供不同的意图信息供DuerOS解析。

消息样例

{
    "type": "Dialog.SelectIntent",
    "options": [
        {
            "type": "{{ENUM}}",
            "value": "{{STRING}}",
            "entity": "{{ENUM}}",
            "synonyms": [
                "{{STRING}}"
            ],
            "index": {{INT32}},
            "updatedIntent": {
                "name": "{{STRING}}",
                "confirmationStatus": "NONE",
                "slots": {
                    "{{STRING}}": {
                        "name": "{{STRING}}",
                        "values": ["{{STRING}}"],
                        "confirmationStatus": "NONE"
                    }
                }
            }
        }
    ]
}

参数说明

  • type
    • 对话指令类型,即"Dialog.SelectIntent"。
  • options
    • 技能提供的选项。
  • options.type
    • 选项中元素的类型,取值如下:
      • KEYWORD
  • options.value
    • 选项中元素取值。
  • (optional) options.entity
    • 选项元素所属的实体,利于DuerOS解析。
  • (optional) options.synonyms
    • value的同义词,有利于DuerOS的解析,最多可以填5个。
  • options.index
    • 当前元素的位置,从1开始。选项中不同元素可以有相同的index。
  • options.updatedIntent
    • 当用户选择了当前元素时,技能期望DuerOS发送给技能的意图信息。该意图可以不是当前请求对应的意图信息,但必须是技能订阅的意图之一。
    • updatedIntent内容详见标准请求中意图的定义。

Dialog.ConfirmIntent

技能可用于确认一个意图。

例如,在购物场景中,需要确认用户是否需要下单购买,在技能收到购物意图和槽位后,可以返回对意图的确认,例如“请问您确定要下单吗”,DuerOS会分析出用户回答内容,当用户回答了确定话术,updatedIntent.confirmationStatus设置为CONFIRMED,当用户回答了否定话术时,updatedIntent.confirmationStatus为DENIED。

消息样例

{
    "type": "Dialog.ConfirmIntent",
    "updatedIntent": {
        "name": "{{STRING}}",
        "confirmationStatus": "NONE",
        "slots": {
            "{{STRING}}": {
                "name": "{{STRING}}",
                "value": "{{STRING}}",
                "confirmationStatus": "NONE"
            }
        }
    }
}

参数说明

  • type
    • 对话指令类型,即"Dialog.ConfirmIntent"。
  • updatedIntent
    • DuerOS发送给技能的意图结果,或技能结合自身资源信息修正后的结果。updatedIntent.name名称必须是DuerOS发送给技能的请求中的意图名称之一。
    • updatedIntent内容详见标准请求中意图的定义。

Dialog.Delegate指令

将对话代理给DuerOS完成,DuerOS的询问和确认槽位的话术使用的是开发者在技能开放平台默认配置的话术。

只能在request中dialogState字段为STARTED或IN_PROGRESS时才能返回该指令,当dialogState为COMPLETED时,由于必要槽位填写和确认都已经完成,不能返回该指令。

例如,在查询个人所得税场景中,因为需要填写多个槽位,开发者可以在技能开放平台配置默认的填槽话术,并将整个会话过程代理给DuerOS。DuerOS会自动询问和确认必要的槽位或意图。会话中,每一轮与用户的交互结果都会返回给技能,技能可以根据自身资源决定下一轮是否继续代理过程。

消息样例

{
    "type": "Dialog.Delegate",
    "updatedIntent": {
        "name": "{{STRING}}",
        "confirmationStatus": "NONE",
        "slots": {
            "{{STRING}}": {
                "name": "{{STRING}}",
                "value": "{{STRING}}",
                "confirmationStatus": "NONE"
            }
        }
    }
}

参数说明

  • type
    • 对话指令类型,即"Dialog.Delegate"。
  • updatedIntent
    • DuerOS发送给技能的意图结果,或技能结合自身资源信息修正后的结果。updatedIntent.name名称必须是DuerOS发送给技能的请求中的意图名称之一。
    • updatedIntent内容详见标准请求中意图的定义。