用规则引擎替换代码

大模型模块化:推理引擎、结构化输出与领域蒸馏实战 大模型正从‘通用黑箱’走向‘可验证能力单元’,其核心演进是将模型能力解耦为轻量、确定、可编译的工程组件。这背后涉及推理引擎优化、Schema感知解码、知识蒸馏、DSL规则引擎等关键技术,解决企业级AI落地中对低延迟、高确定性、强合规与边缘部署的核心诉求。结构化输出协议确保字段级可溯源与形式化校验,领域知识蒸馏框架则实现小模型在垂直任务上超越大模型的效果。本文以金融合同审查、医疗病历摘要等真实产线场景为例,详解如何用模块化方案替代传统MaaS,在4核8G服务器上达成毫秒级响应与98%+结构化准确率。 阅读详情
作者: 何仁杰 梁冰



业务规则管理系统的基本原理是:用一个或多个规则引擎替换以程序代码"固化"在应用系统中的业务逻辑。一个完善的BRMS可以对业务规则的整个生命周期实现全程管理。

业务规则的全生命周期管理如图1所示。BRMS在应用系统中的地位与数据库管理系统(DBMS)类似,处于比较基础的位置,是其他高端应用的基石。图2是GIGA Information Group 给出的IT架构中BRMS的位置图。

业务规则管理如何实现?

业务规则

一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑。业务规则通常应该由业务分析人员和策略管理者开发和修改,但有些复杂的业务规则也可以由技术人员使用面向对象的技术语言或脚本来定制。业务规则的理论基础是:设置一个或多个条件,当满足这些条件时会触发一个或多个操作。

规则引擎

这是一种嵌入在应用程序中的组件,它的任务是把当前提交给引擎的数据对象与加载在引擎中的业务规则进行测试和比对,激活那些符合当前数据状态下的业务规则,根据业务规则中声明的执行逻辑,触发应用程序中对应的操作。

目前主流的规则引擎组件多是基于Java和C++程序语言环境。在2000年11月,Java Community Process(简称JCP) 组织开始着手起草Java规则引擎的API标准,即JSR 94 规范。参与JSR 94起草的有BEA、IBM、ILOG、甲骨文、Novell、ATG、Unisys、Fujitsu等著名的软件企业。JSR 94 在2003年11月25日正式定稿,支持JSR 94标准的规则引擎也几乎同时推向市场,包括ILOG 的JRules和Blaze的Advisor。

规则引擎的使用方式

由于规则引擎是软件组件,所以只有开发人员才能够通过程序接口的方式来使用和控制它,规则引擎的程序接口至少包含以下几种API:加载和卸载规则集的API;数据操作的API;引擎执行的API。开发人员在程序中使用规则引擎基本遵循以下5个典型的步骤:创建规则引擎对象;向引擎中加载规则集或更换规则集;向引擎提交需要被规则集处理的数据对象集合;命令引擎执行;导出引擎执行结果,从引擎中撤出处理过的数据。使用了规则引擎之后,许多涉及业务逻辑的程序代码基本被这五个典型步骤所取代。

一个开放的业务规则引擎应该可以"嵌入"在应用程序的任何位置,不同位置的规则引擎可以使用不同的规则集,用于处理不同的数据对象。此外,对使用引擎的数量没有限制。

规则引擎的内部实现

规则引擎的基本机制是:对提交给引擎的数据对象进行检索,根据这些对象的当前属性值和它们之间的关系,从加载到引擎的规则集中发现符合条件的规则,创建这些规则的执行实例。这些实例将在引擎接到执行指令时、依照某种优先序依次执行。一般,规则引擎内部由下面几个部分构成:工作内存,用于存放被引擎引用的数据对象集合;规则执行队列,用于存放被激活的规则执行实例;静态规则区,用于存放所有被加载的业务规则,这些规则将按照某种数据结构组织,当工作区中的数据发生改变后,引擎需要迅速根据工作区中的对象现状,调整规则执行队列中的规则执行实例。规则引擎的结构示意图如图3所示。

任何一个规则引擎都需要很好地解决规则的推理机制和规则条件匹配的效率问题。

