4. 规则语法设计:基础语法(IF-THEN)、复合条件(AND/OR/NOT)、变量与函数调用
好,咱们今天聊点实在的。规则语法设计,说白了就是给风控系统写「规矩」。你想想看,一个交易进来,系统得判断它是不是有问题。怎么判断?靠的就是我们写的这些规则。
我个人习惯把规则语法分成三个层次:基础判断、条件组合、能力扩展。咱们一层一层剥开看。
4.1 基础语法:IF-THEN 的哲学
IF-THEN 是所有规则引擎的基石。没有它,后面的一切都免谈。它的逻辑其实特别简单:如果条件成立,就执行动作。
我在项目中遇到过最典型的场景——判断一笔交易是否来自高风险地区。代码写出来就是这样的:
IF transaction.country == "高风险地区A" THEN
result = "拒绝"
END IF
嗯,这里要注意。IF-THEN 的「条件」部分,本质上是一个布尔表达式。它要么是 true,要么是 false。没有中间态。
但实际业务中,哪有这么简单?你想想看,一个用户可能同时触发多个风险点。这时候就需要更复杂的结构了。
4.2 复合条件:AND/OR/NOT 的实战用法
单一条件太脆弱了。真实的风控场景,往往是多个条件交织在一起。这时候 AND、OR、NOT 就派上用场了。
AND(与):所有条件同时满足,才算命中。我曾经在反欺诈规则里用过这样一个组合:
IF transaction.amount > 10000
AND user.registration_days < 7
AND device.is_emulator == true THEN
result = "人工审核"
END IF
这个规则的意思是:大额交易 + 新注册用户 + 模拟器设备。三个条件同时成立,基本可以判定是欺诈行为。少一个都不行。
OR(或):只要有一个条件满足,就算命中。这个在风控里用得特别多,因为风险往往是「多因一果」的。
IF user.ip_country != user.phone_country
OR user.ip_country != user.billing_country THEN
result = "增强验证"
END IF
你看,IP 地址和手机号国家不一致,或者和账单地址国家不一致,只要有一个对不上,就触发增强验证。这就是 OR 的典型用法。
NOT(非):取反操作。说实话,NOT 在风控规则里用得相对少一些,但用好了特别巧妙。
IF NOT user.is_verified THEN
result = "限制交易"
END IF
说白了就是:只要用户没通过实名认证,就限制交易。简单粗暴,但有效。
4.3 变量与函数调用:让规则活起来
光有 IF-THEN 和逻辑运算符,规则还是太死板。你想想看,每个交易的用户画像、设备指纹、行为序列都不一样。怎么处理?靠变量和函数。
变量:规则引擎里的变量,其实就是从交易上下文中提取出来的「特征」。比如:
transaction.amount:交易金额user.age:用户年龄device.fingerprint:设备指纹history.fraud_count_30d:近30天欺诈次数
这些变量从哪里来?从数据接入层来。我们在设计规则语法时,要提前定义好变量字典。不然规则写出来,引擎找不到变量,那就尴尬了。
函数调用:函数是规则引擎的「外挂」。有些逻辑用 IF-THEN 写起来太啰嗦,或者根本写不了,这时候就需要函数。
举个例子,判断一个邮箱是不是临时邮箱:
IF is_temp_email(user.email) == true THEN
result = "拒绝"
END IF
这个 is_temp_email() 就是一个函数。它背后可能调用了第三方 API,也可能查了本地黑名单库。但规则引擎不关心这些,它只关心返回值。
我在项目中遇到过最常用的函数类型:
| 函数类别 | 示例 | 说明 |
|---|---|---|
| 字符串处理 | contains(), regex_match() |
匹配关键词、正则表达式 |
| 数值计算 | abs(), round() |
金额取整、差值计算 |
| 时间函数 | date_diff(), hour_of_day() |
判断交易时间、间隔 |
| 风控专用 | risk_score(), device_risk() |
调用风控模型评分 |
4.4 语法设计的整体架构
说了这么多,咱们用一张图把整个语法体系串起来。下面是我自己设计的规则语法架构图:
这张图把规则语法的三个核心要素串起来了。你从顶层往下看:一条规则,本质上就是「条件 + 动作」。条件可以是基础的变量判断,也可以是 AND/OR/NOT 组合出来的复合条件,还可以是调用函数得到的结果。
我个人建议,在设计规则语法时,优先保证基础语法的简洁性。别一上来就搞花里胡哨的语法糖。先把 IF-THEN 跑通,再把 AND/OR/NOT 加上,最后再考虑函数扩展。这样迭代起来最稳。
- IF-THEN 是规则的原子单位,必须稳定可靠
- AND/OR/NOT 是条件组合的「胶水」,注意优先级
- 变量是规则的「数据源」,函数是规则的「能力外挂」
- 语法设计要分层,先基础后扩展
嗯,关于规则语法的基础部分,今天就聊这么多。下一节咱们会深入讲讲规则引擎的执行流程和性能优化。到时候我会分享一些线上调优的真实案例,保证干货满满。