从主张到已接受事实图 图片:由 Google Gemini 生成

现实是一个开放系统。记录会迟到,证人会翻供,传感器会被重新校准,政策会变化。我们永远无法断言所有相关观察都已到齐,因为我们甚至不知道还有什么尚未被发现。

行动则不同。扣费、付款、授予访问权限、发出警报:每一项都要求一个封闭的答案。决策必须终结,即便现实并未终结。在开放世界与有限行动之间存在一道结构性的鸿沟。更高的模型置信度、更长的思维链,或再叠加一层agent,都无法弥合这道鸿沟。

因此第一个问题不是"什么是真的?“而是:

在一个没有已知终点的主张世界里,谁有权在什么规则下为这个决策固定前提?

进入系统的并非事件本身,而是一份合同、支付记录、传感器日志、视频、证词或消息:是由观察者在某个时刻、通过某种转换、在某个范围内、带着某些失败模式产生的片段。系统必须把这些当作Claim,而非事实来接收。

但仅仅保留Claim并不足以采取行动。Claim之间可能相互冲突。一份缺失的记录可能意味着某事件从未发生,也可能只是采集失败。得出一个前提也许需要合并多个Claim。如果一份开放的Claim账本直接进入判决引擎,采集、事实认定与规则适用就会重新坍缩成一个不透明的动作。

我们需要的是一套明确的程序,来构建某个特定决策所允许使用的事实状态。我把这套程序称为Projection(投影),其结果称为已接受事实图(Graph of Accepted Facts),即GAF

Open Claims
Projection
    │  evaluation · conflict resolution · derivation · absence policy
Graph of Accepted Facts (GAF)
Closure
    │  GAF · scope · policy · rules · runtime frozen
Deterministic Verdict
Authorized Action
    └── new evidence · policy change · appeal · defect
                           Reopen / Re-projection

关键不在于收集更多事实,而在于把构建判决前提在这些前提之上计算这两件事分开。

有限的输入尚不等于一个封闭的世界

一个有限的Claim集合并不能构成一个封闭世界。如果某笔付款没有出现在数据库中,我们不能立刻断定该付款未曾发生。这份记录可能是缺失的、延迟的、被错误路由的,或者掌握在另一个机构手中。

因此Projection必须固定的是缺失的含义,而不仅仅是输入清单:

  • 对于这个主题、谓词、范围与时段,哪个来源被视为完整?
  • 在何处可以应用封闭世界假设?
  • 一份缺失的记录意味着 false 还是 unknown?
  • 明确的否定该如何与数据缺失区分开?
  • 当证据不足时系统必须返回什么?

Raymond Reiter 的奠基性论文《On Closed World Data Bases》形式化了这一关键举措:在封闭世界假设下,未能证明一个正的基础文字,可以据此推出其否定。这一举措之所以有用,恰恰是因为它并非普遍安全——它需要一个明确声明的边界。

假设一家银行为某个账户、某个时段提供了一份最终确定的交易账本,而Projection策略认可该账本在此范围内是完整的。此时缺失可以被视为该处不存在匹配交易的证据。而在租户的消息存档中缺少一条付款引用,则完全不能证明这一点。一个来源在某个声明的查询下是封闭的,另一个则依然是开放的。

Closure并非"我们读到了这里"这样的陈述,而是一份合同,定义了缺失本身在何处成为可计算的信息

Projection 不是把Claim一键提升为事实的按钮

Projection不能被简化为给整个Claim贴上 acceptedrejectedheld 的标签。真实的Claim很少这么干净。

  • “我五号交了房租"可能日期已核实,但用途未核实。
  • 确立一笔付款可能需要两份独立记录。
  • 一份Claim可能支持一个命题,同时反驳另一个命题。
  • 即便没有来源逐字陈述,一个事实也可能被推导出来。
  • 一个可靠的来源在其记录所描述的具体事件上,仍可能悬而未决。

**评估是关系性的,而非贴在整个Claim上的一个标记。**它连接一个或多个Claim、一个原子命题(Proposition)与某个特定的Projection。随后,一次推导(Derivation)结合各项评估、先前已接受的前提与明确的规则,产生一个Accepted Fact。

Claims ───────┐
Proposition ──┼── Evaluation ── accepted / rejected / unknown
Projection ───┘                     │
                       Derivation ── Claims · Facts · Rules
                            Accepted Fact

