- 规则引擎是什么
- 规则的抽象模型
- 三种主流架构
- 如何支持可视化 + 高级条件 + 多规则组合
- 如何执行(条件计算、优先级、冲突解决)
- 实际代码示例(Node.js / Java 通用思想)
- 适用于 AI Agent 的规则执行方式
🧩 1. 什么是规则引擎?
规则引擎(Rule Engine)是把 业务逻辑从代码中剥离,改为以“规则”驱动执行的系统。
比如:
IF 客户年龄 > 60 AND 账户余额 > 100000 THEN 标记为高净值用户
IF 订单金额 > 500 THEN 赠送优惠券
IF 用户行为 = 连续三天登录 THEN 启动成长任务
不再写死在代码里,而是配置化:
- 可视化
- 可修改
- 支持热更新
- 业务方可编辑
🎯 2. 规则引擎的核心抽象模型
无论你怎么做,规则引擎都可以抽象成:
Rule {
id: string,
priority: number, // 执行优先级
conditions: Condition[], // AND / OR 条件集合
actions: Action[] // 满足条件后的动作
}
条件 Condition
Condition {
fact: string, // 数据源,例如 user.age
operator: string, // >, <, ==, in, between ...
value: any // 值
}
动作 Action
Action {
type: string, // 比如 send_coupon / update_tag / reject_order
params: object
}
你会发现:
规则引擎本质是:
一个解释规则 + 执行动作的引擎****
🔨 3. 三种规则引擎架构(根据复杂度)
① 简单规则引擎(适用于前端、Node、小型系统)
特点:
-
JSON 写规则
-
if/else 计算
-
顺序执行
适合场景:
-
表单校验
-
营销活动
-
简单风控
② AST + 解释器模式规则引擎(中型系统)
特点:
-
条件会被转换为 AST(抽象语法树)
-
支持复杂公式、嵌套计算
适合:
-
折扣计算
-
复杂筛选
-
工作流条件
技术点:类似 Excel 公式的执行器。
③ Rete Algorithm(大型系统)
这是 Drools、Clara 等专业引擎使用的算法。
特点:
-
超高速匹配大量规则
-
规则之间共享部分条件,提高效率
-
能处理 10 万条以上规则
适合:
-
信贷评分模型
-
反欺诈风控(高并发)
-
大型推荐系统
你可能暂时用不到 Rete,但理解其思想即可。
🧠 4. 规则的执行流程(通用)
所有规则引擎都有类似执行流程:
输入事实 Facts → 条件匹配 → 执行动作 → 输出结果
流程细化:
-
载入规则集****
-
从上下文中取 Facts(数据)****
-
按优先级排序
-
对每条规则执行:
- AND 条件全部满足?
- OR 条件任意满足?
-
如果匹配成功 → 执行动作
-
输出执行日志 / 新 Fact
-
可根据 mode 决定停止或继续:
- first-match
- all-match
- conflict-resolve
🧰 5. 条件模型设计(支持复杂表达式)
通常你要支持以下条件:
A > 10
A < 20
A between [1,5]
A in ["A","B","C"]
(A > 10 AND B < 5) OR C == true
可以用树结构表示:
ConditionGroup (operator: AND/OR)
- Condition 1
- ConditionGroup (operator: OR)
- Condition 2
- Condition 3
🎨 6. 如何做可视化规则?
三种方案:
① 表格式(低复杂度)
类似后台营销系统的规则:
| 字段 | 操作符 | 值 |
|---|---|---|
| age | 18 | |
② 公式编辑器(中复杂度)
类似 Excel:
IF age > 18 AND (balance > 10000 OR level > 3)
可将公式解析成 AST,然后执行。
③ 可视化节点式(中/高级)
类似 Node-RED 或者 AWS Step Functions:
用户数据 → 条件节点 → 动作节点
非常适用于业务人员。
🚀 7. 动作执行器设计
动作通常是:
-
打标(标签系统)
-
消息推送
-
调用外部 API
-
给用户发券
-
更新数据库字段
-
触发工作流下一节点
动作设计成插件化结构:
ActionRegistry.register("send_coupon", sendCouponAction)
ActionRegistry.register("add_tag", addTagAction)
然后规则执行时:
for action in rule.actions:
ActionRegistry[action.type].execute(action.params)
可扩展性极强。
🧩 8. 冲突解决策略(专业规则引擎才有)
如果多条规则都命中怎么处理?
-
优先级高先执行(most common)****
-
只执行第一条命中规则****
-
执行所有命中规则****
-
权重求和 → 根据权重选择动作(AI 推荐常用)
你可以根据场景决定策略。
🏗️ 9. 实际代码示例(Node.js 简版规则引擎)
function evaluateCondition(facts, condition) {
const left = facts[condition.fact];
const op = condition.operator;
const right = condition.value;
switch (op) {
case ">": return left > right;
case "<": return left < right;
case "==": return left == right;
case "in": return right.includes(left);
case "between": return left >= right[0] && left <= right[1];
}
}
function evaluateRule(facts, rule) {
return rule.conditions.every(cond => evaluateCondition(facts, cond));
}
function executeActions(rule) {
rule.actions.forEach(act => {
console.log("Execute action:", act.type, act.params);
});
}
function runRules(facts, rules) {
rules.sort((a, b) => b.priority - a.priority);
for (let r of rules) {
if (evaluateRule(facts, r)) {
executeActions(r);
}
}
}
🧠 10. 和 AI Agent 结合(非常前沿的做法)
大模型可以用于:
LLM 做规则生成
业务说一段话:
年龄 > 30 并且是会员,就给他发 10 元券
LLM 转成结构化规则:
{
"priority": 10,
"conditions": [
{"fact": "age", "operator": ">", "value": 30},
{"fact": "is_member", "operator": "==", "value": true}
],
"actions": [
{"type": "send_coupon", "params": {"amount": 10}}
]
}
LLM 做规则解释(review)
LLM + 规则引擎做自动决策(混合智能)
这现在是大趋势。
📌 总结:规则引擎怎么设计?
核心理念:规则 = 条件 + 动作,规则引擎就是解释规则并执行动作的系统。****
设计时关注:
- 规则模型(结构化 JSON)
- 条件解析(AST / 公式)
- 执行动作(插件化)
- 优先级 / 冲突策略
- 可视化 UI
- 可动态更新(热插拔)
- 全日志(审计非常重要)
- 与 AI 结合生成规则 / 分类规则 / 校验规则
如果你愿意,我还能深入讲:
- 带有 DSL(领域语言) 的规则引擎如何做
- 如何实现 Excel 风格公式引擎****
- 如何实现 百万级规则执行(Rete)****
- 如何实现 拖拽式规则编辑器 UI****
- 如何基于规则引擎构建“风控系统”或“营销系统”