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

规则触发异常排查:高Salience规则未触发低优先级规则触发

问题分析与解决

核心问题:规则前置条件与事实不匹配

你遇到的问题本质是rule_10和rule_11的前置条件未被满足,所以即使优先级更高也不会触发,而rule_12能触发说明它的条件恰好匹配(或你提供的代码/事实存在描述误差),具体原因拆解如下:

  1. TextChoiceOption的SKU不匹配
    你的事实中TextChoiceOption的sku是"control",但rule_10、rule_11、rule_12的规则里都要求匹配sku == "motorControl"。按此逻辑,三个规则都不应触发,但你说rule_12触发了,说明要么你提供的事实有误(实际TextChoiceOption的sku是"motorControl"),要么rule_12的实际代码中SKU条件是"control"而非"motorControl"。
    这是rule_10和rule_11无法触发的最直接原因。

  2. 存在条件(exists)的结构不匹配
    规则中通过exists (OptionValue(optionValueValue in ("xxx")) from $opt.value)来校验选项值,但你的事实里TextChoiceOption是直接携带optionValueValue = "xxx"属性,而非value字段包含OptionValue对象。如果事实结构确实如此,这个exists条件是不满足的,三个规则都不应触发——这进一步说明你提供的代码或事实存在描述误差。

  3. 数据类型不一致的比较风险
    规则中DimensionOption的条件使用字符串(如widthValue <= "72")和数字类型的widthValue/heightValue做比较,在Drools中可能引发非预期的字典序比较结果(比如数字8转成字符串"8"会被判定为大于"72")。应改为数字比较:

    DimensionOption(sku == "dim", widthValue <= 72, heightValue <= 120)
    

修复建议

  • 修正TextChoiceOption的SKU条件,确保与事实中的sku一致(要么把规则里的"motorControl"改成"control",要么调整事实中的sku为"motorControl")。
  • 调整exists条件的写法,匹配事实结构:如果TextChoiceOption直接有optionValueValue属性,可简化为:
    TextChoiceOption(sku == "control", optionValueValue == "xxx")
    
  • 统一Dimension条件的比较类型,用数字替代字符串进行数值比较。

内容的提问来源于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 14:54:08