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

决策方法、装置、电子设备和存储介质

文献发布时间:2024-04-18 19:59:31


决策方法、装置、电子设备和存储介质

技术领域

本发明涉及金融技术领域,尤其涉及一种决策方法、装置、电子设备和存储介质。

背景技术

在银行金融场景下,金融决策规则是基于场景定义的,即在指定场景中定义规则群组。在规则群组中有且仅有一条主规则流,作为该场景下的逻辑核心,去编排组织其他子规则流。当前在金融领域主要是通过基于Drools的规则引擎表示金融场景下的规则,实现金融场景下的决策执行。

但是,Drools运行的Fact,即参数池数据,以Java实例对象的形式存在JVM堆内存,当运行的规则量达到一定程度,则可能存在内存泄露的风险。

发明内容

本发明提供一种决策方法、装置、电子设备和存储介质,用以解决现有技术中执行决策规则时存在内存泄露的缺陷。

本发明提供一种决策方法,包括:

获取决策规则,所述决策规则为DSL格式,所述DSL格式中的各节点对应决策规则中的各决策元素;

从所述决策规则中,提取决策所需的入参,以及,从所述决策规则中,提取决策所需的执行队列;

基于所述执行队列中各待执行节点对应在所述决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器;

基于所述执行器,对待决策的用户信息进行决策。

根据本发明提供的一种决策方法,所述决策规则的获取步骤包括:

获取初始决策规则,对所述初始决策规则进行结构转换,得到所述初始决策规则对应的节点执行队列;

分别对所述节点执行队列中的各节点进行节点校验,得到节点检验结果;所述节点校验包含节点类型校验、节点属性校验、节点属性值校验中的至少一种;

整合所述各节点的节点检验结果,确定所述决策规则。

根据本发明提供的一种决策方法,所述基于所述执行器,对待决策的用户信息进行决策,包括:

基于所述待决策的用户信息,对所述执行器的待执行算子逻辑进行填充,得到待执行表达式;

对所述待执行表达式进行预处理,并调用预处理之后的待执行表达式,得到决策执行结果。

根据本发明提供的一种决策方法,所述从所述决策规则中,提取决策所需的入参,以及,从所述决策规则中,提取决策所需的执行队列,包括:

对所述决策规则进行DSL解析,得到DSL参数集树;

对所述DSL参数集树进行解析,得到DSL参数集;

对所述DSL参数集进行校验,得到所述决策规则中的各决策元素;

基于所述各决策元素,提取决策所需的入参,以及,提取决策所需的执行队列。

根据本发明提供的一种决策方法,所述基于所述执行队列中各待执行节点对应在所述决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器,包括:

在所述执行队列非空的情况下,基于所述执行队列中各待执行节点对应在所述决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器;

以及,在所述执行队列为空的情况下,基于所述入参,整合执行器。

根据本发明提供的一种决策方法,所述基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器,包括:

获取扩展节点参数,将所述扩展节点参数补入所述入参;

基于执行队列中各待执行节点对应的执行器实例,执行各待执行节点的算子逻辑,获取执行结果;

基于所述入参和所述执行结果,整合所述执行器。

本发明还提供一种决策装置,包括:

获取单元,获取决策规则,所述决策规则为DSL格式,所述DSL格式中的各节点对应决策规则中的各决策元素;

提取单元,从所述决策规则中,提取决策所需的入参,以及,从所述决策规则中,提取决策所需的执行队列;

整合单元,基于所述执行队列中各待执行节点对应在所述决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器;

执行单元,基于所述执行器,对待决策的用户信息进行决策。

本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述决策方法。

本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述决策方法。

本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述决策方法。

本发明提供的决策方法、装置、电子设备和存储介质,通过获取DSL格式的决策规则,从决策规则中,提取决策所需的入参,以及,从决策规则中,提取决策所需的执行队列,基于执行队列中各待执行节点对应在决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于入参和执行队列中各待执行节点对应的执行器实例,整合执行器;基于执行器,对待决策的用户信息进行决策,实现了动态获取入参,内存占用,并基于BFS算法作为流程推动算法,更进一步的降低了内存的占用,进而降低内存泄漏的风险。