当引擎执行时,会根据规则执行队列中的优先顺序逐条执行规则执行实例,由于规则的执行部分可能会改变工作区的数据对象,从而会使队列中的某些规则执行实例因为条件改变而失效,必须从队列中撤销,也可能会激活原来不满足条件的规则,生成新的规则执行实例进入队列。于是就产生了一种"动态"的规则执行链,形成规则的推理机制。这种规则的"链式"反应完全是由工作区中的数据驱动的。

规则条件匹配的效率决定了引擎的性能,引擎需要迅速测试工作区中的数据对象,从加载的规则集中发现符合条件的规则,生成规则执行实例。1982年美国卡耐基·梅隆大学的Charles L. Forgy发明了一种叫Rete算法,很好地解决了这方面的问题。目前世界顶尖的商用业务规则引擎产品基本上都使用Rete算法。

BOM赋予规则行业特性

业务规则一定是针对某种业务的,不同的业务有自己特有的业务模型——业务对象模型(Business Object Mode,简称BOM)。BOM为业务规则语言提供了绝大多数的词汇,多由业务系统分析员设计,由开发人员具体实现。从面向对象的编程角度来看,BOM就是一个简化的类图,类图中有类名、类的属性、类的方法等。这些要素都将是业务规则语言中的基本"词汇"。BOM的来源可以是Java对象模型、C++对象模型、XML Schema、Web服务定义等。

假定我们有一个简单的宠物商店购物车应用程序,在这个应用程序中,顾客能够在购物车中放入各种宠物和相关物品对象。这个应用程序的业务对象集合就可以有ShoppingCart(购物车)、Customer(用户)、Item (条目)和ItemType(条目类型)这几个类。

表述业务规则的语法就是业务规则语言。由于规则语言的使用者主要有两类:业务人员和技术人员,所以规则语言一般也分为两类:"面向程序技术"的规则语言,它技术性很强,可读性较弱,比较适合IT 技术人员使用,一般每个规则引擎开发商都有自己的一套"面向程序技术"的规则语言语法,不过OASIS组织定义了不同应用情况下的规则语言规范,包括 SRML(Simple Rule Markup Language),BMRL(Business Markup Rule Language)和RuleML(Rule Markup Language)等;"面向业务"的规则语言,它是业务人员使用的语言,必须具备非技术性和可定制性,通常它需要经过"翻译"之后才能被规则引擎解析。 BRMS必须提供这种"翻译"机制,而开发人员要实现从"面向业务"规则语言到"面向程序"规则语言的映射。

"面向业务"的规则语言无论从语法上还是语句结构上都可能千变万化,不同行业可能有自己的"行话"。一个好的BRMS应该提供一个完善的规则语言框架,能够迅速地为业务人员定制不同的"行话",否则业务人员还是无法真正成为业务规则的主人。

"单纯"的规则如何互连?

业务规则有一个非常明显的特性:单纯性。每个业务规则只描述自己特有的条件和满足条件的操作,业务规则本身并不关心它与其他规则的关系,如优先关系、互斥关系、包含关系等。每个业务规则本身可以有自己的属性,称元信息,可以用来处理规则之间相关性,例如引擎可以使用规则的优先级来依序执行规则的操作。

有些BRMS还提供一种称为"规则流"的定制功能。规则流是一个图表,定义了解决问题或执行业务流程的顺序。类似于统一建模语言(UML)的活动图,由一组任务以及定义这些任务之间执行顺序的转换逻辑组成。一个转换由条件控制,只有当该限制条件为"真"时才能完成这种转换。

这些任务可以是规则任务、函数任务或子规则流任务。规则任务包含一组要作为任务主体执行的规则,规则的执行逻辑由用户设置的任务属性严格控制。这些属性决定规则的排序、规则触发策略、执行算法等;函数任务包含要作为任务主体执行的脚本代码;子规则流任务则包含任务开始后将依次执行的子规则流。

