掌桥专利:专业的专利平台
掌桥专利
首页

一种自动生成数字人行为模块执行流程图的方法、系统、电子设备及存储介质

文献发布时间:2024-04-18 20:01:30


一种自动生成数字人行为模块执行流程图的方法、系统、电子设备及存储介质

技术领域

本发明涉及数字人技术领域,尤其涉及一种自动生成数字人行为模块执行流程图的方法、系统、电子设备及存储介质。

背景技术

随着公司数字人能力的增强以及实际业务的复杂性提升,数字人训练师录制的模块越来越庞大,模块数量也越来越多,往往一个代表数字人基础能力的模块,会由十几甚至几十个基础模块组合而成,而处理复杂业务的模块,又会由几个基础能力模块组合而成。每个模块都包含主程序与守护程序2个进程,这2个进程可分别调用其它模块并行执行。且模块之间也存在相互引用和循环调用的逻辑关系,所以纵观全局,所有子进程并非线性依次执行。又因为模块内部录制了大量的随机性功能块与适应不同情况的智能处理块,实际运行模块内容的时候,会根据不同的业务场景产生不同的执行流程,种种原因导致训练后的分析工作变得复杂耗时。当数字人行为发生故障时,往往需要追寻完整的执行流程,而训练师第一时间只能得知是哪一个功能模块的主程序或守护程序报错,再结合业务模块的模块引用关系图,以及数字人本次行为执行持续时间与各相关模块理论运行时间,推测数字人在报错前执行过哪些功能块。此种排查流程耗时较长,推理出的执行流程也与实际执行流程存在偏差,且高度依赖训练师的经验,在很大程度上影响了数字人能力的训练效率与品质。

发明内容

针对上述问题中存在的不足之处,本发明提供一种自动生成数字人行为模块执行流程图的方法、系统、电子设备及存储介质。

为实现上述目的,本发明提供一种自动生成数字人行为模块执行流程图的方法,包括:

分别采集数字人行为执行模块执行流程中的运行信息和结束信息,所述运行信息包括程序开始时间戳、模块ID、模块版本号、程序类型、进程ID和调用者的进程ID,所述结束信息包括程序结束时间戳、进程ID和报错信息;

将所述运行信息和所述结束信息存储至完整流程信息数组;

对所述完整流程信息数组进行预处理获得预处理流程数组;

基于所述预处理流程数组,绘制生成多叉树;

其中,所述多叉树中的节点代表执行模块且按照执行流程顺序中相邻两个节点中前节点是后节点的父节点,所述后节点是所述前节点的子节点。

优选的是,所述程序类型包括主程序和守护程序。

优选的是,所述运行信息中的进程ID和所述结束信息中的进程ID相同

优选的是,对所述完整流程信息数组进行预处理获得预处理流程数组包括:

取出所述完整流程信息数组中所述结束信息存储至结束信息集合;

基于所述进程ID,遍历所述完整流程信息数组中所述运行信息,并在所述结束信息集合中找到对应所述结束信息;

基于所述运行信息和与其对应所述结束信息,获得程序运行持续时间;

将所述程序运行持续时间和所述结束信息中存在的所述报错信息添加到对应所述运行信息上。

优选的是,基于所述预处理流程数组,绘制生成多叉树包括:

从所述预处理流程数组中取出执行流程中最后节点;

为每个所述最后节点按照所述进程ID依次往前匹配寻找对应父节点,直至找到最终父节点;

其中,当所述子节点匹配到对应所述父节点则将所述子节点插入到所述父节点下。

优选的是,当所述子节点匹配到对应所述父节点则将所述子节点插入到所述父节点下包括:

所述子节点匹配到对应所述父节点时,先判断所述父节点中子节点集合中是否存在与所述子节点所述模块ID一致的模块子节点;

若不存在,则创建一虚拟模块节点,若所述子节点的程序类型为主程序,则所述子节点为所述虚拟模块节点的右子节点,若所述子节点的程序类型为守护程序,则所述子节点为所述虚拟模块节点的左子节点,并将所述虚拟模块节点插入到所述父节点的子节点集合中;