附图说明

为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明提供的决策方法的流程示意图;

图2是本发明提供的DSL格式的决策规则的解析和执行的流程示意图;

图3是本发明提供的决策系统的结构示意图;

图4是本发明提供的一种基于DSL的银行金融场景决策引擎实现机制的示意图;

图5是本发明提供的决策装置的结构示意图;

图6是本发明提供的电子设备的结构示意图。

具体实施方式

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

当前在金融领域主要通过成熟的Drools规则引擎实现金融场景的决策执行。Drools是一个基于规则引擎的DSL框架,使用Drools规则语言(DRL)来表示规则。它提供了强大的规则引擎和DSL支持,可以用于实现复杂的决策逻辑。Drools支持规则的动态加载和修改,以及与Java和其他语言的集成。其结构组成主要包括规则库(Rule Base)、规则(Rule)、条件(LHS)、动作(RHS)和事实(Fact)等组件。其中,规则库(Rule Base):规则库是Drools中存储和管理规则的容器,可以包含一个或多个规则,以及相关的数据和配置信息。规则库是Drools引擎的核心组件,负责加载、编译和执行规则;规则(Rule):规则是业务规则的基本单元,描述了在满足一定条件时应该执行的动作,规则由条件部分(LHS)和动作部分(RHS)组成,规则库可以包含多个规则,每个规则都有一个唯一的标识符;条件(LHS,LeftHand Side):条件部分描述了规则触发的条件,通过规则引擎提供的语法和表达式来定义条件,通常基于事实(Facts)和规则之间的关系,条件部分用于匹配和筛选满足条件的事实;动作(RHS,Right Hand Side):动作部分描述了规则触发后应该执行的操作,可以包含一系列的动作,如更新事实、调用函数、发送消息等,动作部分用于执行规则触发后的业务逻辑;事实(Fact):事实是规则引擎中使用的数据或信息,代表了问题领域中的某个状态或属性,事实可以是简单的数据类型(如字符串、数字等),也可以是复杂的对象或结构,事实被用于规则的条件部分进行匹配和推理;规则库是顶层的组织结构,包含了多个规则,每个规则由条件部分和动作部分组成,条件部分用于匹配事实,动作部分用于执行相应的操作,规则库和规则之间的关系是一对多的关系,一个规则库可以包含多个规则。

但是,Drools在实际运行过程中可能存在运行的Fact,即参数池数据,以Java实例对象的形式存在JVM堆内存,当运行的规则量达到一定程度,则可能存在内存泄露的风险。针对上述问题,本发明提供了一种决策方法,以实现动态加载参数池数据执行决策,避免执行决策过程中内存泄露的风险。图1是本发明提供的决策方法的流程示意图,如图1所示,该方法包括:

步骤110,获取决策规则,所述决策规则为DSL格式,所述DSL格式中的各节点对应决策规则中的各决策元素;

具体地,可以通过预先基于金融场景去定义决策规则,并且以DSL(Domain-Specific Language,领域特征语言)格式去编写得到决策规则。此处的决策规则可以是一个规则群组,规则群组中有且仅有一条主规则流。主规则流作为该金融场景下的逻辑核心,可以去编排阻止其他子规则流。由此,可以基于DSL语言对规则群组中的规则流进行嵌套。需说明的是,可以将决策规则中的规则群组记为元素集,则规则群组中的各规则流可以记为各决策元素,并且,决策元素中可以包含多个节点。在执行对应的决策元素时,即根据决策元素中各节点之间的逻辑关系,实现决策元素的执行。此处,对于元素集中每一个决策元素,可以通过决策元素中的节点类型elemenType来判定确定节点详细逻辑信息。此处,节点类型elemenType的长度并没有限制,其包含的种类可以为多个。节点类型可以通过二位数进行表示,以留下足够的扩展空间的同时,也节省不必要的存储资源消耗。此处的节点类型可以包括4种,包括:普通算子,其逻辑是运算符和参数池数据的连接;扩展算子:决策算子、评分卡算子、规则流算子,扩展算子只需要ID为外键引用其定义信息即可,则扩展算子可以使用任意技术栈实现扩展逻辑。