为了方便开发人员和业务人员管理业务规则,BRMS必须提供具有直观用户界面的工具来实现业务规则管理。规则管理工具至少应该具备以下功能:规则的定制和编辑、规则流的定制、决策表形式的规则定制、规则的查询、规则有效期限的控制、规则的组织结构、规则模板的定制、规则库访问权限的控制、规则变更历史的记录、规则文档的管理等。

·小资料2·

业务规则管理系统其实是一组工具集,它包括:规则引擎、规则库、规则语言框架、规则管理集成开发环境。业务规则管理系统的基本工作原理如图所示。

规则引擎(Rules Engine)

是执行业务规则的软件组件,它嵌入在程序中,是业务规则管理系统的核心元素。规则引擎的类型有:简单型、数据中心型和面向事务型。

规则库(Rules Repository)及其服务机制

用于存储规则和规则元数据(Meta Data)以及与规则有关的属性。它提供一组工具用于存储、分类、查询、版本控制、权限控制、测试、提交等,规则的状态和有效性可以跟踪。规则库可以依托文件系统或数据库管理系统。

规则语言框架(Rules Language Framework)

规则语言一般分为两类:"面向程序技术"的规则语言,使用者是技术人员;"面向业务"的规则语言,使用者是业务人员。规则语言框架则为定制"面向业务"的规则语言提供支持。

规则管理工具(Rules Management Tool)

用于管理、创建、修改和部署业务规则的图形化工具,易用性强,除了开发人员外,业务人员也可以使用这套图形化工具实现对规则的管理。

规则集成开发环境(Rules IDE)

一般规则集成开发环境只有规则编辑器,而高级的规则集成开发环境可以实现对规则和规则库的管理:如规则的创建、分类、检索、修改、版本控制、权限管理等;甚至可以实现对多个规则引擎的"在线"调试;对规则集合进行冲突检查等。

一个完整的BRMS应该提供规则管理(Rules Management)、规则部署(ules Deployment)、规则分析(Rules Analysis)、规则定制和设计(Rules Design and Authoring)等功能
DIY天文摄影:如何用NMP溶剂安全去除佳能CMOS传感器的拜耳滤镜(附详细步骤) 本文为天文摄影爱好者提供了一份详尽的DIY指南,介绍如何使用NMP溶剂安全去除佳能CMOS传感器的拜耳滤镜,将其改造为高灵敏度单色相机。文章深入剖析了NMP溶剂的作用原理与关键风险,并系统性地拆解了从材料准备、分步操作到后期验证的完整实践流程,旨在帮助具备动手能力的爱好者实现深空天体摄影的进阶目标。 阅读详情

相关推荐

智能客户关系AI系统日志脱敏架构:敏感信息识别与替换方案(架构师实战)

系统日志里存着用户的手机号、身份证号、收货地址、聊天记录;运维人员需要查日志排障,但不能看到完整敏感信息;黑客攻击日志系统会导致用户隐私泄露,面临巨额罚款。本文的核心目的:解决“CRM系统日志中敏感信息的精准识别与安全替换”问题,给出可落地的架构设计+代码实现。范围:覆盖日志脱敏的全流程(收集→预处理→识别→替换→存储),重点讲解“识别”替换”两个关键环节的技术方案。先讲“为什么要做日志脱敏”(背景);再讲“什么是日志脱敏”(核心概念);接着讲“怎么识别敏感信息”(规则+机器学习);

小白菜的博客 945

shuffle规则

shuffle规则应用于银行系统一套规则体系

Open3D 计算点云配准的旋转平移误差

通过计算旋转误差平移误差来量化配准结果与真实变换之间的偏差。

点云侠的博客 228

规则引擎】规规则引擎的介绍与项目实践( 基于json-rule-engine)

规则引擎介绍、node规则引擎json-rule-engine介绍与项目实践

Harvay的博客 4365

DA11 – 深入业务规则(Business Rules)

 DA11 – 深入业务规则(Business Rules)综述业务规则(BRs)是一个包含业务逻辑封装的概念,从前台的终端用户接口及后台的终端数据库分离处理. Data Abstract通过使用业务帮助类(Business Helper Classes)实现了这个概念. Delphi的属性/方法/事件范例是一个好原型但是对于实际开发却不总是适用.问题是事件处理与窗体或数据模块绑定