若存在,则根据所述子节点的程序类型添加至所述模块子节点中。

优选的是,若所述子节点上存在所述报错信息,则将所述报错信息添加到所述父节点上。

本发明还提供一种自动生成数字人行为模块执行流程图的系统,包括:

采集模块,用于分别采集数字人行为执行模块执行流程中的运行信息和结束信息,所述运行信息包括程序开始时间戳、模块ID、模块版本号、程序类型、进程ID和调用者的进程ID,所述结束信息包括程序结束时间戳、进程ID和报错信息;

存储模块,用于将所述运行信息和所述结束信息存储至完整流程信息数组;

预处理模块,用于对所述完整流程信息数组进行预处理获得预处理流程数组;

绘制模块,用于基于所述预处理流程数组,绘制生成多叉树;

其中,所述多叉树中的节点代表执行模块且按照执行流程顺序中相邻两个节点中前节点是后节点的父节点,所述后节点是所述前节点的子节点。

本发明还提供一种电子设备,包括至少一个处理单元以及至少一个存储单元,其中,所述存储单元存储有计算机程序,当所述程序被所述处理单元执行时,使得所述处理单元执行上述的方法。

本发明还提供一种存储介质,其存储有可由电子设备执行的计算机程序,当所述程序在所述电子设备上运行时,使得所述电子设备执行上述的方法。

与现有技术相比,本发明的有益效果为:

本发明展示数字人每一次执行模块的详细流程记录,当发生行为错误时,醒目地标记出是哪一条运行线路出现问题,方便训练师快速定位问题,分析原因,修改模块,复测功能。

附图说明

图1是本发明自动生成数字人行为模块执行流程图的方法的流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

参照图1,本发明提供一种自动生成数字人行为模块执行流程图的方法,包括:

分别采集数字人行为执行模块执行流程中的运行信息和结束信息,运行信息包括程序开始时间戳、模块ID、模块版本号、程序类型、进程ID和调用者的进程ID,结束信息包括程序结束时间戳、进程ID和报错信息;

将运行信息和结束信息存储至完整流程信息数组;

具体地,在数字人行为执行初始化阶段,会创建一个用来保存流程信息的空数组,称为“完整流程信息数组”。在模块开始运行时,会同时创建两个独立进程,分别命名为“主程序”和“守护程序”。程序开始运行时,会推送当前程序的运行信息到“完整流程信息数组”中,运行信息包括程序开始时间戳、模块ID、模块版本号、程序类型、进程ID、调用者的进程ID与其它业务相关信息。“主程序”主要内容为主体功能逻辑的执行,“守护程序”主要内容为监测并处理非典型场景如网络不稳定、应用闪退等问题。“主程序”和“守护程序”并行执行并且都能够引用其它模块并在执行过程中调用它们。当“主程序”或“守护程序”运行结束时,会再次推送运行信息到“完整流程信息数组”中,结束信息包括程序结束时间戳、进程ID、报错信息(如果存在报错)。当所有程序都运行完毕,就收集到了所有程序运行开始和结束的信息以及不同程序之间的调用关系。

对完整流程信息数组进行预处理获得预处理流程数组;