在一实施例中,DSL格式的决策规则的整体结构可以包括:规则流ID,规则流全局的唯一标识,可以作为数据库主键;规则流KEY,规则流全局唯一标识,作为逻辑主键;初始化节点信息,包含头节点KEY、头节点名称,其中头节点KEY是从从前端获取,并且在此规则流中是唯一,头节点可以从initNode中获取;中间变量参数,定义需要展示的数据,是在执行启动节点过程中产生的中间变量参数,可以反映金融场景所关注的变量;节点集,包含当前节点以及后继节点的连接信息,各节点包含节点ID、节点KEY、节点名称、节点类型等节点信息;规则表达条件语句,包括规则原文、规则原始内容、EXPR(evaluate expressions)表达式,还包括变量信息,其中变量信息包含变量KEY、变量值、变量类型。

其中,针对变量类型,可以通过resType值进行表示,可以通过两位数模式或多位数模式对变量类型进行定义,比如,01表示Long类型的长整型、02表示Double类型的高精度浮点型、03表示Boolean类型的布尔值、04表示Date类型的日期数据;05表示String类型的字符串,此处不进行一一列举。多位数模式对变量类型进行定义是用于扩展操作,可以基于自定义操作定义动作编码,在resType中则使用00+动作编码的方式将自定义操作引入规则流,动作具体信息则以ID形式存储在resKey中。

另外,针对EXPR表达式可以表示通过图形符号对数据进行连接,比如图形符号加可以通过“+”EXPR表达式进行映射,则联系人分数加本人分数对应的EXPR表达式可以是“linkScore+myScore”,此处不对EXPR表达式进行一一列举。

可以理解的是,相较于现有技术中基于Drools规则引擎以文本的形式对决策规则进行编写,当规则数量增多或规则逻辑复杂时,规则的维护和调试变得困难,本发明提供的决策规则的整体结构可以基于DSL格式的语言进行编写,其编写逻辑更加清晰,便于维护和编写过程中的调试。

还需说明的是,相较于基于Drools规则引擎实现决策,Drools规则引擎存在复杂性,导致学习周期较长,且Drools规则引擎的通用框架,并不是金融场景所专用的框架,因此提供的语法都是基础性的语法和结构,遇到金融业务场景相关的计算和逻辑,都需要手动逐步实现规则逻辑,或者通过代码硬编码去实现扩展,在灵活性和可扩展性方面对银行金融场景的适配性并不是很好。由此,DSL可以根据金融场景需求进行设计,基于更简洁、直观的语法来表达业务规则和决策逻辑。相比于Drools的规则语法,DSL可以提供更高层次的抽象,减少学习曲线和理解成本。同时提供不同种类的算子,可以根据业务类型的特点选择合适的算子进行配置,简化了规则编写过程。另外,DSL还包含验证错误检测机制,提供更严格的语法验证和错误检测机制,利于在编写规则时发现和纠正错误,增加了规则可维护性。且DSL的运行是通过代码逐步实现,因此在编写过程中遇到问题时可以通过DEBUG的方式进行排查,提供便捷且准确率高的决策规则编写方法。

步骤120,从所述决策规则中,提取决策所需的入参,以及,从所述决策规则中,提取决策所需的执行队列;

具体地,通过解析DSL格式的决策规则中的节点关系以及节点之间的连接和嵌套关系,并采集为参数集树。通过决策元素中的初始执行KEY,从数据库中提取决策所需的入参,并采用图的BFS算法作为流程推动算法,将初始执行KEY放入执行队列中,以提取决策所需的执行队列。此处,入参表示输入的参数信息,可以是待决策的用户信息。执行队列表示需要执行的规则流。

