除了简单的一问一答外,都需要与用户进行多轮对话才能够获取到所有必要的信息,给用户提供完整的服务。
建议您在开始开发技能之前,先设计好技能的 语音交互模型,即用户与技能的对话流程。可以使用流程图来直观的展示用户与技能交互的每一步,设计出对话逻辑清晰、过程简便、语气友好的对话。给用户一个良好的使用体验,用户会更多的使用您的技能。如何创建一个体验良好的对话流程,请参考【对话设计基础】。
- 在对话流程中,用户所说的部分需要定义成 语料模型。语料模型可以告诉平台用户的哪些表达(语料)可以命中意图;应该从这些表达中获取什么样的参数;这些参数的取值范围(实体)是什么样的;在多轮对话中用户的哪些表达也应该被准确识别。
- 在用户发起对话之后,技能要根据用户的表达做出适当的 回复。在多轮对话中,回复内容按照对话的场景分为三种类型:对话结束回复、参数追问回复和意图跳转回复。
语料模型
语料模型包括:实体、意图、参数、语料和上下文。
意图
意图的作用是承载技能的各个功能点,每一个意图都应该有一个明确的功能,但两个意图不应该有相同的功能。
技能可以拥有多个意图,但必须有一个意图是 默认意图。详情参考【意图】。
实体
实体是某一类名词的集合,提供了一个有限定范围的词典。当语料中的某些词需要动态替换的时候,需要到对应的实体中寻找。实体分为自定义实体和公共实体,自定义实体需要开发者自己填充实体值,公共实体平台已经填充好了实体值。详情参考【实体】。
参数
参数是执行意图必要的前提条件。参数需要关联一个实体作为参数的取值范围。详情参考【参数】。
- 例如天气查询意图中城市和日期是必要的条件。城市参数可以关联自定义城市实体,也可以关联公共实体 sys.location。日期参数可以关联公共实体 sys.date。
- 例如线路查询意图中出发地和目的地是必要的条件,出发地参数可以关联城市实体,目的地参数也可以关联同一个城市实体。虽然关联了同一个实体,但这两个参数是不同的。
语料
语料是进入意图的语义规则,需要用户所说的话匹配到语料才能进入相应的意图。所以语料需要尽可能的覆盖用户对此意图常用的表达方式,增加意图别识别的可能。
语料包括意图的单轮对话语料、多轮对话语料、面对参数追问时用户可能的回复 等。详情参考【语料】。
上下文
上下文是指:一句对话单独来看没有明确的意图或者意图不完整,但结合多轮对话的上下文来看,就有了明确和完整的含义。当遇到这类情况时,平台会根据上下文内容识别意图和传递参数。详情参考【上下文】。
技能回复
在多轮对话中,回复一般有以下三种情况:
- 播报完内容后对话就结束。例如时间查询意图中,技能播放完时间信息后对话结束。
- 进入意图后发现缺少必要的参数,需要对此参数向用户追问。例如电影推荐意图中,询问用户喜欢看哪种类型的电影。这种回复是针对某个参数向用户进行询问,用户可能直接回答参数的取值,也可能会有其他的表述方式,那么这些可能的表述方式需要配置到参数下 用户的可能回复 中。
- 意图跳转是指此意图执行完成了,但希望用户进去其它意图进行交互。例如电视机控制技能的默认意图是欢迎意图,回复用户欢迎语句后希望用户跳转到选台意图或音量控制意图等。
以上三种回复的实现方式参考【响应数据】。
在 语料模型 和 回复 都配置完成后,就可以实现与用户的多轮对话了。