Claim保留了谁断言或观察到了什么。Proposition是被评估的最小陈述单元。Evaluation记录了在某个Projection下,这些Claim如何作用于该Proposition。Derivation是证明对象,展示结果是如何产生的。Accepted Fact是该程序允许此次判决使用的前提。

因此,同一个Claim在另一种目的、截止时间、举证责任或权限之下,可能产生不同的Accepted Fact——甚至完全没有。Accepted Fact不是关于全部现实的绝对真理,而是在一个声明的决策边界内被允许使用的前提

为何结果是一张图

判决的前提并非孤立的语句。谁向谁支付了多少、何时支付、依据哪份合同、针对哪项义务、以及该合同当时是否有效——这些都是相互关联的陈述。

一张已接受事实图包含这些前提及其语义关系,以及产生它们的推导与出处:

  • 实体、动作、时间、数量与状态;
  • 支持或反驳每个Proposition的Claim;
  • 原始来源与责任主体;
  • Evaluation与推导规则;
  • 被拒绝或尚未解决的替代方案;
  • 时间、逻辑与替代(supersession)关系。

这张图的意义不在于装饰性的说明,而在于机器可追溯的依赖关系。

从一个Verdict出发,审计者必须能够沿着GAF及其规则下溯到原始Claim。从一份被证伪的Claim或来源出发,系统必须能够找到所有可能需要复核的Accepted Fact、Closure、Verdict与Action。

仅有出处信息是不够的。完整的影响分析还需要推导依赖、否定性依赖、聚合条件与策略范围。一个结论可能不依赖于某个存在的Claim,而依赖于对任何符合条件的Claim的明确缺失声明。PROV-O: The PROV Ontology围绕实体、活动、代理与限定关系,标准化了可互操作的出处模型;GAF额外承担的责任,是保留重新开启判决所需的、针对具体决策的接受状态与否定性依赖。

这是一个逻辑数据模型,而非对图数据库的强制要求。关系型数据库、内容寻址对象存储、仅追加事件日志或图数据库都可以实现它。只要物理存储能够无损地保留节点、类型化关系、血缘与依赖查询,它就是有效的。

Closure 比 GAF 更大

GAF保留了Accepted Fact及其推导与出处。Closure比GAF更大:它冻结的是究竟使用了哪一份GAF、针对哪个问题、在什么条件下使用。它是该决策的重放合同。

一份Closure至少必须包含:

  • 判决的问题与目的;
  • 事件、主体与时间范围;
  • 确切的GAF快照及其完整性标识符;
  • 完整性声明,以及对缺失、否定与未知的处理方式;
  • Projection策略及其实现版本;
  • Verdict规则与引擎版本;
  • 数值精度、排序与决胜规则等运行时条件;
  • 用于再次识别同一张图所需的规范化规则。

如果同一份Closure在同一运行时下执行却得出不同的Verdict,那么计算层存在缺陷。如果Closure本身不同,那么分歧就可以被定位到输入、Projection策略、Accepted Fact、规则或运行时中的某一处。

确定性并不意味着完美地认知现实,而是意味着同一个封闭世界必须以同样的方式计算

完整走一遍案例

房东断言七月的房租未付。租户断言房租已在五号转账。经最终确认的银行账本显示,房东当天确实收到了一千美元,但转账备注为空。合同要求每月五号前支付一千美元。

开放Claim账本保留了全部四条记录,不让任何一条覆盖另一条。

Claim内容来源状态
Claim A七月房租未付房东断言
Claim B房租已在五号转账租户断言
Claim C房东账户在五号收到一千美元经最终确认的银行账本
Claim D月租一千美元,五号前到期有效合同

Projection将问题收窄为:“七月房租拖欠是否已被确立?“它认可该银行账本对该账户与该时段而言是完整的,同时应用一条策略:在没有备注或独立协议的情况下,不推断该笔付款应归属于某项特定债务。

Claim C与Claim D支持了已被接受的Proposition。Claim B的日期与金额得到Claim C的支持,但其是否归属于七月房租仍然未知。Claim A只是一方对其所期望结论的断言,并非未付款的独立证据,因此它不会因为被重复陈述而成为Accepted Fact。

GAF记录如下:

The contract required monthly payment by the fifth.       [accepted]
The landlord received the contractual amount that day.    [accepted]
Allocation of that payment to the July debt is unresolved.[unknown]
July rent delinquency has not been established.            [not derived]

