Semantica · 专题 04
Technical deep-dive · 04

确定性推理

Semantica 的“确定性推理”不是一个成熟度一致的单体:基础前向/后向链、Datalog 固定点推导和纯时态区间计算具备参照价值;Rete 网络的核心匹配与连接仍是占位逻辑;解释与来源链也没有形成不可绕过的闭环。

版本 0.6.6 证据基线 5c6b40f36 分析日期 2026-08-24
Recommendation
优先隔离验证 Datalog 与时态推理;基础规则链只作轻量参考;当前 Rete 不建议引入。

专题结论

Semantica 的“确定性推理”不是一个成熟度一致的单体:基础前向/后向链、Datalog 固定点推导和纯时态区间计算具备参照价值;Rete 网络的核心匹配与连接仍是占位逻辑;解释与来源链也没有形成不可绕过的闭环。

建议:优先隔离验证 Datalog 与时态推理;基础规则链只作轻量参考;当前 Rete 不建议引入。

1. 推理子系统地图

技术标识 中文简介 当前判断
semantica.reasoning(基础规则链、Datalog、Rete、解释和来源包装器所在模块) 推理能力包边界 子系统成熟度差异明显
Reasoner(维护规则与事实并执行前向或后向链的基础推理器,约第 57 行) 轻量规则引擎 适合简单规则,不适合复杂策略平台
DatalogReasoner(解析 Datalog 事实与规则并执行固定点推导的引擎,约第 39 行) 递归确定性规则引擎 最值得优先 PoC
TemporalReasoningEngine(计算时间区间关系、合并、缺口和覆盖的纯 Python 引擎,约第 43 行) 时态确定性工具 值得作为规则底层能力
ExplanationGenerator(把推理结果转换为步骤、路径、依据和自然语言的解释器,约第 95 行) 解释视图生成器 需绑定事实与规则版本
ReteEngine(构建 alpha、beta 与 terminal 节点网络的增量规则引擎骨架,约第 120 行) Rete 结构框架 当前不可承担真实匹配

2. 基础规则链

Rule(保存规则名称、条件、结论和类型的数据类,约第 25 行)、Fact(保存事实谓词与参数的数据类,约第 38 行)和 InferenceResult(保存推导事实、所用规则与前提的结果模型,约第 49 行)构成轻量规则表示。

forward_chain()(反复应用规则直到不再产生新事实或达到配置迭代上限的前向推导方法,默认最多 50 轮,约第 204 行)能够给出规则与前提,但达到上限时不保证已经到达固定点,也不是完整证明系统。复杂生产规则还需要验证否定、聚合、优先级、冲突消解、例外、循环终止、规则版本和性能上限。

适合的场景是规则数量小、语义简单、需要完全复算的检查;不适合直接承担大型监管策略或高吞吐事件推理。

3. Datalog 固定点推导

derive_all()(循环应用全部规则直至事实集合稳定的方法,约第 242 行)提供真正的固定点过程;query()(以模式和绑定查询已知事实的方法,约第 344 行)用于读取结果;load_from_graph()(把图实体和关系转换为 Datalog 事实的方法,约第 404 行)负责图到规则引擎的桥接。

原始调用链

DatalogReasoner.derive_all()(维护新事实增量并循环至固定点的方法)逐轮调用 DatalogReasoner._apply_rule()(针对规则体组合候选事实的方法);后者通过 DatalogReasoner._unify()(合并变量绑定的方法)和 DatalogReasoner._instantiate_fact()(把规则头与最终绑定实例化为事实的方法)生成新事实。输入是已登记事实和规则集合,输出是固定点事实集合;状态变化位于内部事实索引与增量集合。

PoC 应重点验证:

  • 真实领域规则能否用当前语法准确表达;
  • 递归、多跳和循环是否终止且结果稳定;
  • 大事实集上的推导耗时、内存和增量更新成本;
  • 图字段到谓词的映射是否保留类型、来源和时间;
  • 每个结论能否回指事实版本、规则版本和运行批次。

下面是抽象示例(不是原项目原样代码),展示需要保留的解释信息:

prolog
eligible_review(X) :- affected_by_retracted_evidence(X), active_decision(X).
requires_human_approval(X) :- eligible_review(X), high_impact(X).

推导结果不应只有真假值,还应返回命中的规则、变量绑定、输入事实 ID、事实版本、规则版本和执行时间。

4. 时态推理