具体地,“完整流程信息数组”包含了每个程序运行启动的信息和运行结束的信息各一份,对于生成多叉树算法而言,这个数组有一半的冗余节点(因为每个树节点只需要对应一份程序运行信息)。需要精简数组并且将启动信息和结束信息整合。因为“结束信息”在“完整流程信息数组”中的位置一定位于“运行信息”后面,可以建立临时存储程序结束信息集合的Map对象结构,称为“结束信息集合”,然后从后往前遍历“完整流程信息数组”,判断程序信息的类型,如果是“结束信息”,则从该数组中取出,存入“结束信息集合”,以进程ID作为键,信息对象作为值;如果是“运行信息”,则根据进程ID(启动信息与结束信息的进程ID相同)去“结束信息集合”中找到对应的结束信息,追加可能存在的报错信息,并计算得到程序运行持续时长,即为“程序结束时间戳”减去“程序启动时间戳”,然后从“结束信息集合”中删除对应的结束信息以减少内存占用。遍历结束后,得到预处理过的流程信息数组,称为“预处理流程数组”。即预处理过程为:取出完整流程信息数组中结束信息存储至结束信息集合;基于进程ID,遍历完整流程信息数组中运行信息,并在结束信息集合中找到对应结束信息;基于运行信息和与其对应结束信息,获得程序运行持续时间;将程序运行持续时间和结束信息中存在的报错信息添加到对应运行信息上。

基于预处理流程数组,绘制生成多叉树;

其中,多叉树中的节点代表执行模块且按照执行流程顺序中相邻两个节点中前节点是后节点的父节点,后节点是前节点的子节点。

在本实施例中,根据“预处理流程数组”逆向生成能体现并行执行流程的多叉树的算法:由于流程数组是数字人根据模块引用关系网与多变的实际业务场景,在执行模块过程中动态生成的,在形成前具有长度和内容的不确定性,在形成后具有在时间维度整体有序,子树层面局部乱序的特性,它不是简单的由一棵多叉树经过前序遍历(或中序、后序遍历)生成的多叉树的一维数组表示,故无法经过简单的一次遍历数组即可逆向生成多叉树。本申请采用结合实际业务情况,定向优化的办法,首先分析“预处理流程数组”,可知:一、虽然多个进程可并行执行,但每个单条线路上,必然是有序执行,而预处理完的流程数组,是一个仅包含“运行信息”的数组,所以对每棵子树来说,父节点在数组中的位置下标,一定小于子节点位置下标;二、父节点程序运行过程中会调用子节点程序开始运行,所以父节点位于数组中的位置,与子节点位于数组中的位置相距不会很远,这个距离取决于父节点在调用子节点前已经运行的时长与并行的其它程序运行时长,若父节点在调用子节点前已经运行了10分钟其它业务逻辑,而在这期间有2个其它子树的并行程序开始运行,那么父节点与子节点在流程数组之间的间距就是2,其整体大致符合正态分布规律;三、由树的特性可知,每个子节点有且仅有一个父节点。根据以上三个特性点,按倒序寻找父节点生成多叉树的算法,该算法依次取出数组最后一个节点,往前匹配它的父节点,仅需少数几次比较,即可寻到父节点,将子节点插入到父节点下,进入下一次循环。因此,只需要经历一遍完整的循环,即可逆向生成多叉树,该算法的时间复杂度为O(n),空间复杂度为O(1),。其绘制步骤为:从预处理流程数组中取出执行流程中最后节点;为每个最后节点按照进程ID依次往前匹配寻找对应父节点,直至找到最终父节点;其中,当子节点匹配到对应父节点则将子节点插入到父节点下。

进一步地,当子节点匹配到对应父节点则将子节点插入到父节点下包括:

子节点匹配到对应父节点时,先判断父节点中子节点集合中是否存在与子节点模块ID一致的模块子节点;

若不存在,则创建一虚拟模块节点,若子节点的程序类型为主程序,则子节点为虚拟模块节点的右子节点,若子节点的程序类型为守护程序,则子节点为虚拟模块节点的左子节点,并将虚拟模块节点插入到父节点的子节点集合中;

若存在,则根据子节点的程序类型添加至该模块子节点中。