Closure将这份GAF与Projection策略、账本的完整性范围、截止时间以及Verdict引擎绑定在一起。Verdict并非delinquent(拖欠),而是undetermined(未确定)。因此Authorized Action不是催缴函,而是要求确立归属的请求。

后来,一张带有"July rent"备注的原始转账收据作为新的Claim出现。旧的Closure被保留下来。一个Reopen事件启动了新一轮Projection。如果该备注被采纳,新的GAF就会接受该笔归属,新的Closure随之产生paid(已付)这一Verdict。

这个例子中的Projection,并不是对"谁听起来更可信"进行投票。它固定的是问题、完整性边界、原子Proposition、缺失数据的含义,以及构建一个可判定的事实状态所需的推导规则。

把决策保留为一份合同

这个例子仍然存在一个瓶颈。如果每一笔没有备注的付款都要求房东确认归属,不确定性并未被消除,只是被转移进了人工审批队列。

第一次确认应当解决当次的案例。而一个反复出现的模式应当做得更多:把这个决策保留为一份合同,使其能够成为未来Projection的输入。

假设房东确认了这笔付款,双方也都认可如下规则:

当一笔付款来自租户的注册账户、在到期日前到达、金额与合同一致,且没有其他未清偿债务时,该付款被归属于当月房租。任何违反上述条件的情形都需要复核。

这产生了四种不同的记录:

Case Decision    ── this payment satisfied the July rent
Policy Candidate ── matching future payments may satisfy monthly rent
Ratified Contract── authorized conditions, exceptions, effective date, version
Policy Exception ── ambiguity outside the contract returns to human review

下一次Closure会引用这份已被批准的策略版本。匹配的Claim随后可以被投影,而无需再次询问房东同一个问题;只有新出现的例外才会消耗人工判断。人工决策只被使用一次,而它所授权的结构则会持续发挥作用。

一次决策还不能算作一项策略。系统不能悄悄地把一次确认变成先例。拥有权限的人必须批准该规则的适用范围、例外情形、生效日期,以及它是否具有追溯力。在此之前,该案例记录只是一个Policy Candidate。如果一份新合同没有明确声明具有追溯力,它只约束此后的Closure,不会改写此前的Closure。

这为GAF增加了第二个保留循环。Claim保留了从现实世界进入系统的内容。GAF与Closure保留了某次特定判决所接受的内容。而一份已被批准的策略,保留了一位被授权的人如何解决一种反复出现的模糊情形——这样,下一次Projection就能从一份更强的合同出发,而不是重新面对同样的瓶颈。

不同的错误需要不同的修复方式

一旦Projection、Verdict与Action被分离开来,一个"错误的结果"就会分解为不同类型的失败:

  • 遗漏了相关的Claim,是采集错误;
  • 对来源或Proposition的评估有误,是Projection错误;
  • 对正确的Accepted Fact应用了错误的规则,是计算错误;
  • 未能准确呈现一个正确的Verdict,是沟通错误;
  • 针对错误的对象、限额或权限执行了一个正确的Verdict,是Action错误

这套分类并不能消除错误,但它告诉我们该重新打开哪一环。

采集错误需要另一份Claim。Projection错误需要复核Evaluation与Derivation。计算错误可以在保留Closure的同时,通过修正并比对引擎来解决。Action错误不应改写事实,而是需要在外部世界中进行撤销、更正或补偿。

把这些统统称为"模型出错了”,会抹杀这些区别。一旦原因丢失,系统就无法证明修复之后到底改变了什么。

Accepted Fact 不等于行动的权限

Accepted Fact本身不赋予任何权力。“房租拖欠了"与"本系统可以发送催缴函"是不同的Proposition。

Verdict引擎消费一份Closure,并输出带有计算轨迹的判决。Authorized Action必须单独核查:

  • 谁授权了这项效果;
  • 它针对的主体与客体是什么;
  • 适用的金额与频率限制;
  • 重试是否具有幂等性;
  • 什么样的凭据能证明其已被执行;
  • 一次错误的效果该如何撤销或补偿。

事实生成、判决与执行之所以被分离,是因为它们各自行使着不同种类的权限。

一个封闭的世界必须保持可重新开启

一份Closure必须是不可变的,但不能因此假装自己是永恒真理。证据可能迟到,某个来源可能被证明是伪造的,某项策略可能被发现存在缺陷,受影响的一方也可能提出申诉。