纯时态引擎能确定性计算 Allen 风格的区间关系、合并相接区间、缺口、覆盖率和实体时间线。它与双时态查询互补:查询器回答“哪些事实处于选定时间轴”,区间推理器回答“这些区间之间是什么关系”。

引入时应先统一:

  • UTC 与本地时区转换;
  • 日、秒、毫秒等时间精度;
  • 开放结束边界与无穷时间的表达;
  • 相接区间是否合并;
  • 补录事实是否影响历史结论及其重算范围。

5. Rete 未完成边界

AlphaNode._matches()(本应判断单个事实是否满足 alpha 条件、但当前直接返回真的方法,约第 79 行)没有实现条件判断;BetaNode._can_join()(本应判断左右记忆能否连接、但当前直接返回真的方法,约第 101 行)没有实现变量绑定一致性。

原项目关键片段 A——AlphaNode._matches()(判断单事实条件的当前占位方法)。

固定提交片段:alpha 条件匹配 原项目关键片段

python
def _matches(self, fact: Fact) -> bool:
    """Check if fact matches condition."""
    # Simple matching - can be enhanced
    return True

原项目关键片段 B——BetaNode._can_join()(判断左右事实连接的当前占位方法)。

固定提交片段:beta 事实连接 原项目关键片段

python
def _can_join(self, left_fact: Fact, right_fact: Fact) -> bool:
    """Check if facts can be joined."""
    # Simple join logic - can be enhanced
    return True

两个片段直接证明 alpha 条件和 beta 连接都无条件通过,因此这是语义正确性缺口,而不是单纯性能问题。可借鉴的是网络节点分层;不能照搬的是当前匹配与连接实现,在完成条件解释、变量绑定和正确性测试前应保持禁用。

因此现有网络虽能创建节点、传播事实和激活终端,却会错误接受不匹配的事实组合。这个问题是语义正确性缺失,而非只差性能优化,不能通过配置规避。

6. 解释与来源闭环

generate_explanation()(将推理对象转换为结构化解释的方法,约第 130 行)能生成路径和自然语言,但解释可靠性取决于输入结果是否携带完整证明。

ReasoningEngineWithProvenance(包装推理调用并尝试记录前提与结果来源的组件,约第 21 行)说明项目意识到推理审计需求,但它引用仓库中不存在的底层推理模块,且包装器可以被绕过。

生产闭环至少需要:规则 ID 与版本、事实 ID 与版本、引擎版本、配置摘要、运行批次、变量绑定、推导步骤、最终结论、责任主体和重放接口。

7. 可借鉴的交互设计

  1. 推理工作台采用“事实 → 规则 → 执行 → 结果 → 解释”的分步流程。
  2. 结果树每个结论都可展开到规则、变量绑定和输入事实,并可继续跳到原始证据。
  3. 显示确定性状态:已复算一致、版本已过期、依赖已撤回、无法重放。
  4. 规则编辑器提供语法校验、影响预览和测试样例,发布前展示新增/移除结论差异。
  5. 时态结果将所选时间轴、快照时间和区间边界固定显示,避免读者误解。

8. 引入或参照结论

项目 结论 条件
Datalog 固定点推导 建议隔离 PoC 使用真实规则与数据验证表达力、性能和解释
纯时态区间推理 建议局部参照或引入 统一时间规范并补充分层测试
基础前向/后向链 仅作轻量设计参考 限制规则复杂度并加入版本化
解释生成 建议参照交互 必须绑定完整证明与来源版本
当前 Rete 引擎 不建议引入 alpha 与 beta 逻辑完成并通过正确性测试前禁用

9. 源码依据

主题 固定版本官方源码 支持的判断
基础规则、事实与前后向链 规则、事实和结果模型前向链实现 基础引擎提供轻量规则链,但迭代上限不保证复杂规则到达固定点
Datalog 解析、推导与查询 半朴素固定点推导模式查询与图加载 Datalog 子系统具备递归固定点和图到事实桥接能力
时态区间推理 区间关系、合并、缺口与覆盖算法 时态推理是确定性纯 Python 计算
解释生成 解释入口与分派 能生成结构化解释,但可靠性依赖输入证明是否完整
Rete 匹配与连接占位 alpha 与 beta 占位逻辑 当前无条件接受事实和连接,不能用于真实规则匹配
推理来源包装器 推理来源包装器 包装器可绕过且引用当前提交中缺失的底层推理模块

返回 Semantica 项目分析主报告