具体地,由于“完整流程信息数组”中只记录了子进程(指“主进程”和“守护进程”)的运行信息,若仅由这些子进程作为树节点,形成的多叉树十分杂乱,所以在生成多叉树时,创建了“虚拟模块节点”,由“虚拟模块节点”来汇聚进程子节点,整棵多叉树,由模块节点与进程子节点交替展开。具体做法如下:逆向生成多叉树算法中倒序遍历“预处理流程数组”时,假设子节点B已经寻找到了父节点A,不直接把B添加到A的Children数组(A的子节点集合)中,而是根据B程序信息中的模块ID,去查找A的Children数组中是否含有该模块节点C,情况一:不存在C,则创建一个虚拟模块节点代表模块节点C,再判断B的程序类型,如果B是主程序,则作为C的右子节点,如果B是守护程序,则作为C的左子节点。最后把虚拟模块节点C添加到A的Children数组中;情况二:存在C,则直接根据B的程序类型添加到C的子节点中。

在本实施例中,若子节点上存在报错信息,则将报错信息添加到父节点上。添加传递程序错误信息的优化点:由于“预处理流程数组”中,包含错误信息的只有最终报错的那一个程序信息,而在绘制出来的多叉树图中想要展示完整的错误路线,所以错误信息必须层层传递就像往上层冒泡一般。具体做法如下:逆向生成多叉树算法中倒序遍历“预处理流程数组”时,假设子节点B已经寻找到了父节点A,且已经在A的Children数组中找到了对应模块节点C或者已经新创建了对应模块节点C,判断子节点B的程序信息中是否包含报错信息,如果包含错误信息,则将错误信息添加到A和C中。因为是逆序遍历,每个子节点都会往前寻找父节点重复此判断过程,所以错误信息会层层传递到“预处理流程数组”第一个程序信息中,且经过的路线都已经拷贝了错误信息,错误路线由此得以建立。

在本实施例中,根据生成的树结构流程数据,使用Canvas技术绘制出流程图:多叉树图按照从左往右横向展开的模式绘制,最关键的点在于如何确定每个节点在平面图上的坐标,以及以该节点为根节点的子树所占据的区域大小。可以把每一棵子树所占据的区域看做一个矩形,矩形的长度取决于子树的深度,矩形的宽度取决于子树的广度。所以本发明以“分治法”的思想为指导,递归整棵多叉树,自下而上计算出每棵子树的区域与位置。具体方法如下:判断当前节点是否是叶子节点,如果是叶子节点,则节点所占区域为固定的“叶子节点宽w”乘“叶子节点高h”;如果不是叶子节点,则作为一棵子树来计算区域,设子树矩形区域长度为Width,矩形区域宽度为Height,与子节点横向间距为Space,每一个子节点纵向间隔为Gap,共有n个子节点,第i个子节点占用区域的宽度记为W

Width=max(Wi)+Space+w

