MOONBIT NATIVE - PRODUCTION RULE ENGINE (RETE NETWORK) - WASM - MIT

MoonUp Rete

MoonBit 原生产生式规则引擎(Rete 网络)。规则编译为 alpha / beta / terminal 节点网络:工作内存维护有状态事实集合,事实 insert / update / retract 只沿网络增量传播,支持跨事实变量绑定 join 与连锁激活;冲突消解按 salience → specificity → recency 确定性排序。同一规则集 + 同一事实流恒得到同一结果——可测试、可审计、无 LLM 幻觉。CLI / 服务端 / WASM 浏览器均可嵌入。

95unit tests
0external deps
Retenetwork core
WASMruns in browser
00同一引擎、五个不同领域——规则在左,真实引擎输出在右本地 WASM 实时运行,非截图
Cross-Fact Risk
Shared-Alpha Routing
Chained Inventory
Or/Not DSL
JSON Config
// 你的规则(Rete DSL,跨事实关联)
loading...
// 引擎输出(ReteEngine::fire_all 真实返回值)
loading...
五个 tab 共享同一个 moonup.wasm 核心。切换 tab 只换规则集与事实流,引擎零改动——这正是"规则即数据、引擎与业务语义解耦"的现场证据。JSON Config 场景的规则集全部来自 JSON 字符串(parse_rules_json),引擎代码零修改。
01核心概念:Rete 网络 + 工作内存
network compile -> incremental propagation -> conflict resolution -> chain activation
// 1. 定义规则:跨事实条件 + 动作 + salience
let rules = [
  ReteRule::new("risk_hold", "跨事实风控",
    "order.amount>100000 && customer.is_new==true && device.risk==high
     && order.customer_id==customer.id",          // 跨事实变量绑定 join
    "action=manual_review & order.status=hold", 10,
    "订单金额、客户属性、设备风险三类事实关联才触发"),
]

// 2. 工作内存:有状态事实集合(insert / retract)
let wm = WorkingMemory::new()
let order = Fact::make("order")
order.set("amount", "150000"); order.set("customer_id", "c-1001")
...

// 3. 编译网络 + 增量传播 + 冲突消解 + 连锁激活
let engine = ReteEngine::new(rules)
engine.insert(wm, customer); engine.insert(wm, device)
engine.insert(wm, order)          // 只沿网络重算受影响分支
let result = engine.fire_all(wm)  // match-select-act 循环
// result.fired -> 触发序列(含连锁激活)
// result.trace -> 每条触发的规则/事实/动作轨迹(可审计)
条件 DSL:== != ~= > < >= <=、&&(与)、||(OR 组,顶层)与 !(否定,扫描工作内存全集);跨事实引用形如 order.customer_id==customer.id。动作:= 赋值 / += 追加标签 / -= 数值扣减,可引用其他事实字段(product.stock-=order.qty)。幂等保护:字段值未变化的重插被跳过,防止无限自触发。
02为什么 MoonBit 生态需要它

生态缺口:产生式规则引擎

MoonBit 生态现有 moonrule(JSON 表达式校验)是"输入合不合法"的无状态单条求值;没有面向"事实流变化时该做什么"的有状态产生式引擎。MoonUp Rete 补齐这一生态位。

跨事实关联

规则条件可引用多个事实(order × customer × device)并做变量绑定 join——比单事实匹配高一个抽象层,直接支撑风控、路由、库存等真实业务。

增量传播 + 连锁激活

事实增删改只重算受影响分支;动作修改事实可再次触发规则(匹配-选择-执行循环),fire limit 与幂等保护共同防止失控循环。

可审计、可测试

每次触发返回规则 id、事实组合与动作轨迹;每条规则可独立断言。96 个单元测试覆盖 join、共享节点、冲突消解、连锁、OR/NOT 复合条件与边界解析。

03当前能力 vs 路线图
Honest boundaries -- no overpromising
Implemented
  Rete 网络编译:alpha(单条件,跨规则共享)/ beta(跨事实 join)/ terminal
  工作内存:insert / retract / snapshot;增量传播(left/right activation)
  跨事实变量绑定 join(order.customer_id==customer.id)
  冲突消解:salience -> specificity -> recency -> rule id(完全确定性)
  match-select-act 循环 + fire limit + 幂等保护(防止自触发死循环)
  动作 DSL:= / += / -=,支持跨事实引用值
  触发轨迹 trace(可审计)
  复合条件 DSL:||(OR 组,顶层)与 !(否定,工作内存全集扫描)
  JSON 规则集加载(parse_rules_json,配置文件注入)
  WASM 导出,浏览器本地运行
  96 个单元测试,CI 通过

// Roadmap(未实现,不作承诺)
  括号嵌套逻辑(OR 内嵌于 AND,如 a && (b || c))
  DSL 条件语法错误定位(JSON 层已带定位,DSL 解析错误为通用提示)
  大规模规则集性能基准(当前定位:几十到几百条规则规模)
  多轮非线性传播优化(Rete 经典增量 update 语义)
本页运行 moonup.wasm(由 MoonBit 核心库编译)于浏览器本地执行。复现:git clone https://github.com/mw1696803-hub/moonup → moon test(96 passed)→ moon run main → moon build --release --target wasm-gc。
2026 MoonBit Hackathon - October edition - MIT License - 参考 Rete 算法(Forgy 1974)