规则引擎是什么?把业务规则从代码中分离出来执行
规则引擎(Rule Engine)是一种把业务规则从应用程序的代码中分离出来,进行独立管理和执行的软件组件。它接收一些数据作为输入,根据预先定义好的规则进行判断和推理,然后输出决策的结果或者执行相应的操作。
为什么需要规则引擎
在很多业务系统中,存在大量的业务规则,而且这些规则经常变化。比如电商平台的促销规则:“满 300 元减 50 元”“会员打九折”“新用户首单免运费”,每逢节假日都要调整;银行的贷款审批规则:根据申请人的收入、信用记录、负债情况决定是否批准、批准多少额度;保险公司的核保规则;以及各种合规检查的规则。如果把这些规则直接写在程序代码中,每次规则变化都需要程序员修改代码、测试、重新上线,周期长、成本高、容易出错,而且懂业务的人员也看不懂代码,无法直接维护规则。规则引擎把规则从代码中独立出来,用一种更接近自然语言或业务人员能理解的方式来描述,业务人员可以直接修改规则,而不需要改动程序,大大提高了灵活性。
规则引擎的组成
规则引擎通常由几个部分组成:规则库,存储所有的规则,每条规则一般包括条件和动作两部分,也就是“如果满足某些条件,那么执行某些动作”;事实,也就是需要处理的数据,比如一笔订单的金额、商品和用户的信息;推理引擎,负责把事实与规则进行匹配,找出所有条件被满足的规则,并按一定的顺序执行它们的动作。当同时有多条规则被触发时,需要冲突消解的策略来决定执行的顺序,比如按照规则的优先级。规则执行之后可能会改变事实,从而触发新的规则,这是一种前向链接的推理过程。
Rete 算法
当规则和事实的数量都很多时,如果每次都把所有的规则与所有的事实逐一比较,效率会非常低。1979 年,卡内基梅隆大学的 Charles Forgy 提出了 Rete 算法,它把所有规则的条件编译成一个网络,共享不同规则之间相同的条件,并缓存中间的匹配结果;当事实发生变化时,只需要更新受到影响的部分,而不必重新进行全部的匹配,大大提高了匹配的效率。Rete 算法成为了许多规则引擎的核心,后来还出现了它的各种改进版本。
代表性的产品和应用
常见的规则引擎包括开源的 Drools,由红帽公司支持,在 Java 生态中被广泛使用;美国宇航局在 20 世纪 80 年代开发的 CLIPS,是一种经典的专家系统工具;以及 IBM 的 ODM 等商业产品。规则引擎被广泛用于金融风控和反欺诈、保险核保和理赔、电商的促销和定价、电信的资费计算、医疗中的临床决策支持,以及各种审批流程和合规检查中。
与机器学习的结合
规则引擎和机器学习常常结合使用,各取所长:规则擅长表达明确的、必须遵守的硬性规定,比如法律法规的要求、业务的底线,而且结果可解释、可审计;机器学习擅长从大量数据中发现复杂的、难以用规则描述的模式,比如识别新型的欺诈行为。在实际的风控系统中,常常先用规则过滤掉明显的情况,再用机器学习模型对其余的情况打分,最后再用规则根据分数做出决策。在大模型应用中,也常用规则对模型的输入和输出进行检查和约束。