henreash的专栏 5493

电子商务系统之规则引擎

构建电信计费系统、保险系统、金融等交易系统之所以复杂,除了对诸如高性能、高可靠性、高可用性、高安全性、高扩展性的要求外,另外至关重要的原因是这些 领域存在大量的业务规则,这些规则千差万别,甚至是相互冲突的(瞧瞧电信资费就知道有多么复杂)。在市场驱动的情况下,系统架构模型必须对客户、竞争对 手、合作伙伴整个市场情况的各种变更及时响应,同时将这些变更产生的需求作为业务规则体现到系统...

john521 781

【亲测免费】 推荐开源项目:NL2code - 自然语言到可执行代码的转换神器

推荐开源项目:NL2code - 自然语言到可执行代码的转换神器 项目介绍 NL2code是一个革命性的开源项目,它使用神经网络模型将自然语言描述转化为可执行的编程代码。这个项目源于2017年 ACL 大会上发表的研究成果,由 Pengcheng Yin Graham Neubig 共同提出。通过训练解码算法,NL2code 能够理解生成符合语法规则代码,为开发者提供了一种新颖而直观的方...

gitblog_00001的博客 1100

快速入门规则引擎

当我们在对复杂的业务进行开发时,程序本身逻辑代码业务代码互相嵌套、错综复杂,同时维护成本高,可拓展性差。可降低复杂业务逻辑组件复杂性、降低应用程序的维护可扩展性成本的组件!如下图:规则引擎实际上就是一个推理引擎,用于匹配facts(事实,我们可以理解为输入数据)rules(规则),以推出结论。

知道自己不要什么,不管多么大的诱惑(欢迎关注:职谷智享) 2476

expr-eval高级功能:表达式简化、变量替换代码生成

expr-eval是一个强大的JavaScript数学表达式解析器,它不仅能够解析计算数学表达式,还提供了表达式简化、变量替换代码生成等高级功能,帮助开发者更高效地处理复杂的数学逻辑。本文将深入探讨这些高级功能的使用方法实际应用场景。 ## 一、表达式简化:让复杂公式变简洁 ✨ 表达式简化功能可以自动将复杂的数学表达式转换为更简洁的形式,同时保持计算结果不变。这对于优化表达式性能、提高可

gitblog_00127的博客 957

php模板引擎如何实现,PHP模板引擎如何实现

假设使用标签形式作为模板语法在解析环节我想到两种实现方式1. 利用正则获取标签内容,然后将标签进行规则性的替换并使用eval进行解析,解析完成后再用正则进行替换2. 利用正则获取标签内容,然后将标签进行规则性的替换替换完成后使用cli执行脚本并返回内容现在的问题是,不太清楚整个流程这两种实现方式是否正确,或者有别的方式。谢谢回复内容:假设使用标签形式作为模板语法在解析环节我想到两种实现方式1....

weixin_36246029的博客 229

Memos 前端空状态精灵设计:像素鸟 SVG 瓦片地图与 steps(N) 动画实现