在一实施例中,首先从数据库提取DSL节点相关参数信息和详细规则信息,使用fastjson库将DSL解析为POJO实例对象,根据属性关系从POJO对象中获取节点KEY信息,并根据获取顺序将KEY放入Map中,从而构成参数集树。需说明的是,参数树同样需要进行校验,在采集过程中可以通过对节点类型进行判断,避免非定义类型加入到规则流中。根据参数树从数据库获取KEY所映射的详细参数信息,在之后参数信息会流入对应的节点作为入参,此处映射可以使用k-v模式,k为KEY,v为详细参数信息。

需说明的是,相关参数信息和详细规则信息可以记作为参数池数据,并存储在数据库中。由此,在加载执行具体规则时,再去数据库获取相应的参数池数据加载到内存,且数据的作用域在规则流的节点执行方法内,当方法执行完成后,参数池数据则会被JVM垃圾回收处理,由此避免了内存泄露的风险。

步骤130,基于所述执行队列中各待执行节点对应在所述决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器;

具体地,在执行队列为非空的情况下,通过执行队列中各待执行节点对应在决策规则中的节点类型,确定各待执行节点对应的执行器实例。并基于入参和执行队列中各待执行节点对应的执行器实例,整合执行器。在执行队列为空的情况下,基于入参整合执行器。此处,执行器实例可以是各待执行节点对应的EXPR表达式,即是通过将入参和各待执行节点得到EXPR表达式。另外,此处整合执行器可以是通过定义在resultNode中的整合和抽取逻辑,对基于入参深度拷贝得到的出参进行数据清洗。

步骤140,基于所述执行器,对待决策的用户信息进行决策。

具体得,通过对EXPR表达式进行参数填充,即对变量进行参数替换,填充方式是根据待决策的用户信息对EXPR表达式中变量进行匹配,若匹配到则替换为实际参数值。接着,创建执行器构建器,可以通过工厂模式获取执行器实例。接着,对EXPR表达式进行预处理,使EXPR表达式可以满足具体的执行引擎的语法要求。例如:执行引擎选择的Jython执行引擎,则需要将表达式中的中文转为ASCII编码,使用正则表达式进行语法检查和修正。处理好的EXPR表达式则通过调用Jython执行引擎call方法进行调用执行,最终获得对待决策的用户信息进行决策的执行结果返回。需说明的是,待决策的用户信息可以来源于数据库、文件、API等,可以通过对待决策的用户信息进行预处理,包括清洗、转换和标准化等操作,以确保数据的质量和一致性。

本发明实施例提供的方法,通过获取DSL格式的决策规则,从决策规则中,提取决策所需的入参,以及,从决策规则中,提取决策所需的执行队列,基于执行队列中各待执行节点对应在决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于入参和执行队列中各待执行节点对应的执行器实例,整合执行器;基于执行器,对待决策的用户信息进行决策,实现了动态获取入参,内存占用,并基于BFS算法作为流程推动算法,更进一步的降低了内存的占用,进而降低内存泄漏的风险。

基于上述任一实施例,决策规则的获取步骤包括:

获取初始决策规则,对所述初始决策规则进行结构转换,得到所述初始决策规则对应的节点执行队列;

分别对所述节点执行队列中的各节点进行节点校验,得到节点检验结果;所述节点校验包含节点类型校验、节点属性校验、节点属性值校验中的至少一种;

整合所述各节点的节点检验结果,确定所述决策规则。

