一、规则引擎核心概念:从零搭建你的推理王国

大家好,我是你们的老朋友。今天咱们来聊聊规则引擎的五个核心概念——规则、事实、工作内存、议程、推理引擎。说实话,我刚入行时也被这些术语搞得晕头转向,总觉得它们像黑箱里的魔法。但做了几个风控项目后,我慢慢发现,这五个概念其实就是一套「推理流水线」的零件。

你想想看,规则引擎本质上就是个「如果-那么」的机器。但光有规则不行,你得有数据、有存储、有调度、有执行。这五个概念,缺一个都不转。

核心一句话:规则引擎 = 规则(做什么) + 事实(对谁做) + 工作内存(放哪做) + 议程(谁先做) + 推理引擎(怎么做)

1. 规则(Rule)—— 你的业务逻辑翻译官

规则是什么?说白了就是「条件 + 动作」。条件满足,动作触发。我在项目中见过最典型的规则就是风控里的「如果交易金额大于5000且用户等级为普通,则触发人工审核」。

规则通常长这样:

rule "高风险交易拦截"
    when
        $tx: Transaction(amount > 5000 && userLevel == "NORMAL")
    then
        $tx.setRiskLevel("HIGH");
        insert(new Alert("人工审核", $tx));
end

嗯,这里要注意:规则不是写死的逻辑,它是可配置的。我见过很多团队把规则硬编码在Java代码里,结果每次改规则都要发版,运维同学都快哭了。规则引擎的价值就在于——规则可以动态加载、热更新。

我的经验:规则命名一定要规范。我曾经接手过一个项目,规则名叫"rule_001"、"rule_002"... 三个月后没人知道这些规则是干嘛的。建议用「业务场景_动作_序号」的格式,比如"risk_high_intercept_01"。

2. 事实(Fact)—— 规则要处理的数据对象

事实就是规则要判断的数据。可以是交易记录、用户信息、设备指纹、历史行为……任何你想让规则引擎「看到」的东西。

事实不是随便扔进去的。它需要被「插入」到工作内存中。我习惯把事实理解成「证据」——规则引擎就像法官,事实就是呈堂证供。

// 插入事实
FactHandle handle = kieSession.insert(transaction);
// 更新事实
kieSession.update(handle, updatedTransaction);
// 删除事实
kieSession.delete(handle);

为什么会强调「插入」这个动作?因为事实一旦插入,规则引擎就会自动去匹配规则。如果你忘了插入,规则再牛也触发不了。我曾经踩过这个坑——调试了半天,发现规则没执行,结果是因为事实没塞进去。

3. 工作内存(Working Memory)—— 规则的「战场」

工作内存,你可以把它想象成一个「数据池」。所有的事实都放在这里,规则引擎在这里进行模式匹配。

我个人习惯把工作内存比作「棋盘」——事实是棋子,规则是走法。棋盘上有什么棋子,决定了哪些走法可以执行。

工作内存有几个特点:

  • 全局可见:所有规则都能访问工作内存中的事实
  • 增量更新:你可以随时插入、更新、删除事实
  • 高效匹配:引擎会用RETE算法(后面会讲)来加速匹配

避坑指南:工作内存不是无限大的。我曾经在一个项目中插入了上百万条事实,结果内存直接爆了。建议控制事实数量,或者使用分片策略。

4. 议程(Agenda)—— 规则的「调度员」

当多条规则同时满足条件时,谁先执行?这就是议程的工作。

议程本质上是一个「优先级队列」。每条规则可以设置优先级(salience),数值越高越先执行。如果没有设置,默认按规则加载顺序执行。

rule "高优先级规则"
    salience 100
    when
        // 条件
    then
        // 动作
end

rule "低优先级规则"
    salience 10
    when
        // 条件
    then
        // 动作
end

你想想看,如果没有议程,规则执行顺序就乱套了。比如风控场景中,先拦截再放行,还是先放行再拦截?顺序错了,结果天差地别。

议程还有一个重要特性——冲突解决。当两条规则优先级相同时,引擎会用策略(比如最近优先、最具体优先)来决定谁先执行。

5. 推理引擎(Inference Engine)—— 规则的「大脑」

推理引擎是规则引擎的核心。它负责:

  1. 模式匹配:把事实和规则条件进行匹配
  2. 冲突解决:通过议程决定执行顺序
  3. 规则执行:触发规则的动作
  4. 连锁反应:动作可能产生新事实,触发新规则

推理引擎有两种工作模式:

模式 特点 适用场景
前向链(Forward Chaining) 从事实出发,推导结论 风控、监控、告警
后向链(Backward Chaining) 从目标出发,寻找证据 诊断、推荐、规划

我做的风控项目基本都是前向链——交易来了,看它触发了哪些规则,然后决定怎么处理。后向链用得少,但如果你做专家系统,后向链就很有用了。

核心逻辑:推理引擎 = 匹配器 + 议程 + 执行器。匹配器找规则,议程排顺序,执行器干实事。

知识体系总览

下面这张图是我手绘的规则引擎核心概念关系图,帮你理清它们之间的协作关系:

规则引擎核心概念关系图 事实 (Fact) 数据对象 工作内存 数据存储池 规则 (Rule) 条件+动作 插入 匹配 推理引擎 模式匹配 · 冲突解决 · 执行 读取事实 议程 (Agenda) 优先级队列 排序 触发 执行结果 动作/新事实 连锁反应 事实 工作内存 规则 推理引擎 议程 执行结果

从这张图你能看到:事实插入工作内存,规则从工作内存中匹配事实,推理引擎负责匹配和执行,议程决定执行顺序,执行结果可能产生新事实,形成连锁反应。这就是规则引擎的完整工作流。

我的建议:刚开始学规则引擎,别急着写复杂规则。先把这五个概念搞清楚,画一张你自己的关系图。我当年就是这么干的——画完图,整个逻辑就通了。

好了,这一章的内容就到这里。规则引擎的五个核心概念,说白了就是一套「输入-处理-输出」的推理流水线。下一章我们会深入规则的定义和编写,到时候我会拿真实的风控案例来演示。


公众号:蓝海资料掘金营,微信deep3321