27 条死规则根因定位与清理(2026-07-15)

27 条死规则根因定位与清理(2026-07-15)

目标

解决用户反馈"系统反复出问题、月余未根治",聚焦规则引擎契约校验中 27 条"死规则"(unsupported condition type) 的根因与闭环处理。

根因结论(非系统坏,而是数据分类错误)

sciot_rules_v2type 列,规则类型存于 condition 字段的 JSON({"type":"xxx"})中。引擎 supportedTypes 白名单声明 47 种、_evaluateCondition 实际实现 76 个 case。

经精确比对,2413 条规则中:

  • 1539 field_check + 695 relationship + 其余已支持类型 → 全部为活规则(引擎认识)
  • 仅 27 条使用引擎不承载的 type,分两类:
  1. SCSAI 原生 method 型(引擎不承接,本属 SCSAI 职责):sequence(7)、auto_create(6) — action_type=auto
  2. 业务建议型(LLM/SCSAI 能力,引擎 condition 层不承载):compare(3)、optimize(1)、score_check(1)、completeness_check(1)、trend_compare(1)、profit_check(1)、stock_level(1)、date_check(1)、credit_check(1)、budget_check(1)、consolidation_check(1)、aging_analysis(1) — action_type=suggest/validate

这 27 条此前以 is_active=1 挂着却永远无法被引擎 evaluate,被契约校验误判为"系统坏"。正确做法不是硬塞进引擎(会成假活/永远 true),而是明确退役

修复动作

  1. server/core/rule-engine.js L281 合并循环:跳过 is_active=0 规则,不再灌入引擎运行库。
  2. server/core/rule-engine.js L1344 _checkRuleContract:契约校验加 WHERE is_active = 1,只校验活跃规则。
  3. 退役脚本对 sciot_import.dbrule_engine.db 两库统一执行:27 条 is_active=0source 标记为 aras-native-method(13) 或 business-suggestion-deprecated(14)。
  4. 清理 11 个临时诊断脚本(_q_.js / _retire_.js)。

验证结果

  • 引擎 initialize 日志:unsupported type 告警、无"发现 N 条死规则"
  • GET /api/health → 200 {"ok":true}
  • GET /api/rule-engine/statstotal=2413, active=2386(2386 = 2413−27 退役,数字闭环正确),dead 字段消失。

遗留(诚实标注,非本次范围)

  • 27 条退役规则的业务能力(供应商比价、信用预警、库存低位等)目前实际无引擎承载,依赖 SCSAI / LLM 侧实现,不属于 BossAgents 本地规则引擎职责。若未来需本地化,应在引擎新增对应 handler 后恢复其 is_active,而非保持现状。
  • DB 架构病根(14 个 .db 文件未合并、驱动混用已通过 better-sqlite3 单例缓解但未彻底统一)仍属独立技术债。
← 返回案例列表
分享:
🤖 Try Now →
🤖
🎁