具体地,可以在DSL格式的决策规则应用于决策系统之前,需要通过对DSL进行校验,确保DSL是合法的,避免出现DSL格式的决策规则中携带SQL注入等攻击性语法,导致决策系统崩溃。首先,获取待校验的初始决策规则,对初始决策规则进行结构转换,可以将DSL格式的决策规则转换为DOM结构,比如通过jackson库将DSL转为DOM结构。接着,获取ROOT节点,存入节点执行队列中,作为遍历的初始条件。当节点执行队列不为空时,则从pop队头节点进行校验,对各节点从节点类型、节点属性、节点属性值中的至少一个维度,进行节点校验。本发明实施例优先基于节点类型校验、节点属性校验、节点属性值对节点进行节点校验。最后,可以通过对节点校验结果进行整合,当该节点的任一维度的校验结果为不通过时,则该节点的节点校验结果为不通过,则可以认为该节点可能是包含攻击性的不合法的节点。需说明的是,通过树的BFS算法对DSL进行遍历,可以降低内存的占用率。

在一实施例中,首先,可以加载系统预定义的合法类型集到哈希表中,遍历节点类型集,判断各节点的节点类型是否为合法类型。接着,可以根据该节点的节点类型对应的合法节点属性,作为判断该节点的节点属性是否符为合法属性的判断依据,对节点属性进行校验。然后,可以通过正则表达式判断节点属性值是否符合要求,包括数据类型、数据长度、数据信息是否存在非法字符,以得到节点属性值的校验结果。

本发明实施例提供的方法,基于树的BFS算法对DSL进行遍历,降低了内存的占用率,并对初始决策规则中的节点进行节点校验,以保证决策规则的合法性。

基于上述任一实施例,步骤140包括:

基于所述待决策的用户信息,对所述执行器的待执行算子逻辑进行填充,得到待执行表达式;

对所述待执行表达式进行预处理,并调用预处理之后的待执行表达式,得到决策执行结果。

具体的,可以将待决策的用户信息对执行器的待执行算子逻辑进行填充,得到待执行表达式。此处的待执行表达式即可以是将待决策的用户信息与逻辑运算符进行连接,比如客户信息年龄大于22,则待执行表达式可以是custInfo>22。接着,可以对待执行表达式进行预处理,使EXPR表达式可以满足具体的执行引擎的语法要求。例如:执行引擎选择的Jython执行引擎,则需要将表达式中的中文转为ASCII编码,使用正则表达式进行语法检查和修正。最后,调用预处理之后的待执行表达式,得到决策执行结果。此处的决策执行结果可以是用户是否为高风险客户。

需说明的是,此处执行待执行表达式时,可以通过Jython执行引擎、JS执行引擎等具体的执行引擎实现,以实现可支持等多种语言的引擎,提升决策方法的通用性。

基于上述任一实施例,步骤120包括:

对所述决策规则进行DSL解析,得到DSL参数集树;

对所述DSL参数集树进行解析,得到DSL参数集;

对所述DSL参数集进行校验,得到所述决策规则中的各决策元素;

基于所述各决策元素,提取决策所需的入参,以及,提取决策所需的执行队列。

具体地,首先对DSL格式的决策规则进行DSL解析,将DSL的节点关系采集为DSL参数集树。对DSL参数集树进行解析,得到DSL参数集,并对DSL参数集进行参数校验,比如校验参数是否对等。进一步地,得到决策规则中的各决策元素。最后,通过各决策元素,提取决策所需的入参,根据各决策元素的关系特点,采用图的BFS算法作为流程推动算法。首先从initNode中获取规则流的起始执行节点KEY,并将该KEY加入到执行队列中,同时需要将入参集深拷贝到出参集中,即先将所有入参默认作为出参。当执行队列不为空时,则取队头元素进行执行从队头获取KEY代表当前执行节点的KEY,根据KEY从各决策元素中获取节点详细信息。

本发明实施例提供的方法,通过对DSL格式的决策规则进行解析,并对DSL参数集树进行解析,得到决策规则中的各决策元素,以实现算子执行环境的准备工作。

基于上述任一实施例,步骤130包括:

在所述执行队列非空的情况下,基于所述执行队列中各待执行节点对应在所述决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器;

以及,在所述执行队列为空的情况下,基于所述入参,整合执行器。

具体地,算子执行逻辑是由执行器调用的,而执行器可以采用工厂模式进行设计,执行器工厂的实例获取依据是节点类型。由此,首先需要获得节点类型,将类型传递给执行器工厂后,则可以获得对应的执行器实例。