覆写旧的结果会摧毁当时那个行动之所以被采取的解释。因此Reopen是一个新事件,而不是对旧Closure的编辑。

新证据、策略变更、申诉或缺陷报告会被记录下来。依赖图会识别出可能受影响的Closure。如果一套被授权的程序允许重新开启,新一轮Projection就会产生新的GAF、Closure与Verdict。新的结果会说明它替代了什么,而不会覆写历史。

如果一个Action已经改变了现实世界,重新计算无法逆转它。撤销、更正通知、退款与补偿本身都是新的Action,拥有各自的授权与凭据。

可重新开启性并不会削弱封闭性。恰恰相反,当系统既能保留曾经被固定下来的东西,又只允许通过一套明确声明的程序进行替换时,Closure才真正具有合法性。

LLM 无法替代这道边界

大多数端到端的LLM应用,会把问题理解、检索、来源选择、事实认定、规则适用与表达全部混在一次生成中完成。如果被采纳与被拒绝的Claim没有被外部化,同一个答案就无法证明它出自相同的依据。答案的改变也无法揭示,究竟是输入边界变了,还是计算本身变了。

一段冗长的解释或生成出来的推理轨迹,并不能解决这个问题。事后的解释不是实际使用的输入、规则与权限的执行记录。

在这道边界周围,LLM依然是有用的。它们可以从非结构化来源中提取候选Claim,提议原子Proposition,解释冲突与未知项,起草Projection策略,并将一个已固定的Verdict转译为自然语言。

一个提议不等于一次采纳。由LLM生成的Claim、映射、Evaluation或规则,必须成为带有出处信息的版本化输入,并通过一套被授权的程序。高风险行动的最终权限,不能隐藏在自然语言生成之中。

贡献在于这条链

这些组成部分并非全新事物。封闭世界推理、出处、真值维护系统、事件溯源、规则引擎、法律事实认定与申诉制度,都有着悠久的历史。《On Closed World Data Bases》确立了开放世界与封闭世界的区分,而PROV-O: The PROV Ontology则为通过活动与责任主体追溯实体的过程,标准化了一套图模型。

贡献在于这条链,它被组装成一套统一的责任协议:

Claims → Projection → GAF → Closure → Verdict → Action → Reopen

每一个箭头都是一道权限与错误的边界,而不仅仅是一次数据转换。保留Claim的行动者、接纳前提的权限、计算Verdict的引擎,以及改变现实世界的网关,各自在不同的合同下运作。它们的记录相互连接,但没有任何一个环节会悄悄继承另一个环节的权限。

GAF不是又一种数据库的发明,而是一项提议:让从开放主张到可执行事实的整个通路变得可审计、可复现、可申诉

目标是可控的封闭,而非完美的真理

我们无法建造一个知晓整个开放世界的系统,但我们可以建造一个能够陈述自己接受了哪些信息作为前提、以及为何接受的系统。

开放的Claim保留了分歧与不确定性。Projection固定了目的、范围、举证责任与缺失的含义。GAF把被接纳的前提与它们的关系及血缘连接起来。Closure冻结了重放所需的条件。Verdict在封闭的输入之上进行计算。Action在独立的权限下改变现实。Reopen重新审视这道边界,而不抹去历史。

有了这一循环,错误就不再是一整团不透明的幻觉。我们可以区分出系统遗漏了什么、错误地接受了什么、从已接受的前提出发算错了什么,以及在一次正确判决之后执行错了什么。

把Claim投影为GAF,并不是让机器变得无懈可击的方法。它固定了机器据以判决的依据,使这个判决能够被复现、被质疑、被纠正。

“数学之所以为真,是因为它在一个封闭系统内计算"这句格言,指向的是一个更狭窄但可以站得住脚的事实。一旦公理、定义与推理规则被固定下来,该形式边界内的一次推导就可以被检验和重放(Formalism in the Philosophy of Mathematics)。但这并不意味着每一个数学真理都是可计算的、每一个命题都是可判定的,或者每一个公理系统都是完备的。Closure保证的是一次已被采纳的推导的可复现性,而非全知。

现实世界的判决在计算之前也需要同样的纪律。GAF本身不是真理。它是那个固定了从开放现实中接受了哪些前提的封闭世界,使得一个判决能够在其中被复现——并被质疑。

相关文章

延伸阅读(外部)

参考文献