目錄
一、什么是 QLExpress?
二、推薦系統中的規則腳本應用
1 場景描述
2 推薦規則腳本(QLExpress)
3 系統實現
4 執行結果
5 推薦系統應用建議
三、風控系統中的規則判定
1 場景描述
2 風控規則腳本(QLExpress)
3 系統實現
4 執行結果
5 風控系統應用建議
四、設計建議
在大型系統中,規則引擎的存在使業務邏輯從代碼中解耦出來,使得系統具備更高的靈活性與可維護性。阿里巴巴開源的 QLExpress 正是一款輕量級、高性能、可擴展的 Java 表達式引擎,廣泛應用于推薦、風控、營銷等場景。
本文將圍繞兩個典型業務場景:推薦系統 與 風控系統,詳細演示如何使用 QLExpress 構建腳本型規則體系,實現“可配置、可執行、可熱更新”的規則邏輯管理。
一、什么是 QLExpress?
QLExpress 是阿里巴巴開源的規則引擎工具,核心目標是通過類 Java 的腳本語法實現業務規則的動態編寫與執行,具備如下特性:
特性 | 說明 |
---|---|
輕量高性能 | 不依賴字節碼增強或復雜 AST,內存占用小、性能優越 |
表達式能力強 | 支持 if , for , while , return 等控制結構 |
支持變量注入 | 可注入上下文對象、Java Bean、自定義函數 |
可運行時加載 | 可從數據庫或配置中心動態加載腳本規則 |
安全可控 | 可配置沙箱環境,限制訪問對象與方法 |
二、推薦系統中的規則腳本應用
1 場景描述
推薦系統通常需要基于用戶畫像、行為等動態特征生成推薦策略。以如下規則為例:
-
新用戶 + 喜好“運動” → 推薦“運動入門課程”
-
活躍度高 → 推薦“高階訓練計劃”
-
年齡小于 18 → 推薦“青少年專屬內容”
這些規則變化頻繁、迭代快速,采用腳本型規則管理更合適。
2 推薦規則腳本(QLExpress)
if (isNewUser && tags.contains("運動")) {return "推薦:運動入門課程"; } else if (activityScore > 80) {return "推薦:高階訓練計劃"; } else if (age < 18) {return "推薦:青少年專屬內容"; } else {return "推薦:通用內容"; }
3 系統實現
import com.ql.util.express.DefaultContext; import com.ql.util.express.ExpressRunner; import java.util.Arrays; import java.util.List; ? public class RecommendDemo {public static void main(String[] args) throws Exception {// 模擬用戶畫像UserProfile user = new UserProfile(17, Arrays.asList("運動", "學習"), 60, true); ?// 上下文注入DefaultContext<String, Object> context = new DefaultContext<>();context.put("age", user.age);context.put("tags", user.tags);context.put("activityScore", user.activityScore);context.put("isNewUser", user.isNewUser); ?// 推薦規則腳本String script = ""+ "if (isNewUser && tags.contains(\"運動\")) {\n"+ " return \"推薦:運動入門課程\";\n"+ "} else if (activityScore > 80) {\n"+ " return \"推薦:高階訓練計劃\";\n"+ "} else if (age < 18) {\n"+ " return \"推薦:青少年專屬內容\";\n"+ "} else {\n"+ " return \"推薦:通用內容\";\n"+ "}"; ?Object result = new ExpressRunner().execute(script, context, null, true, false);System.out.println("推薦結果:" + result);} ?static class UserProfile {int age;List<String> tags;int activityScore;boolean isNewUser;UserProfile(int age, List<String> tags, int activityScore, boolean isNewUser) {this.age = age;this.tags = tags;this.activityScore = activityScore;this.isNewUser = isNewUser;}} }
4 執行結果
推薦結果:推薦:運動入門課程
5 推薦系統應用建議
-
后臺配置推薦規則腳本,實時熱更新;
-
按用戶群體拆分規則(新用戶/老用戶);
-
日志記錄命中規則,便于推薦效果分析。
三、風控系統中的規則判定
1 場景描述
風控系統中,我們需要實時評估用戶風險。例如:
-
模擬器登錄 → 拒絕
-
IP 與登錄 IP 不一致 → 復審
-
短時間內頻繁申請 → 復審
-
行為評分過低 → 拒絕
2 風控規則腳本(QLExpress)
if (deviceType == "模擬器") {return "REJECT:模擬器登錄"; } else if (ip != loginIp) {return "REVIEW:IP地址異常"; } else if (applyCount > 5) {return "REVIEW:申請過于頻繁"; } else if (behaviorScore < 60) {return "REJECT:行為評分過低"; } else {return "PASS"; }
3 系統實現
import com.ql.util.express.DefaultContext; import com.ql.util.express.ExpressRunner; ? public class RiskControlDemo {public static void main(String[] args) throws Exception {RiskContext user = new RiskContext("模擬器", "192.168.1.10", "192.168.1.10", 2, 85); ?DefaultContext<String, Object> context = new DefaultContext<>();context.put("deviceType", user.deviceType);context.put("ip", user.ip);context.put("loginIp", user.loginIp);context.put("applyCount", user.applyCount);context.put("behaviorScore", user.behaviorScore); ?String script = ""+ "if (deviceType == \"模擬器\") {\n"+ " ? return \"REJECT:模擬器登錄\";\n"+ "} else if (ip != loginIp) {\n"+ " ? return \"REVIEW:IP地址異常\";\n"+ "} else if (applyCount > 5) {\n"+ " ? return \"REVIEW:申請過于頻繁\";\n"+ "} else if (behaviorScore < 60) {\n"+ " ? return \"REJECT:行為評分過低\";\n"+ "} else {\n"+ " ? return \"PASS\";\n"+ "}"; ?Object result = new ExpressRunner().execute(script, context, null, true, false);System.out.println("風控結果:" + result);} ?static class RiskContext {String deviceType, ip, loginIp;int applyCount, behaviorScore;RiskContext(String deviceType, String ip, String loginIp, int applyCount, int behaviorScore) {this.deviceType = deviceType;this.ip = ip;this.loginIp = loginIp;this.applyCount = applyCount;this.behaviorScore = behaviorScore;}} }
4 執行結果
風控結果:REJECT:模擬器登錄
5 風控系統應用建議
-
分維度組織規則(設備/IP/行為等);
-
返回結果分類(REJECT/REVIEW/PASS)做后續分流;
-
記錄執行日志與規則命中路徑;
-
配合數據庫存儲規則并熱加載。
四、設計建議
QLExpress 提供了一種 靈活、輕量、高性能 的方式來處理復雜的業務規則:
-
推薦系統中:策略運營人員可通過腳本靈活配置推薦邏輯;
-
風控系統中:安全/風控策略團隊可動態調整風險判斷規則;
-
實現代碼與規則解耦,提升系統響應與變更效率;
-
可通過規則腳本 + 數據注入快速構建業務中臺能力。
如果你正在構建一個需要規則動態變更、邏輯可配置的系統,那么 QLExpress 會是非常值得引入的工具。
參考資料:https://github.com/alibaba/QLExpress
github:https://github.com/alibaba/QLExpress