基于上述任一实施例,所述基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器,包括:

获取扩展节点参数,将所述扩展节点参数补入所述入参;

基于执行队列中各待执行节点对应的执行器实例,执行各待执行节点的算子逻辑,获取执行结果;

基于所述入参和所述执行结果,整合所述执行器。

具体地,扩展节点参数可通过自定义的扩展算子的参数获取,比如根据实际金融场景中,普通逻辑算子无法覆盖的逻辑参数则可以作为扩展节点参数。可以理解的是,扩展算子对应的扩展节点参数不能和普通算子一样使用预先定义好的入参来存储待决策的用户信息,则还需要将扩展节点参数作为一个特殊参数补入入参。

接着,基于执行队列中各待执行节点对应的执行器实例,执行各待执行节点的算子逻辑,获取执行结果。并基于入参和执行结果,进行整合和抽取,即对入参对应的出参进行数据清洗。

可以理解的是,DSL格式的决策规则通过外键的设计可以兼容不同形式的算子,因此对算子扩展性非常强,且算子扩展的实现也非常容易,只需要提供算子的ID即可将算子嵌入规则流。DSL通过type的设计兼容不同的Action,提升了算子的可执行操作的扩展性。

基于上述任一实施例,图2是本发明提供的DSL格式的决策规则的解析和执行的流程示意图,如图2所示,该方法包括:

开始,将DSL格式的决策规则转换为DOM结构,将DOM结构的ROOT节点添加到队列。此处的ROOT节点指的是DSL格式的决策规则中的全部节点。接着,判断队列是否为空,若队列为空,则直接整合节点校验结果;若队列不为空,则对ROOT节点进行节点校验。具体校验步骤包括:首先,校验节点类型是否为系统;接着,校验节点属性是否合法;再接着,校验节点属性值是否符合系统要求。最后,整合校验结果,得到合法的DSL格式的决策规则。

进一步地,提取DSL信息,进行DSL解析,进行DSL参数集树木解析,并进行DSL参数集校验,获取元素集。根据元素集中元素的关系特点,采用图的BFS算法作为流程推动算法,获取初始节点与初始执行KEY,将入参集深度拷贝到出参集,将初始执行KEY放入执行队列。在元素执行队列为空的情况下,直接对执行算子逻辑的结果进行结果整合抽取。在元素执行队非空的情况下,从对头获取当前待执行节点KEY,根据KEY获取节点详细信息。通过获取节点类型,根据节点类型实例化执行器工厂,并将扩展节点参数存入入参集,执行算子逻辑,进行结果整合抽取。

接着,对EXPR表达式进行参数填充,创建执行器构建器,通过工厂获得执行器实例。然后对EXPR表达式进行预处理,并执行预处理后的EXPR表达式。最后,返回执行结果。

需说明的是,上述DSL解析和执行方法可以作为执行模块中所调用的方法,执行模块根据解析后的规则对数据进行处理和决策,比如条件判断、计算、筛选等操作,以确定最终的决策结果。执行模块生成决策结果数据,并将其传送给下一个模块,比如后处理模块。后处理模块接收决策结果数据,并进行进一步的处理和转换,以生成最终的结果数据。后处理可能包括结果格式化、数据聚合、计算指标等操作,以满足用户需求和展示要求。后处理模块生成最终的结果数据,并将其传送给下一个结果输出和传送模块。

结果输出模块接收最终的结果数据,并根据用户需求选择合适的方式进行输出和传送。输出方式可以是生成报告、发送通知、存储到数据库等,以便用户获取决策结果。结果输出模块将结果数据传送给用户,完成整个决策引擎的流程。

