规则引擎核心概念:规则、事实、动作、规则集、规则流、决策表
说实话,很多刚接触反洗钱规则引擎的朋友,一上来就被这些术语搞懵了。什么规则、事实、动作,听着像哲学概念。其实没那么玄乎。我做了这么多年反洗钱系统,今天就用大白话给你拆解清楚。
1. 规则(Rule)—— 反洗钱系统的“大脑细胞”
规则是什么?说白了就是一条判断逻辑。比如:“如果单笔交易金额超过5万元,且交易对手在制裁名单上,则触发预警”。这就是一条规则。
在代码层面,规则通常由三部分组成:
- 条件(Condition):你要检查什么?比如金额 > 50000
- 结论(Conclusion):条件成立时得出什么结论?比如“可疑交易”
- 优先级(Priority):多条规则冲突时谁说了算?
我个人习惯:把规则写成“如果...那么...”的格式。这样业务人员也能看懂,不用每次都找我翻译。
举个例子,我曾经在一个项目中遇到过这样的坑:规则条件写得太死,比如“金额 > 50000”,结果客户每天拆成49999元转账,完美绕过。后来我改成“金额 > 50000 或 连续3笔金额接近50000”,这才堵住漏洞。
2. 事实(Fact)—— 规则引擎的“输入数据”
事实就是规则要判断的数据。在反洗钱场景里,事实可以是:
- 一笔交易记录(金额、时间、对手方)
- 一个客户信息(身份、国籍、职业)
- 一个账户行为(登录IP、交易频率)
你想想看,规则引擎就像个裁判,事实就是比赛录像。没有录像,裁判怎么判罚?
避坑指南:我曾经遇到一个案例,事实数据没做时间窗口处理。结果规则判断“1小时内交易超过5次”,但事实里只传了当前这笔交易,没有历史数据。规则永远不触发。后来我强制要求:所有事实必须包含上下文信息。
3. 动作(Action)—— 规则触发的“后果”
动作就是规则条件满足后,系统要干什么。常见的动作有:
- 生成预警(最常见)
- 冻结账户
- 发送通知给合规官
- 记录审计日志
- 调用外部系统(比如公安系统)
这里有个关键点:动作可以是原子动作(比如发邮件),也可以是复合动作(先发邮件,再冻结账户,再记录日志)。
注意:动作的执行顺序很重要。我曾经见过一个系统,先发预警再冻结账户,结果预警发出去后账户已经被转空了。正确的顺序应该是:先冻结,再发预警。
4. 规则集(Rule Set)—— 规则的“收纳盒”
规则多了怎么办?总不能把所有规则堆在一起吧。规则集就是用来分组管理的。比如:
- 交易监控规则集:包含所有跟交易金额、频率相关的规则
- 客户身份规则集:包含KYC、制裁名单相关的规则
- 行为分析规则集:包含登录异常、设备指纹相关的规则
规则集的好处是:可以单独启用/禁用,方便测试和灰度发布。我习惯把规则集设计成树形结构,根节点是“反洗钱规则库”,下面分多个子集。
5. 规则流(Rule Flow)—— 规则的“执行路线图”
规则流决定了规则执行的顺序和逻辑。不是所有规则都要跑一遍的。比如:
- 如果客户是VIP,先跑VIP专属规则集
- 如果交易金额小于1000元,跳过大部分规则
- 如果命中制裁名单,直接终止后续规则
规则流可以用流程图来表示。下面是我画的一个简化版反洗钱规则流:
这张图展示了一个典型的反洗钱规则流。你看,不是所有交易都要跑全部规则的。金额小的直接放行,命中制裁名单的直接冻结,这才叫高效。
6. 决策表(Decision Table)—— 规则的“Excel版”
决策表是个好东西。当规则条件多、组合复杂时,用代码写if-else会疯掉。决策表用表格形式,一目了然。
举个例子,一个简单的反洗钱决策表:
| 条件1:金额 | 条件2:交易频率 | 条件3:对手方风险 | 动作 |
|---|---|---|---|
| > 50000 | 任意 | 高 | 预警+冻结 |
| > 50000 | 任意 | 中 | 预警 |
| > 50000 | > 3次/天 | 低 | 预警 |
| 10000-50000 | > 5次/天 | 高 | 预警 |
| 其他 | 其他 | 其他 | 放行 |
你看,5行就覆盖了所有组合。如果用if-else写,至少20行代码,还容易漏掉边界情况。
我的经验:决策表特别适合跟业务人员沟通。你把表格打印出来,他们拿笔就能改。我曾经用决策表帮业务部门梳理了200多条规则,原来他们自己都说不清楚哪些规则是重复的。
总结一下这六个概念的关系
规则是基础单元,事实是输入,动作是输出。规则集把规则分组,规则流控制执行顺序,决策表帮你管理复杂条件。这六个概念,构成了规则引擎的完整骨架。
嗯,我记得刚开始做反洗钱系统时,光理解这些概念就花了两周。现在回头看,其实没那么复杂。你只要记住一句话:规则引擎就是个“如果...那么...”的机器,其他都是锦上添花。
核心要点:
- 规则 = 条件 + 结论 + 优先级
- 事实 = 输入数据,必须包含上下文
- 动作 = 输出结果,注意执行顺序
- 规则集 = 分组管理,方便灰度
- 规则流 = 执行路线,提升效率
- 决策表 = 复杂条件,一目了然