Search Results for

    Show / Hide Table of Contents

    多轮对话的检索

    在 Chatopera 多轮对话中,理解检索顺序是熟悉多轮对话原理的关键知识点。首先是基础模块间的检索顺序,然后是对话脚本中的话题的检索顺序。

    模块间检索

    对话用户请求时,多轮对话会先检查是否有进行中的意图识别对话,然后是知识库检索,匹配知识库问答对,当有问答对高于知识库阀值时,机器人回复问答对中的答案内容;未匹配知识库,进入对话脚本,从话题中匹配,匹配上则回复内容;否则则回复兜底回复。从概念上有下图关系。

    模块间检索

    之所以说是从概念上,是因为整个检索过程更为复杂,不方便理解,先用概念图从直观上快速理解 Chatopera 多轮对话的框架。一个更为详细的检索机制说明见下图。

    检索机制

    详细说明图(查看大图) 虽然更为复杂,但和概念图含义基本一致,其中的要点是模块间有更多的状态检查和穿透行为(从一个模块进入另外一个模块)。在检索的过程中,涉及到一些参数,这些参数可以在 Chatopera 机器人平台对话机器人设置页面设定或者在 SDK 中传入参数。比如知识库阀值默认为 0.9,该阈值可以通过在请求中设定参数来调整,介绍链接。

    关于知识库、对话脚本和意图识别的相互之间的调用关系,后文会有更多介绍。

    创建对话脚本的话题

    聊天机器人的多轮对话主要就是很多对话规则的组合,可以设想这些对话规则组成了一个个的话题,在对话时,可以聊一个话题,可以跳跃到其它的话题。那么,每次获得了聊天用户的文本,机器人进行答案的检索就是选择最合理的话题并找到匹配的规则,计算回复内容。

    在创建好机器人后,下载多轮对话设计器,在多轮对话设计器中,创建话题。

    创建话题

    话题里使用脚本实现对话逻辑,用一个简单的例子说明脚本语法非常容易掌握。

    一个简单的例子

    + 开始的是匹配器,目前 Chatopera 多轮对话支持通配符匹配器和模糊匹配器;- 开始的是回复,目前支持文本和函数,函数是 JavaScript 脚本;% 开始的是上下轮钩子,用以关联规则。

    使用多轮对话设计器撰写对话脚本的用户体验,经过了多年的打磨,已经非常成熟和稳定。

    多轮对话设计器

    在多轮对话设计内调试对话,现在对于多轮对话设计器还不需要详细了解,本节内容旨在介绍原理,而话题作为重要的概念,需要先介绍如何创建以及在哪里编辑。

    话题检索顺序

    每个话题包含名字和一些规则,每个规则包括了匹配器和回复,业务上有明确的上下轮依赖的规则使用上下轮钩子进行关联。

    话题检索也是有顺序的,匹配到了某一个话题的规则,后续的话题就被跳过。匹配从高优先级到低优先级进行,最高优先级是【前置话题】,话题名称为系统约定:__pre__;最低优先级是【后置话题】,话题名称为系统约定:__post__。优先级仅低于前置话题的话题是当前话题,就是上一次对话用户匹配到的规则所在的话题;其余的话题根据算法动态的排序。

    算法动态排序

    如果使用了上下轮钩子,则最先匹配携带有上下文钩子(就是 % 上次回复内容)的规则。

    整体上,对话脚本在检索时,检索栈是动态变化的。

    对话状态机

    现在,我们从另一个角度,状态机的角度思考多轮对话,因为是在多个连续的交互中,完成一个对话目标,那么就存在一个状态的问题,状态机是状态可以转移的图,两个状态之间的关系通过状态机约束。比如,某个活动通知的对话状态机如下:

    对话状态机

    这是个图示,仅为了说明原理。“请求”节点代表每次对话用户发送了文本,“回复”节点代表机器人处理结果,回复文本。因为知识库在检索中最先发生,可以放入一些一问一答的问答对,而一些全局的关键词放入前置话题【__pre__】中,图中右侧方框内,则是由其他话题组成的对话脚本,整个对话构成了状态机。

    这个问题在对话脚本中,尤其需要注意:Chatopera 对话脚本引擎会考虑过去一段时间内,一定对话轮次的历史,机器人会回看这些记录来分析最合理的回复。这个时间长度和轮次的约束,在 Chatopera 机器人平台管理控制台内可以设定,是每个机器人的属性:会话回溯最大时长和会话回溯最大轮次。

    设定参数

    当对话用户的输入匹配到对话脚本的规则时,即是对话到达了一个状态。

    擦除状态

    开发者在多轮对话脚本的函数中,也可以擦除这个状态,这样到下次对话用户再请求时,话题检索的栈回到初始状态,状态机回到原始,这个擦除的方法是在回复或函数中添加 {CLEAR} 前缀,关于这个知识点的使用说明见文档。

    使用函数切换状态

    如果想从一个话题,切换到另外一个话题获得回复。那么可以在函数中使用 "topicRedirect(TOPIC_NAME, TOPIC_GAMBIT_ID)"。将 TOPIC_NAME 替换为话题名字,TOPIC_GAMBIT_ID 替换为匹配器。就可以切换到该规则下获得回复。

    topicRedirect 函数的更多介绍,参考文档。

    知识库路由

    对于状态机的状态跳转,Chatopera 多轮对话方案中,还有一个高级方法,通过知识库路由对话到对话状态机任意状态。

    知识库路由

    设定知识库的问答对中的答案,内容使用上述格式,将 TOPIC_NAME 替换为话题名字,TOPIC_GAMBIT_ID 替换为匹配器。就可以切换到该规则下获得回复。

    关于知识库路由的更多介绍,参考文档。

    In This Article
    Back to top Copyright © (2018-CopyrightYearPlaceholderDONOTCHANGEManually) 北京华夏春松科技有限公司 京ICP备20023756号-3