zen

zen

Rust开发的跨平台业务规则引擎 支持多语言集成

ZEN Engine是一个Rust编写的跨平台业务规则引擎,为NodeJS、Python和Go提供原生绑定。它支持从JSON文件加载和执行JSON决策模型(JDM),包含决策表、分支、函数等多种节点类型,可处理复杂业务逻辑。作为嵌入式引擎,ZEN Engine易于集成到不同应用中,为开发者和业务人员提供灵活的决策建模工具。

ZEN Engine业务规则引擎JSON决策模型跨平台开源Github开源项目

许可证: MIT

业务规则引擎

ZEN Engine是一个跨平台的开源业务规则引擎(BRE)。它使用Rust编写,并为NodeJSPythonGo提供原生绑定。ZEN Engine允许从JSON文件加载和执行JSON决策模型(JDM)

<img width="800" alt="开源规则引擎" src="https://yellow-cdn.veclightyear.com/2b54e442/d844e9a7-00e9-4232-870d-db3e039381a6.gif">

开源React编辑器可在我们的JDM编辑器仓库中获得。

使用

ZEN Engine被构建为可嵌入您的RustNodeJSPythonGo应用程序的BRE。它从JSON内容解析JDM。获取JSON内容的方式由您决定,例如从文件系统、数据库或服务调用。

支持的平台

Zen Engine原生可用的平台列表:

完整的**业务规则管理系统(BRMS)**解决方案:

Rust

[dependencies] zen-engine = "0"
use serde_json::json; use zen_engine::DecisionEngine; use zen_engine::model::DecisionContent; async fn evaluate() { let decision_content: DecisionContent = serde_json::from_str(include_str!("jdm_graph.json")).unwrap(); let engine = DecisionEngine::default(); let decision = engine.create_decision(decision_content.into()); let result = decision.evaluate(&json!({ "input": 12 })).await; }

更高级的用例请访问Rust文档

JSON决策模型(JDM)

GoRules JDM(JSON决策模型)是一个设计用于简化决策模型表示和实现的建模框架。

理解GoRules JDM

GoRules JDM的核心围绕着将决策模型表示为存储在JSON格式中的互连图的概念。这些图捕捉了GoRules Zen-Engine中各种决策点、条件和结果之间的复杂关系。

图由节点和边组成,边充当信息从一个节点移动到另一个节点的路径,通常从左到右。

输入节点作为所有与上下文相关数据的入口,而输出节点产生决策过程的结果。数据的流动从输入节点到输出节点,穿过所有互连的中间节点。当数据流经这个网络时,它在每个节点都会进行评估,连接决定了数据在图中的传递方向。

要查看JDM图的实际效果,您可以使用带有内置模拟器的免费在线编辑器

除了图的输入节点(请求)和输出节点(响应)外,还有5种主要节点类型:

  • 决策表节点
  • 开关节点
  • 函数节点
  • 表达式节点
  • 决策节点

决策表节点

概述

表格提供了决策过程的结构化表示,允许开发人员和业务用户以清晰简洁的方式表达复杂的规则。

<img width="960" alt="决策表" src="https://yellow-cdn.veclightyear.com/2b54e442/21f77235-08e5-46ec-b1dc-6a0147f77029.png">

结构

决策表的核心是其模式,定义了输入和输出的结构。输入包含使用ZEN表达式语言的业务友好表达式,可以适应各种条件,如相等性、数值比较、布尔值、日期时间函数、数组函数等。模式的输出决定了决策表生成的结果形式。 输入和输出通过用户友好的界面表达,通常类似于电子表格。这便于轻松修改和添加规则,使业务用户能够参与决策逻辑而无需深入复杂的代码。

评估过程

决策表按照指定的命中策略,从上到下逐行评估。 单行通过输入列从左到右评估。每个输入列代表"AND"运算符。如果单元格为空,则该列被评估为,与值无关。

如果一行中的单个单元格失败(由于错误或其他原因),则跳过该行。

命中策略

命中策略决定了基于匹配规则的结果计算方式。

评估的结果是:

  • 一个对象,如果决策表的命中策略是first并且有规则匹配。结构由输出字段定义。带点(.)的限定字段名会导致嵌套对象。
  • null/undefined,如果在first命中策略中没有规则匹配
  • 对象数组,如果决策表的命中策略是collect(每个匹配规则一个数组项),或者如果没有规则匹配则为空数组

输入

在评估规则或行时,输入列体现了AND运算符。值通常由(限定)名称组成,如customer.countrycustomer.age

输入有两种评估类型,一元表达式

一元评估

一元评估通常用于当我们想要单独比较来自传入上下文的单个字段时,例如customer.countrycart.total。当列在其模式中定义了field时激活。

示例

对于输入:

{ "customer": { "country": "US" }, "cart": { "total": 1500 } }
<img width="960" alt="决策表一元测试" src="https://yellow-cdn.veclightyear.com/2b54e442/21f77235-08e5-46ec-b1dc-6a0147f77029.png">

此评估转化为