本文基于 Memos 仓库中的 [Placeholder 精灵设计规范](https://link.gitcode.com/i/1cc33211dc19c6fdc46712b3a51ebd8a),讲解其像素鸟动画资源的画布规格、命名规则、帧数策略与风格约束,并结合 [精灵注册表](https://link.gitcode.com/i/d4be9e8c58efd73f0eb27f395f9444bc

gitblog_00514的博客 903

Rerast工作原理:深入理解Rust语法树匹配与代码替换机制

Rerast是一款基于规则的Rust代码转换工具,通过解析Rust语法树(AST)实现精准的代码匹配与替换。本文将从核心机制、工作流程实际应用三个维度,揭开Rerast如何通过语法树操作实现自动化代码重构的神秘面纱。 ## 一、Rerast核心技术架构 ### 1.1 HIR语法树解析引擎 Rerast采用Rust编译器内部的HIR(High-Level Intermediate Repres

gitblog_01166的博客 276

【JVS更新日志】低代码规则引擎、智能BI、逻辑引擎3.26更新说明!

JVS是企业级数字化服务构建的基础脚手架,主要解决企业信息化项目交付难、实施效率低、开发成本高的问题,采用微服务+配置化的方式,提供了低代码+数据分析+物联网的核心能力产品,并构建了协同办公、企业常用的管理工具等,所有的应用与能力采用模块化构建,按需开箱使用。

1211

推荐开源神器:PolyglotPiranha - 跨语言代码转换工具

在软件开发中,自动化代码修改重构是提高效率的关键。今天,我们向您推荐一款由Uber开发的轻量级代码转型工具——PolyglotPiranha。这款强大的工具特别适合大规模清理过时的功能标志,让您的代码更整洁、更高效。 ## 项目介绍 PolyglotPiranha是一个灵活的代码转换工具集,支持以Python库或命令行接口的形式使用。它专注于消除遗留功能标志,通过定义规则边缘关系,实现对特

gitblog_00041的博客 413

Vencord消息变量替换系统:自动化消息处理的终极指南

你是否厌倦了在Discord中重复输入相同的消息内容?是否希望能够在发送消息时自动填充动态信息?Vencord的TextReplace插件正是为你量身打造的解决方案!本文将深入解析这个强大的消息变量替换系统,帮助你彻底告别重复劳动。 ## 什么是Vencord TextReplace插件? TextReplace是Vencord Discord客户端修改版中的一个核心插件,它允许用户创建自定义...

gitblog_00870的博客 819

终极指南:3种JavaScript语音规则技巧让Android TTS朗读更智能自然

还在为Android TTS朗读效果生硬而烦恼吗?tts-server-android的语音规则功能让文本处理变得简单高效!通过JavaScript脚本引擎,你可以自定义语音处理逻辑,实现智能化的朗读效果优化,让TTS朗读更自然、更智能。本文将带你深入了解如何利用JavaScript自定义语音规则,解决TTS朗读中的常见问题。 ## 为什么需要语音规则?🤔 传统的TTS引擎通常只能按固定模式

gitblog_00080的博客 398

自动产生fsm代码的工具_代码自动生成工具

构建支持多种数据库类型的代码自动生成工具背景:一般的业务代码中写来写去,无外乎是先建好model,然后针对这个model做些CRUD的操作。(主要针对单表的业务操作)针对于数据库dao、mapper等的代码自动生成已经有了mybatisGenerator这种工具,但是针对于controller、service这些我们现在的接口api一般遵循的是restful风格,因此这些也是有规则可循的。举例有个...

weixin_30124601的博客 427

java模板velocity,java模板引擎:velocity

在java中,同类型的模块代码结构往往是相似的。以Spring为例,一个工程都会包含controller,service,dao,modal等类型的代码。而dao用于数据库的访问,不同的表所对应的dao类都会有get,set,select,delete等操作,若手动编写dao,则这些dao有很多代码是类似的。于是希望自动生成这部分代码。一个非常直观的思路就是:写一个String模板,然后使用字符串...

weixin_39984403的博客 386

Rerast:革命性Rust代码转换工具,用规则轻松重构代码的终极指南

Rerast是一款针对Rust代码的搜索/替换工具,它通过规则实现代码转换,曾是Rust开发者重构代码的得力助手。尽管目前该项目已被标记为 deprecated,但了解其核心功能使用方法仍对理解Rust代码转换工具有重要意义。 ## 🌟 Rerast的核心功能与优势 Rerast的核心在于使用规则进行代码转换。一个规则包含搜索模式替换模式,能够帮助开发者快速、准确地对Rust代码进行批量

gitblog_00527的博客 955

【大作业-54】基于yolo的电力安全绳佩戴检测源码+数据集+模型+视频讲解.zip

作品详细介绍请看这里:https://blog.csdn.net/echoson/category_12754211.html

上一篇: Java规则引擎的集成
下一篇: ILOG 市场开发部总监 Joe Boissy 眼中 日新月异的业务规则
csdnloading
博客等级 码龄11年 0粉丝 59原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值