针对状态繁多、跳转复杂的垂类,DMKit支持通过可视化编辑工具进行状态跳转流程的编辑设计,并同步转化为对话基础配置供对话管理引擎加载执行。
这里的可视化编辑工具使用开源的mxgraph可视化库,对话开发者可在可视化工具上进行图编辑,而该可视化库支持从图转化为xml文件,我们再利用转换框架实现对应的编译器将xml文件转化为对话基础配置加载执行。以demo场景【查询流量及续订】为例,步骤为:
- 在draw.io中按照编辑规则进行图编辑
- 在编辑好的图导出为xml文件,放置于conf/app/demo目录下
- 运行language_compiler/run.py程序,该程序调用对应的转换器将conf/app/demo目录下的xml文件转化为json文件
- 将json文件注册于conf/app/products.json文件后,运行DMKit加载执行
规定使用以下构图元素进行编辑:
- 单箭头连线,单箭头连线是路程图中最基本的元素之一,用来表示状态的跳转。注意在使用连线的时候,连线的两端需要出现蓝色的 x 标识,以确保这个连线成功连接了两个框。
- 椭圆,用户节点,椭圆中存放的是用户的意图,以及槽位值(可选),内部语言格式为:
INTENT: intent_xxx SLOT:user_a,user_b
该节点表示用户输入query的NLU解析结果,结合指向该节点的BOT节点,构成了DMKit基础配置中一个完成trigger条件
- 圆角矩形,BOT节点,圆角矩形中存放的是BOT的回复,内部格式为:
PARAM:param_type:param_name1=param_value2 PARAM:param_type:param_name1=param_value2 BOT:XXXXXXX{%param_name1%}XXX{%param_name2%}
该节点表示BOT应该执行的回复,同时节点中可以定义参数并对回复进行模板填充。
在这里定义dmkit_param_context_xxxx
变量时,dmkit自动将该变量以xxxx
为key存入本轮session结果context。下一轮可以定义type=session_context,value=xxxx的变量来读取,也可以直接使用value={%dmkit_param_context_xxxx%}来获取,具体可参考params类型及说明
- 菱形,条件节点,在节点中可定义需要进行判断的变量:
同时对该节点连出的单箭头连线可以添加描述跳转条件,条件可使用在菱形中定义的变量,例如:
PARAM:param_type:param_name1=param_value2 PARAM:param_type:param_name1=param_value2
跳转条件描述中,可用&&或||来连接多个条件以表达“和”或“或”,例如:ge:{%param1%},1
||和&&不可同时出现在一个条件描述中。ge:{%param1%},1 || eq: {%param1%}, 10
另外规定:
- 一个椭圆仅可以连向一个圆角矩形或者一个菱形
- 一个圆角矩形可以连向多个椭圆
- 一个菱形可以连向多个圆角矩形
详细使用示例参考conf/app/demo目录下demo场景的xml文件,该xml文件可在draw.io中导入查看