如果 customer.country == 'US' 且 cart.total > 1000 则 {"fees": {"percent": 2}}
否则如果 customer.country == 'US' 则 {"fees": {"flat": 30}}
否则如果 customer.country == 'CA' 或 customer.country == 'MX' 则 {"fees": {"flat": 50}}
否则 {"fees": {"flat": 150}}

列表显示了输入字段中一元测试的基本示例:

输入项输入表达式
"A"字段等于"A"
"A", "B"字段为"A"或"B"
36数值等于36
< 36小于36的值
> 36大于36的值
[20..39]20到39之间的值(包括20和39)
20,39值为20或39
<20, >39小于20或大于39的值
true布尔值true
false布尔值false
任何值,甚至null/undefined
null值为null或undefined

注:完整列表请访问ZEN表达式语言

表达式评估

当我们想在单个单元格内创建更复杂的评估逻辑时,使用表达式评估。它允许我们在同一个单元格内比较来自输入上下文的多个字段。

可以通过在列配置中提供空的选择器(字段)来使用。

示例

对于输入:

{ "transaction": { "country": "US", "createdAt": "2023-11-20T19:00:25Z", "amount": 10000 } }
<img width="960" alt="决策表表达式" src="https://yellow-cdn.veclightyear.com/2b54e442/f63c02ee-8193-4765-9576-e7f847739891.png">
如果 time(transaction.createdAt) > time("17:00:00") 且 transaction.amount > 1000 则 {"status": "reject"}
否则 {"status": "approve"}

注:完整列表请访问ZEN表达式语言

输出

输出列作为决策表在评估过程中满足条件时将生成的数据蓝图。

当决策表中的一行满足其指定条件时,输出列决定了将返回的信息的性质和结构。每个输出列代表一个不同的字段,这些字段的集合形成与验证行相关的输出或结果。这种机制允许决策表精确定义和控制数据输出。

示例

<img width="860" alt="决策表输出" src="https://yellow-cdn.veclightyear.com/2b54e442/2bcbd2ac-3584-4e41-87af-b7a366b5cd92.png">

结果将是:

{ "flatProperty": "A", "output": { "nested": { "property": "B" }, "property": 36 } }

开关节点(新)

GoRules JDM中的开关节点引入了决策模型的动态分支机制,使图能够根据条件发生分歧。

条件使用Zen表达式语言编写。

通过引入开关节点,决策模型变得更加灵活和上下文感知。这种能力在需要基于不同输入的多样化决策逻辑的场景中特别有价值。开关节点有效管理图内的分支,增强了GoRules JDM中决策模型的整体复杂性和现实性,使其成为构建智能和自适应系统的关键组件。

开关节点保留传入数据而不进行修改;它将整个上下文转发到输出分支。

<img width="960" alt="开关/分支" src="https://yellow-cdn.veclightyear.com/2b54e442/dbfea572-158f-4e7f-8dde-30764e4c8bd9.png">

命中策略

开关节点有两种命中策略选项,firstcollect

在首次命中策略的情况下,图表分支到第一个匹配条件,类似于表中观察到的行为。相反,在收集命中策略下,图表扩展到所有条件成立的分支,允许分支到多个路径。

注:如果同一条件有多个边,执行顺序不保证。

可用版本:

  • Python 0.16.0
  • NodeJS 0.13.0
  • Rust 0.16.0
  • Go 0.1.0

函数节点

函数节点是JavaScript片段,允许使用JavaScript快速轻松地解析、重新映射或以其他方式修改数据。节点的输入作为函数的参数提供。函数在捆绑到ZEN引擎中的QuickJS引擎之上执行。

函数超时设置为50毫秒。

const handler = (input, {dayjs, Big}) => { return { ...input, someField: 'hello' }; };

有两个内置库:

  • dayjs - 用于日期操作
  • big.js - 用于任意精度十进制算术。

表达式节点

表达式节点作为使用Zen表达式语言将输入对象转换为替代对象的工具。在指定输出属性时,每个属性需要单独的行。这些行由两个字段定义:

  • 键 - 输出属性的限定名称
  • 值 - 通过Zen表达式语言表达的值

注:表达式节点内的任何错误都会使图停止。

<img width="960" alt="决策表" src="https://yellow-cdn.veclightyear.com/2b54e442/cc2359e0-f628-4fe8-9332-eb4f7e77c9d1.png">

决策节点

"决策"节点旨在扩展决策模型的能力。其功能是在执行期间调用和重用其他决策模型。

通过结合"决策"节点,开发人员可以模块化决策逻辑,促进复杂系统中的可重用性和可维护性。

支持矩阵

架构RustNodeJSPythonGo
linux-x64-gnu:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
linux-arm64-gnu:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
darwin-x64:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
darwin-arm64:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
win32-x64-msvc:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:

我们目前不支持linux-musl。

贡献

JDM标准正在不断发展,由于有许多公司正在使用GoRules Zen-Engine和GoRules BRMS,我们需要对其开发和路线图保持严格控制。 因此,我们目前无法接受任何代码贡献,除了帮助编写文档和增加测试。

许可证

MIT许可证

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多