Height=(∑

备注:1.max()为求出一组数据中的最大值;∑为累计求和;

递归结束后,整个多叉树及其每棵子树的占用区域都计算完毕,其中每个子树的相对根节点,位于矩形区域内靠左且纵向居中位置,它的左上角坐标记为(X,Y),相对于该矩形区域内而言,计算公式为:

X=0

Y=(Height/2)-h

而它的第i个子节点的左上角坐标记为(Z

Z

V

至此,可依据以上数据绘制多叉树的横向展开图,在绘制每一个节点时,如果是虚拟模块节点,则展示模块名称和版本号,如果是进程子节点,则区分主程序与守护程序,并展示运行时间。当节点信息中包含错误信息时,采用醒目的红色主题绘制节点,其它节点则使用浅灰色主题。

利用本发明提供的方法与系统在数字人训练场景使用,具有以下优点:

定位问题效率提升:之前的训练模式,在出现错误以后,需要由经验丰富的训练师分析问题,然后根据分析结果的颗粒细度,抽调十名左右数字人,来执行微调后的模块,进一步确定大致流程。经过多轮排查,才得以精准定位问题。在这个过程中,若需要提高某一条流程线路执行的分析精确度,需要一对一跟踪监控数字人行为,耗时耗力,遇到复杂情况,甚至需要多名训练师协同跟踪问题。而采用本发明提供的方法生成的流程图代表了数字人实际执行的模块顺序,执行时间精确到秒,对于循环调用的模块,执行数量精确到次,数字人行为训练师可根据流程图内突显的错误提示,修改模块运行逻辑,主动控制模块的执行流程为错误线路流程所描述的那样执行,只需要一名训练师,加一名数字人即可精准复现报错场景。

确认修复结果效率提升:修复模块以后,可以批量选择数字人测试,也可以由一名数字人反复执行测试,无需专人实时跟踪执行情况,仅需将每次运行生成的流程图与原始报错流程图对比,即可得出是否修复错误流程的结论。

由流程数组到多叉树流程图的生成速度快:因为数字人执行流程多叉树的每一棵子树都不相同,它们的广度和深度都是随机的,按照传统的无序数组生成多叉树算法,需要多次顺序遍历数组,每次遍历都寻找一个父节点下的所有子节点,因为子节点数量是未知的,所以每次遍历都需要遍历至数组最后一位,由此得出该算法的时间复杂度为O(n2),空间复杂度为O(1);另一种传统算法,是采用Map数据结构,先遍历一次流程数组,将节点ID(即进程ID)作为Map的键,节点作为Map的值,再依次取出数组中的流程节点,按照节点父级ID(即调用者进程ID)匹配关系链,该算法由于只需要循环2次,将时间复杂度降低至O(n),但是空间复杂度提升至O(n),属于用空间换时间的做法,并不优秀。本发明从实际业务场景出发,优化而来的算法时间复杂度为O(n),空间复杂度为O(1),兼具前两种传统算法的优点。

综合以上几点,在本发明前,数字人执行错误排查任务的几个要素如下:(1)、数字人行为训练师经验要求:工作经验满12个月,熟练掌握数字人不同基础行为模块的运行规律,可根据执行表现反向推测可能的组合;(2)、排查错误与复测错误所需数字人设备:10名;(3)、错误定位所需时间:60~120分钟。在本发明上线以后,相应的要素变更如下:(1)、数字人行为训练师经验要求:工作经验满2个月,基本了解数字人不同基础行为模块的运行规律,能看懂执行流程图即可;(2)、排查错误与复测错误所需数字人设备:1名;(3)、错误定位所需时间:5分钟,可直观地从流程图中看出是哪个模块在什么时候、第几次运行时出错,且出错前还运行了哪些其它模块。通过对比可以看出,实施自动生成数字人行为模块执行流程图的方法与系统后,对数字人执行错误排查任务的效率有着十分大的改善:(1)、可降低训练师经验要求:(12-2)/12≈83%;(2)、可减少排查与复测所需数字人设备:(10-1)/10=90%;(3)、可缩短错误定位所需时间:(60-5)/60≈92%。

本发明还提供一种自动生成数字人行为模块执行流程图的系统,包括:

采集模块,用于分别采集数字人行为执行模块执行流程中的运行信息和结束信息,运行信息包括程序开始时间戳、模块ID、模块版本号、程序类型、进程ID和调用者的进程ID,结束信息包括程序结束时间戳、进程ID和报错信息;

存储模块,用于将运行信息和结束信息存储至完整流程信息数组;

预处理模块,用于对完整流程信息数组进行预处理获得预处理流程数组;

绘制模块,用于基于预处理流程数组,绘制生成多叉树;

其中,多叉树中的节点代表执行模块且按照执行流程顺序中相邻两个节点中前节点是后节点的父节点,后节点是前节点的子节点。

本发明还提供一种电子设备,包括至少一个处理单元以及至少一个存储单元,其中,存储单元存储有计算机程序,当程序被处理单元执行时,使得处理单元执行上述的方法。

本发明还提供一种存储介质,其存储有可由电子设备执行的计算机程序,当程序在电子设备上运行时,使得电子设备执行上述的方法。

以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 输电线除冰机器人的包裹式旋转除冰机构及除冰机器人
  • 输电线除冰机器人的包裹式旋转除冰机构及除冰机器人
技术分类

06120116557408