还需说明的是,子规则流则可以有多个,每个子规则流中可编排多个决策算子。决策算子可根据实际业务需要进行定义和选择,常见的有普通算子、决策树算子、评分卡算子、规则流算子。普通算子可以理解为一个三元表达式:LHS?RHS1(Action1):RHS2(Action2),即在条件LHS逻辑通过的情况下,执行结果RHS1定义的Action1操作,否则执行结果RHS2定义的Action2操作;决策树算子从数据结构维度体现为一个深度为2的多叉树,决策树的每一条分支代表一种条件逻辑,当数据输入决策树后,会根据顺序逐条判断条件是否满足,若满足则返回决策结果,不满足则继续判断下一条,直到所有分支判断完成;评分卡算子数据结构类似决策树,但评分卡需要对每一条分支进行条件判断,并且每一条分支具有一个权重weight,所有分支判断完后加权求和得到输出结果。

为满足这些算子在DSL中被准确描述,可以先将算子进行分类:普通算子为符合规则流特点的算子,可以理解为规则流自带算子;决策树算子、评分卡算子以及后续可能增加的算子类型则可以归类为扩展算子,扩展算子都是由业务处理需要而产生的不同逻辑的算子;规则流则是一类特殊算子,主要用于支持嵌套。基于以上分类,DSL结构中将普通算子的LHS、RHS内容进行定义,而扩展算子和规则流算子则使用KEY来引入到规则流中。普通算子的RHS中定义了具体执行的操作Action,而操作则包含赋值、函数调用甚至远程调用等动作,由于Action的结构特点各不相同,且Action本身要求具有可扩展性,因此DSL使用type来定义操作类型,通过KEY来引用不同操作的具体内容。

另外,规则流可以是决策自动运行的核心,有了条件逻辑,才可以判断规则节点流向、规则结果操作,最终才能输出金融决策结果。因此,可以通过对EXPR表达式进行定义,即定义EXPR表达式的关键字、操作符、语法结构。DSL通过映射表来定义EXPR表达式的相关信息,映射表对EXPR表达式支持的关键字、操作符根据简化的语法结构进行了一一映射,映射过程可以理解为EXPR表达式的编译过程。

基于上述任一实施例,图3是本发明提供的决策系统的结构示意图,如图3所示,该决策系统包括:前端、后端以及数据库系统MySQL。

具体地,可以通过获取前端提供的参数信息,并通过后端实现决策引擎中的具体决策规则。后端通过获取前端的参数信息以及从数据库中获取的参数池信息,可以将此参数信息在Redis中缓存,以用于执行对应的决策规则时使用。

其中,后端包含DSL解析器、算子执行器、算子执行跟踪器、算子执行异常报告器、算子执行引擎、EXPR表达式执行引擎。DSL解析器用于对DSL进行解析和校验;算子执行器用于执行算子逻辑;算子执行异常报告器用于在算子执行过程中记录执行信息,包括算子入参、算子出参、流向判定结果、是否发生异常等信息;算子执行引擎包含普通算子、决策树算子、评分卡算子等具体的算子实现;EXPR表达式执行引擎包含Jython执行引擎、JS执行引擎等具体的执行引擎实现。

在一实施例中,图4是本发明提供的一种基于DSL的银行金融场景决策引擎实现机制的示意图,如图4所示,其中包括:参数池模块、规则流模块、决策数模块、评分卡模块。

具体地,参数池模块是为整个决策系统的算子提供数据结构定义来源。

规则流模块可以是作为核心算子模块。其中,规则流发版功能是将配置好的规则流正式发布版本到生产线上进行参与决策;规则流执行是用于生产环境的执行接口,可由业务人员手工调用执行单笔数据;规则流测试功能用于业务人员配置规则流时,判断规则流逻辑是否正确;获取规则流全量参数功能是获取规则流下属全部子节点的全量参数,对参数进行统一配置。

决策树模块可以是作为扩展算子模块,决策树主要用于解决分类问题,且问题具有离散性特征。

评分卡模块可以是作为扩展算子模块,评分卡主要用于解决信用评分、风险评估等问题,根据一系列特征为每个实例计算一个分数,用于评估其风险或信用等级;问题具有连续性,并且需要权重调整。

