3、规则引擎核心组件:规则库、事实库、推理引擎、工作内存

规则引擎这东西,说白了就是一套「如果…那么…」的自动化执行系统。很多同学刚接触时,总觉得它很神秘。其实拆开来看,核心就四个组件:规则库、事实库、推理引擎、工作内存。我做了这么多年风控系统,这四个组件就像四个齿轮,咬合得好,系统就稳;咬合不好,早晚出问题。

3.1 规则库——存放「如果…那么…」的地方

规则库,就是所有业务规则的集合。你想想看,一个信贷审批系统里,可能有上千条规则:

  • 如果年龄小于18岁,则拒绝
  • 如果近3个月逾期次数大于3次,则拒绝
  • 如果收入大于1万且工作稳定,则通过

这些规则不能散落在代码里,否则改一条规则就要重新上线。所以我们需要一个专门的「仓库」来管理它们。

我个人习惯,规则库至少要有三个维度:

  • 规则ID:唯一标识,方便追踪
  • 优先级:决定执行顺序,避免冲突
  • 有效期:有些规则是临时性的,比如双十一活动规则

我在项目中遇到过一个问题:两条规则同时触发了,一条说「通过」,一条说「拒绝」。结果系统直接崩溃了。后来我们加上了优先级和冲突检测机制,才彻底解决。

3.2 事实库——存放「当前是什么情况」

事实库,就是当前要处理的数据。比如一个用户申请贷款,他的年龄、收入、征信记录、工作信息,这些都是「事实」。

事实库的特点是:

  • 临时性:处理完就清空,不会永久保存
  • 结构化:通常用键值对或对象表示
  • 可变更:推理过程中可能会产生新的事实

避坑指南:我曾经在事实库里放了一个超大对象,结果推理引擎跑了一个小时还没结束。后来发现,事实库里的数据越精简越好,只放规则需要用的字段就够了。

3.3 推理引擎——真正的「大脑」

推理引擎是规则引擎的核心。它负责把规则库里的规则和事实库里的数据做匹配,然后决定执行哪些规则。

常见的推理方式有两种:

推理方式 说明 适用场景
前向推理 从事实出发,匹配规则,得出结论 风控审批、实时决策
后向推理 从目标出发,反向寻找支持的事实 诊断系统、专家系统

大部分风控系统用的是前向推理。为什么呢?因为风控场景里,我们拿到用户数据,然后一条条规则去匹配,看命中哪些规则,最后给出决策。这天然就是前向推理。

推理引擎还有一个关键机制——冲突解决。当多条规则同时满足条件时,到底先执行哪条?我常用的策略是:

  • 按优先级排序,高的先执行
  • 按规则复杂度排序,简单的先执行
  • 按规则创建时间排序,新的优先

注意:推理引擎不是越快越好。有些场景需要「慢推理」,比如反欺诈场景,需要把多条规则组合起来分析,太快反而容易漏掉风险。

3.4 工作内存——推理过程中的「草稿纸」

工作内存,也叫工作区。它是推理引擎在执行过程中临时存放数据的地方。

你可以把它想象成一张草稿纸:

  • 规则匹配时,中间结果先放这里
  • 规则执行时,新产生的事实也放这里
  • 推理结束后,清空工作内存

工作内存和事实库有什么区别?我打个比方:事实库是「输入数据」,工作内存是「计算过程中的临时数据」。比如:

// 事实库:用户输入
{
  "age": 25,
  "income": 15000,
  "overdue_count": 2
}

// 工作内存:推理过程中产生的中间结果
{
  "risk_score": 65,
  "level": "medium",
  "need_manual_review": true
}

嗯,这里要注意:工作内存里的数据,规则之间是可以共享的。所以如果你不小心,一条规则改了工作内存里的值,另一条规则可能就出错了。我建议给工作内存加一个「只读」和「可写」的标记,避免误操作。

3.5 四个组件如何协作?

光说理论不行,我们来看一个实际的流程。下面这张图是我在项目中常用的规则引擎架构:

规则引擎核心组件协作流程 事实库 用户数据输入 推理引擎 匹配规则 + 执行 冲突解决 工作内存 中间结果暂存 规则库 规则定义 + 优先级 决策输出 通过/拒绝/人工 流程:事实库输入 → 推理引擎匹配规则库 → 工作内存暂存中间结果 → 输出决策

你看,整个流程是这样的:

  1. 用户数据进入事实库
  2. 推理引擎从事实库读取数据,同时从规则库加载规则
  3. 推理引擎进行匹配,中间结果写入工作内存
  4. 工作内存里的数据可能触发新的规则,形成链式推理
  5. 最终推理引擎输出决策结果

我的经验:这四个组件最好独立部署。规则库可以单独做版本管理,事实库可以做成缓存,推理引擎可以水平扩展。我曾经把规则库和推理引擎耦合在一起,结果每次改规则都要重启服务,那叫一个痛苦。

3.6 实际项目中的注意事项

最后,分享几个我在项目中踩过的坑:

  • 规则库不要太大:超过1000条规则时,推理性能会明显下降。建议按业务域拆分规则库。
  • 事实库要防注入:用户输入的数据可能包含恶意内容,一定要做校验和清洗。
  • 工作内存要监控:如果工作内存里的数据越来越多,说明可能有死循环或者规则写错了。
  • 推理引擎要可观测:每条规则是否命中、执行时间、输出结果,都要有日志记录。

嗯,规则引擎的核心组件就这些。说白了,它们就是一套「输入-处理-输出」的流水线。你只要把每个组件的职责搞清楚,剩下的就是根据业务需求去填充具体内容了。

专注资料整理