规则引擎核心概念:规则、条件、动作、规则集、规则链、决策表
说实话,很多刚接触规则引擎的同学,一上来就被各种术语搞懵了。规则、条件、动作、规则集、规则链、决策表……这些词看着都认识,但到底怎么串起来?
我当年刚入行时也踩过这个坑。有一次跟产品经理开会,他问我「规则集和规则链到底有啥区别」,我支支吾吾半天没说明白。后来我花了整整一周,把市面上主流的规则引擎源码都翻了一遍,才真正搞懂这些概念的本质。
今天我就用最直白的方式,把这些核心概念给你讲透。
规则(Rule)—— 最小的业务单元
规则是什么?说白了就是「如果……那么……」。
举个例子:
如果 用户年龄 < 18 且 交易金额 > 5000
那么 拒绝交易,并记录风险等级为「高」
这就是一条规则。它由两部分组成:条件和动作。
我个人习惯把规则比作「交通信号灯」—— 条件就是「红灯亮了」,动作就是「停车」。简单、直接、不绕弯子。
条件(Condition)—— 规则的触发器
条件就是规则的「开关」。条件写得好不好,直接决定了规则引擎的准确率。
条件通常有三种类型:
- 简单条件:单个字段的比较,比如
amount > 10000 - 复合条件:多个条件用 AND/OR 组合,比如
age > 18 AND amount > 5000 - 函数条件:调用外部函数或脚本,比如
isBlacklisted(userId) == true
嗯,这里要注意一个坑。我在项目中遇到过,有人把条件写得特别复杂,嵌套了七八层括号。结果线上出了问题,排查了整整两天才发现是条件优先级写错了。
动作(Action)—— 规则的执行结果
条件满足了,接下来就是执行动作。动作可以是:
- 拒绝/通过:最直接的结果,比如「拒绝交易」
- 标记风险:给事件打标签,比如「风险等级:高」
- 触发告警:通知风控人员介入
- 调用外部服务:比如调用黑名单查询接口
动作的设计有个原则:幂等性。同一个动作执行一次和执行多次,结果应该是一样的。我曾经因为没注意这个,导致同一个告警被重复发送了十几次,运维同事差点没把我拉黑。
规则集(Rule Set)—— 规则的集合
单条规则能做的事情有限。实际业务中,我们往往需要把多条规则组合起来,形成一个规则集。
规则集就像是一个「工具箱」,里面装了一堆规则。当事件进来时,规则集里的规则会按顺序执行。
举个例子,一个典型的交易风控规则集可能包含:
| 规则编号 | 规则描述 | 优先级 |
|---|---|---|
| R001 | 黑名单用户直接拒绝 | 最高 |
| R002 | 单笔金额超过10万需人工审核 | 高 |
| R003 | 同一设备1小时内交易超过5次触发告警 | 中 |
| R004 | 新注册用户首笔交易金额限制 | 低 |
规则集里的规则执行顺序很重要。我一般建议把「拒绝类」规则放在最前面,这样能尽早拦截高风险交易,避免后续规则做无用功。
规则链(Rule Chain)—— 规则的流水线
规则集是「平铺」的,规则链则是「串联」的。
你想想看,有些业务场景下,一条规则的输出结果,需要作为下一条规则的输入条件。这时候就需要规则链了。
规则链就像工厂里的流水线:
- 第一步:基础校验规则(检查参数是否合法)
- 第二步:黑白名单规则(检查用户是否在黑名单中)
- 第三步:行为分析规则(分析用户历史行为)
- 第四步:综合评分规则(根据前面步骤的结果计算风险分)
每一步的输出,都会传递给下一步。如果某一步直接拒绝了,后面的步骤就不用执行了——这叫「短路机制」。
决策表(Decision Table)—— 规则的表格化表达
当规则的条件和动作组合特别多时,用文字描述就变得很啰嗦。这时候决策表就派上用场了。
决策表本质上是一个二维表格:
- 行:代表不同的条件组合
- 列:代表不同的条件字段和动作结果
举个例子,一个简单的信贷审批决策表:
| 信用评分 | 收入水平 | 借款金额 | 审批结果 |
|---|---|---|---|
| > 700 | 高 | < 50万 | 通过 |
| > 700 | 中 | < 30万 | 通过 |
| 600 - 700 | 高 | < 20万 | 人工审核 |
| < 600 | 任意 | 任意 | 拒绝 |
决策表的好处是:一目了然。业务人员可以直接看懂,甚至能自己维护。我在做风控系统时,经常把复杂的规则逻辑转成决策表,然后交给业务团队去配置,省了我不少事。
这些概念怎么串起来?
说了这么多,你可能有点晕。我画了一张图,帮你理清它们之间的关系:
从这张图你能看到:事件进来后,先进入规则集,规则集里的规则按优先级执行。如果规则之间有依赖关系,就形成规则链。而决策表则是规则的另一种表达形式,适合处理复杂的条件组合。
搞清楚了这些概念,你就能理解规则引擎的核心逻辑了。说白了,规则引擎就是一个「条件判断器」—— 给它一个事件,它根据你配置的规则,输出一个决策结果。
公众号:蓝海资料掘金营,微信deep3321