2. 规则引擎核心概念:规则、事实、工作内存、议程、推理机

规则引擎的本质是一个基于产生式系统的推理中间件。要理解规则冲突的产生机制与实验设计,必须先掌握其五大核心构件:规则、事实、工作内存、议程和推理机。这五个概念构成了规则引擎的运行时骨架,也是后续所有冲突场景的物理载体。

2.1 规则(Rule)

规则是规则引擎的知识表示单元,通常采用 IF-THEN 结构。一条规则由两部分组成:

  • 条件部分(LHS — Left Hand Side):定义规则被触发所需满足的模式或约束。
  • 动作部分(RHS — Right Hand Side):定义条件满足时执行的操作,如插入/更新/删除事实、调用外部服务、打印日志等。
规则示例(DRL 语法):
rule "高价值客户折扣"
    when
        $c: Customer(age > 60, totalAmount > 5000)
    then
        $c.setDiscount(0.15);
        update($c);
end
属性 说明 冲突影响
优先级(salience) 整数值,越高越优先执行 优先级相同且条件互斥时产生冲突
激活组(activation-group) 同一组内仅一条规则可执行 用于显式解决冲突
议程组(agenda-group) 控制规则执行的分组顺序 分组切换时可能产生隐式冲突
无循环(no-loop) 防止规则重复触发自身 缺失时导致无限循环冲突

2.2 事实(Fact)

事实是规则引擎中数据的基本单元,代表系统当前已知的状态片段。事实可以是任何 Java 对象(POJO),通过 insert()、update()、delete() 操作在工作内存中增删改。

  • 临时事实:仅在单次推理周期内有效。
  • 持久事实:跨多个推理周期存在,直到被显式删除。
  • 逻辑事实:由规则推导产生,当依赖条件消失时自动回收。
实验要点:事实的插入顺序、更新频率和生命周期是制造冲突场景的关键变量。在对照实验中,应固定事实集合,仅改变规则集来观察冲突行为。

2.3 工作内存(Working Memory)

工作内存是规则引擎的运行时数据存储区,所有事实都存放在这里。推理机通过模式匹配算法(如 Rete、Phreak)在工作内存中查找与规则条件匹配的事实组合。

工作内存的核心特性:

  • 全局可见性:所有规则共享同一个工作内存。
  • 增量更新:事实的插入/更新/删除会触发增量匹配,而非全量重算。
  • 冲突根源:当多个规则的条件同时匹配同一组事实时,冲突便在工作内存中产生。
工作内存与规则匹配示意图 工作内存 事实 A: Customer(age=65) 事实 B: Order(amount=8000) 事实 C: Promotion(season=冬) 事实 D: RuleConfig(active=true) insert / update / delete 规则集 规则 R1: 高价值客户折扣 规则 R2: 冬季促销叠加 规则 R3: 配置开关限制 ⚠ 冲突:R1 与 R2 同时匹配事实 A、B、C

2.4 议程(Agenda)

议程是规则引擎的待执行队列。当推理机发现某条规则的所有条件都满足时,会将该规则的激活实例(规则 + 匹配的事实组合)放入议程。议程按照规则的优先级(salience)排序,优先级高的规则先执行。

议程是冲突的直接发生地。当多条规则同时处于激活状态且优先级相同时,引擎必须通过冲突解决策略来决定执行顺序。

冲突解决策略 行为描述 适用场景
优先级优先 按 salience 值降序执行 默认策略,适合显式控制
先进先出 按激活时间顺序执行 公平性要求高的场景
最近最久未用 优先执行最近未执行的规则 避免规则饥饿
显式分组 通过 activation-group 互斥 业务互斥规则

2.5 推理机(Inference Engine)

推理机是规则引擎的计算核心,负责将规则与事实进行匹配、将激活实例推入议程、并执行规则动作。根据推理方向,分为两种模式:

2.5.1 前向链(Forward Chaining)

从已知事实出发,不断匹配规则并执行,直到没有新规则可触发或达到终止条件。适用于数据驱动的场景,如监控告警、风险评估。

  • 优点:响应快,适合实时事件处理。
  • 缺点:可能产生大量冗余匹配,需要高效的 Rete 网络优化。
  • 冲突特点:事实插入顺序对冲突结果影响显著。

2.5.2 后向链(Backward Chaining)

从目标假设出发,反向查找支持该假设的规则和事实。适用于目标驱动的场景,如诊断系统、专家咨询。

  • 优点:推理路径清晰,适合解释性系统。
  • 缺点:事实不完备时可能无法收敛。
  • 冲突特点:多个规则都能推导同一目标时产生冲突。
前向链 vs 后向链推理流程 前向链(数据驱动) 事实输入 规则匹配 议程排序 动作执行 后向链(目标驱动) 目标假设 规则回溯 事实验证 结论输出

2.6 核心概念关系总结

概念 角色 冲突关联 实验控制变量
规则 知识表示 条件重叠、优先级相同 规则数量、优先级、activation-group
事实 状态数据 多规则匹配同一事实 事实类型、数量、属性值
工作内存 数据存储 事实变更触发增量匹配 插入顺序、更新频率
议程 执行队列 多激活实例排序冲突 冲突解决策略
推理机 匹配+执行 前向/后向链选择影响冲突模式 推理方向、算法实现
实验设计提示:在构建冲突场景的对照实验时,建议每次只改变一个核心概念层(如仅修改规则优先级,或仅改变事实插入顺序),保持其他四层不变。这样才能准确归因冲突产生的根本原因,避免多变量混杂。