基于上述任一实施例,图5是本发明提供的决策装置的结构示意图,如图5所示,该装置包括:

获取单元510,获取决策规则,所述决策规则为DSL格式,所述DSL格式中的各节点对应决策规则中的各决策元素;

提取单元520,从所述决策规则中,提取决策所需的入参,以及,从所述决策规则中,提取决策所需的执行队列;

整合单元530,基于所述执行队列中各待执行节点对应在所述决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器;

执行单元540,基于所述执行器,对待决策的用户信息进行决策。

本发明实施例提供的装置,通过获取DSL格式的决策规则,从决策规则中,提取决策所需的入参,以及,从决策规则中,提取决策所需的执行队列,基于执行队列中各待执行节点对应在决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于入参和执行队列中各待执行节点对应的执行器实例,整合执行器;基于执行器,对待决策的用户信息进行决策,实现了动态获取入参,内存占用,并基于BFS算法作为流程推动算法,更进一步的降低了内存的占用,进而降低内存泄漏的风险。

基于上述任一实施例,获取单元还包括校验单元,校验单元具体用于:

获取初始决策规则,对所述初始决策规则进行结构转换,得到所述初始决策规则对应的节点执行队列;

分别对所述节点执行队列中的各节点进行节点校验,得到节点检验结果;所述节点校验包含节点类型校验、节点属性校验、节点属性值校验中的至少一种;

整合所述各节点的节点检验结果,确定所述决策规则。

基于上述任一实施例,执行单元具体用于:

基于所述待决策的用户信息,对所述执行器的待执行算子逻辑进行填充,得到待执行表达式;

对所述待执行表达式进行预处理,并调用预处理之后的待执行表达式,得到决策执行结果。

基于上述任一实施例,提取单元具体用于:

对所述决策规则进行DSL解析,得到DSL参数集树;

对所述DSL参数集树进行解析,得到DSL参数集;

对所述DSL参数集进行校验,得到所述决策规则中的各决策元素;

基于所述各决策元素,提取决策所需的入参,以及,提取决策所需的执行队列。

基于上述任一实施例,整合单元具体用于:

在所述执行队列非空的情况下,基于所述执行队列中各待执行节点对应在所述决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器;

以及,在所述执行队列为空的情况下,基于所述入参,整合执行器。

基于上述任一实施例,整合单元还具体用于:

获取扩展节点参数,将所述扩展节点参数补入所述入参;

基于执行队列中各待执行节点对应的执行器实例,执行各待执行节点的算子逻辑,获取执行结果;

基于所述入参和所述执行结果,整合所述执行器。

图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)610、通信接口(Communications Interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行决策方法,该方法包括:获取决策规则,所述决策规则为DSL格式,所述DSL格式中的各节点对应决策规则中的各决策元素;从所述决策规则中,提取决策所需的入参,以及,从所述决策规则中,提取决策所需的执行队列;基于所述执行队列中各待执行节点对应在所述决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器;基于所述执行器,对待决策的用户信息进行决策。

此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的决策方法,该方法包括:获取决策规则,所述决策规则为DSL格式,所述DSL格式中的各节点对应决策规则中的各决策元素;从所述决策规则中,提取决策所需的入参,以及,从所述决策规则中,提取决策所需的执行队列;基于所述执行队列中各待执行节点对应在所述决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器;基于所述执行器,对待决策的用户信息进行决策。

又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的决策方法,该方法包括:获取决策规则,所述决策规则为DSL格式,所述DSL格式中的各节点对应决策规则中的各决策元素;从所述决策规则中,提取决策所需的入参,以及,从所述决策规则中,提取决策所需的执行队列;基于所述执行队列中各待执行节点对应在所述决策规则中的节点类型,确定各待执行节点对应的执行器实例,基于所述入参和所述执行队列中各待执行节点对应的执行器实例,整合执行器;基于所述执行器,对待决策的用户信息进行决策。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

技术分类

06120116525048