You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Activation Group与Salience异常:错误规则触发问题排查

规则触发异常排查问题

当前系统包含以下3条规则,现有事实可匹配全部规则。根据salience(优先级)与activation-group(激活组)设置,预期应触发规则10或11,但实际两台系统始终触发规则12,仅一台系统符合预期。

规则代码

rule "dimensionConfigMotorTubeDefault_10"
    salience 390
    activation-group "ag_R238_r28-wirefree"
    no-loop true
    lock-on-active true
    when
        p: Product(sku != 1)
        $mm : InventoryChoiceOption(sku == "mm")
        exists (NII(internalPattern in ("R238")) from $mm.value)
        $opt : TextChoiceOption(sku == "motorControl")
        exists (OptionValue(optionValueValue in ("r28-wirefree")) from $opt.value)
        DimensionOption(sku == "dim", widthValue <= "72", heightValue <= "120")
        $edi : TextOption(sku == "default_tube_size")
    then
        $edi.setValue("1.5"); update($edi);
end

rule "dimensionConfigMotorTubeDefault_11"
    salience 390
    activation-group "ag_R238_r28-wirefree"
    no-loop true
    lock-on-active true
    when
        p: Product(sku != 1)
        $mm : InventoryChoiceOption(sku == "mm")
        exists (NII(internalPattern in ("R238")) from $mm.value)
        $opt : TextChoiceOption(sku == "motorControl")
        exists (OptionValue(optionValueValue in ("r28-wirefree")) from $opt.value)
        DimensionOption(sku == "dim", widthValue <= "96", heightValue <= "96")
        $edi : TextOption(sku == "default_tube_size")
    then
        $edi.setValue("1.5"); update($edi);
end

rule "dimensionConfigMotorTubeDefault_12"
    salience 380
    activation-group "ag_R238_r28-wirefree"
    no-loop true
    lock-on-active true
    when
        p: Product(sku != 1)
        $mm : InventoryChoiceOption(sku == "mm")
        exists (NII(internalPattern in ("R238")) from $mm.value)
        $opt : TextChoiceOption(sku == "motorControl")
        exists (OptionValue(optionValueValue in ("r28-wirefree")) from $opt.value)
        DimensionOption(sku == "dim", widthValue <= "102", heightValue <= "120")
        $edi : TextOption(sku == "default_tube_size")
    then
        $edi.setValue("2"); update($edi);
end

可能的原因分析

  • 字符串数值比较逻辑错误:规则中widthValue和heightValue以字符串类型进行大小比较(如<= "72"),但字符串比较是按字典序执行的。例如"100"会被判定为小于"72"(首字符'1'的ASCII码小于'7')。若两台异常系统中DimensionOption的宽高值存储为字符串类型,而正常系统使用数值类型,就会导致规则10/11的条件不满足,转而触发规则12。
  • 规则加载/编译顺序差异:尽管规则设置了相同的salience,但Drools在salience相同的规则中,可能会按加载顺序选择触发规则。如果异常系统中规则12先被加载,且规则10/11的条件匹配未被正确识别,就会优先触发规则12。
  • 事实对象属性值格式不一致:两台异常系统中的DimensionOption实例宽高值可能存在格式差异(如带空格、额外字符),导致规则10/11的条件不匹配,而规则12的宽松条件满足。例如实际widthValue为" 72"(带前导空格),字符串比较时" 72">"72",无法匹配规则10的条件,但符合规则12的<= "102"。
  • Drools版本差异:不同系统使用的Drools版本可能不同,新版本对activation-group和salience的处理逻辑有调整,导致规则触发优先级不符合预期。部分旧版本中,activation-group内的规则触发可能不完全严格遵循salience,会结合其他因素判断。
  • lock-on-active的交互影响:lock-on-active设为true时,规则触发后会锁定激活组内的其他规则。若异常系统中规则12因某种原因先进入议程并触发,就会阻止规则10/11的执行。这可能是因为规则12的条件匹配被提前检测到,而规则10/11的匹配检测存在延迟。

内容的提问来源于stack exchange,提问作者Jeff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:54:35