核心概念¶
概念关系¶
graph TD
P[项目] --> K[知识包]
P --> RES[资源]
RES --> LIB[库文件]
RES --> RULE[规则文件]
LIB --> VL[变量库]
LIB --> PL[参数库]
RULE --> RS[规则集]
RULE --> DT[决策表]
RULE --> DTREE[决策树]
RULE --> SC[评分卡]
K -->|引用| LIB
K -->|包含| FLOW[决策流]
FLOW -->|编排| RULE
一句话总结:项目下有资源和知识包两大块。资源存放库文件和规则文件。知识包引用库文件、包含决策流,决策流编排规则文件。
项目¶
项目是顶层容器,所有规则资源都归属于某个项目。项目下有两个固定分区:
- 知识包 — 规则的打包发布单元
- 资源 — 库文件和规则文件的存放位置
airport_gate_allocation_db/ # 项目
├── 知识包/
│ └── gate_pkg # 打包发布单元
└── 资源/
├── 库/ # 库文件
│ ├── flight_info.vl.xml # 变量库
│ ├── gate_result.vl.xml
│ └── canshu0.pl.xml # 参数库
├── 决策集/ # 规则文件
│ └── intl_gate_rules.rs.xml
├── 决策表/
│ └── aircraft_gate_map.dt.xml
├── 决策树/
│ └── pax_gate_routing.dtree.xml
├── 评分卡/
│ └── flight_priority_score.sc
└── 决策流/
└── gate_allocation_flow.rl.xml
创建项目时选择存储模式(db 或 jcr),创建后不可更改。推荐 db。
资源:库文件¶
库文件定义规则中使用的数据结构,是规则的"词汇表"。
变量库(.vl.xml)¶
最核心的库文件。定义输入/输出变量,按类别分组。
每个变量类别对应 API 请求体中的一个顶层 key:
{
"FlightInfo": { ← 变量类别
"aircraft_type": "A380", ← 变量
"arrival_time": 8
},
"GateResult": {} ← 输出类别,规则执行后填充
}
详见 变量定义。
参数库(.pl.xml)¶
定义中间变量,不属于任何类别。用于规则间传递临时数据,如 can_score、can_reason。
参数出现在 API 返回结果的顶层(不在任何类别下)。
常量库(.cl.xml)和动作库(.al.xml)¶
常量库定义固定值,动作库定义可调用的 Java 方法。一般项目用不到。
资源:规则文件¶
规则文件定义具体的业务逻辑。每种类型适合不同场景:
| 类型 | 扩展名 | 一句话 | 什么时候用 |
|---|---|---|---|
| 规则集 | .rs.xml |
一组 if-then-else | 简单条件判断,规则不多 |
| 决策表 | .dt.xml |
条件 × 结果的矩阵 | 条件组合多,需要一目了然 |
| 决策树 | .dtree.xml |
树形分支 | 条件有先后层级 |
| 评分卡 | .sc |
每项打分再汇总 | 信用评分、风险评估 |
| 决策流 | .rl.xml |
串联多个规则节点 | 复杂流程,多步骤协作 |
规则文件支持文件夹组织(如 intl_rules/asia/)。
规则集支持两种编辑方式:向导式和 REA 文本编辑器。
知识包¶
知识包是连接"编辑"和"执行"的桥梁,也是对外调用的入口。
知识包引用库文件和决策流,将它们编译打包成一个可执行单元。决策流是知识包的一部分,不是独立于知识包存在的。
知识包 gate_pkg
├── 引用变量库: flight_info.vl.xml, gate_result.vl.xml
├── 引用参数库: canshu0.pl.xml
└── 包含决策流: gate_allocation_flow.rl.xml ← 对外调用入口
├── 节点1: 规则集 intl_gate_rules.rs.xml
├── 节点2: 决策表 aircraft_gate_map.dt.xml
├── 节点3: 决策树 pax_gate_routing.dtree.xml
└── 节点4: 评分卡 flight_priority_score.sc
一个知识包可以包含多个决策流,每个决策流是一个独立的执行入口。
知识包支持热更新——修改规则保存后,客户端自动加载最新版本,无需重启。
决策流¶
决策流是知识包内的执行流程,通过可视化流程图编排规则节点的执行顺序:
graph LR
A[开始] --> B[规则集: 基础判断]
B --> C{决策树: 旅客分流}
C -->|国际| D[决策表: 机位映射]
C -->|国内| E[评分卡: 优先级]
D --> F[结束]
E --> F
决策流中的每个节点引用一个规则文件(规则集、决策表、决策树或评分卡)。执行时按流程图的连线顺序依次执行各节点。
调用方式:
其中 packageId 指定知识包,flowId 指定该知识包内的哪个决策流。
完整流程¶
graph LR
A[1. 创建项目] --> B[2. 定义变量库]
B --> C[3. 编写规则]
C --> D[4. 创建决策流]
D --> E[5. 打包知识包]
E --> F[6. 调用 API]
以机场登机口分配为例:
- 创建项目
airport_gate_allocation_db - 定义变量库:
FlightInfo(输入)、GateResult(输出)、参数库(中间变量) - 编写规则:决策表映射机型→机位,决策树按旅客数分流,评分卡算优先级
- 创建决策流
gate_allocation_flow,串联上述规则 - 创建知识包
gate_pkg,引用所有库和决策流 - 调用:
curl -X POST http://localhost:16001/process/airport_gate_allocation_db/gate_pkg/gate_allocation_flow \
-H 'Content-Type: application/json' \
-d '{"FlightInfo": {"aircraft_type": "A380", "arrival_time": 8, "is_international": true, "passenger_count": 260}, "GateResult": {}}'
Rete 算法¶
RulEuler 使用 Rete 算法进行规则匹配。Rete 构建规则网络避免重复计算条件,大量规则场景下性能显著优于逐条匹配。用户无需关心内部实现。