99.9% 置信被拒收,76% 靠两个佐证进场

99.9% 置信的判断被拒之门外,76% 的判断带着两个独立佐证进了场。决定一个判断能不能改权限状态的,不是分数的嗓门。

下面这张表来自我维护的公开仓,Evidence Admission v0.1 刚落地------它是第 4 篇那场 3/5 输给 5/5 的对照实验之后,"admission semantics"四个字第一次有了可执行、可测试的形状。

先钉对账表(我在本机实跑公开代码所得,cargo run --bin admission):

案例 置信度 来源可靠性 独立佐证 虚拟时间 准入结果
B 970k ppm 400k ppm 0 有效 Reject(SourceBelowTrustFloor)
E 990k ppm 990k ppm 3 已过期 Reject(Expired)
D 760k ppm 800k ppm 0 有效 Hold(NeedsCorroborationOrReview)
C 760k ppm 800k ppm 2 有效 Accept(Corroborated)

表里置信度一律整数 ppm(0.94 → 940000),浮点在 adapter 就止步;时间用虚拟 tick 而非墙上时钟,过期就是两个整数的比较。

B 和 C 放一起看:97 万 ppm 的置信救不了 40 万 ppm 的来源,76 万 ppm 的中置信加上两个独立佐证反而够格。"分数够高就改状态"这条接线,在准入层被显式拆掉了。

本篇讲三件事:这条规则为什么长这样;Hold 这个第三态怎么对付误报的时间爆炸半径;以及最重要的一句------它没解决什么。

一、第 4 篇的账单,这一层是来还的

先复述输局。第 4 篇场景二里,stateful 臂 3/5 输给 stateless 臂 5/5:一次 0.93 的越权误报被直接接纳为持久证据、挂起授权,后面两次良性调用连续错杀,直到人工修复。

这笔 0.93 记在实验数据里【公开仓库 Thneoly/r2r-jev·experiments/stateless-vs-stateful/false-positive.csv】。

输因写在 compare.rs 的注释里,逐字【公开仓库 Thneoly/r2r-jev·src/bin/compare.rs】:

rust 复制代码
// Minimal admission semantics for this public experiment:
// a threshold-crossing judgment is admitted as persistent evidence
// and suspends authorization until an explicit repair.

越线即挂起:没有佐证、没有分级、没有过期。而实验 README 给出的正确链路是四段,逐字【公开仓库 Thneoly/r2r-jev·experiments/stateless-vs-stateful/README.md】:

text 复制代码
Jev score -> evidence -> admission semantics -> relation transition

v0.1 做的事,就是把中间两段从一句话变成规范文档加代码加实验。整条管线,逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

text 复制代码
Judgment
   ↓
EvidenceObserved
   ↓
Admission
   ├── Reject
   ├── Hold
   └── Accept
          ↓
   EvidenceAdmitted
          ↓
   typed R→R rules
          ↓
Relation state transition

中心判据逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

"A judgment may produce evidence. Only admitted evidence may become an input to deterministic relation transitions."

注意这条判据的措辞:连 Accept 都不能直接改 Trust、Delegation、Authorization------它只发出类型化的 EvidenceAdmitted 事件,关系转移另归 R2R runtime 管。

规范开头就把要拆的接线画了出来,不安全的捷径长这样,逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

text 复制代码
Jev score >= threshold
        ↓
Authorization = Suspended

接着是一句判词:"That makes a model output behave like a permission mutation."------模型输出直接变成了权限变更。第 4 篇场景二输掉的姿势,和这条捷径一字不差。

二、五维信封:判断先降格为证据候选

判断到达后,准入层做的第一件事不是评估,是打包。观察到的判断被封进一个 evidence envelope【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

text 复制代码
e = <id, kind, subject, scope, source, c, r, k, t_o, t_x>

策略只评估其中五个维度,主 README 的清单逐字【公开仓库 Thneoly/r2r-jev·README@3c04a05】:

text 复制代码
typed evidence kind
confidence in integer ppm
caller-bound source reliability
independent corroborator count
virtual-time expiry

五维里藏着一个关键的权力分配:置信度 c 是模型报的;可靠性 r、佐证数 k、两个时间戳,模型一个都报不了。规范的 trust rule 逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

"source_reliability_ppm, corroboration identity/count, observation tick, and expiry are not self-asserted by the probabilistic model. They are assigned or verified by the adapter/runtime boundary."

翻译一下:模型可以喊 99.9%,但"你说话有几分准"这一栏不由你本人填写。这是整个准入层的地基,不变量 A4 一句话钉死:"The model MUST NOT choose its own source_reliability_ppm."

三、七步判定:顺序即规范

v0.1 的完整策略,逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

text 复制代码
1. if kind is unsupported
      → Reject(UnsupportedKind)

2. if now_vtick > expires_vtick
      → Reject(Expired)

3. if source_reliability < 600_000
      → Reject(SourceBelowTrustFloor)

4. if confidence >= 900_000
      and source_reliability >= 800_000
      → Accept(Strong)

5. if confidence >= 700_000
      and source_reliability >= 700_000
      and independent_corroborators >= 2
      → Accept(Corroborated)

6. if confidence >= 600_000
      → Hold(NeedsCorroborationOrReview)

7. otherwise
      → Reject(InsufficientSupport)

七个阈值全是代码常量,src/admission.rs 里与规范一字不差。三个设计决定值得停下来看。

第一,顺序是规范的一部分。原话:"The ordering is normative for v0.1."【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】

kind 检查排在一切分数逻辑之前------案例 G,99.9% 置信、99.9% 可靠性、9 个佐证,但 kind 未知,Reject(UnsupportedKind)。

实验 README 的注解逐字【公开仓库 Thneoly/r2r-jev·experiments/evidence-admission-v0.1/README.md】:

"unknown semantics cannot be smuggled in through a high score"

未知语义没法借高分走私进门。

第二,置信度和可靠性不乘起来。规范原话【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

"There is deliberately no multiplication of confidence × reliability and no claim that the inputs form a Bayesian posterior. They are separate policy dimensions."

【从业者判断】乘积的诱惑在于优雅:两个 0.7 压成一个 0.49,一道阈值搞定。代价是把两种不同性质的失败混进一个数------高置信乘低可靠性会得到一个"中等"的数,看似不够高所以没事,但真正的问题是那个低可靠性根本不该有发言权。v0.1 让它们各守各的门:可靠性先过地板线,置信度再分级。

第三,每个决定都带版本号。A7 规定(SHOULD 级)每条记录应带 admission_policy_version = "0.1",政策将来变了,旧记录的重放语义不丢。

四、故意的反例:99.9% 拒收,76% 放行

这套策略最有说服力的部分,是它给自己预埋的反例。主 README 逐字【公开仓库 Thneoly/r2r-jev·README@3c04a05】:

text 复制代码
99.9% confidence + low-reliability source -> Reject
99.0% confidence + expired evidence      -> Reject
76.0% confidence + no corroboration      -> Hold
76.0% confidence + 2 corroborators       -> Accept(Corroborated)

第三行和第四行是同一枚硬币的两面:76 万 ppm 单源,差一口佐证;凑齐两个独立佐证,进场。规范第八节的案例表后面跟着一句定位,逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

"The second and fifth rows are intentional counterexamples to confidence alone ⇒ authority."

第一行的底气来自单测。测试函数名本身就是立场------high_confidence_does_not_override_low_source_reliability。

999000 ppm 置信配 400000 ppm 可靠性,断言结果是 Reject(SourceBelowTrustFloor)【公开仓库 Thneoly/r2r-jev·src/admission.rs】。我本机实跑,7 个测试全过。

"独立佐证"四个字也有定义,A5 逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

"independent_corroborators MUST count distinct trusted provenance identities, not repeated samples from the same source."

同一个模型问八遍,佐证数还是零。

【从业者判断】这两组反例的分量要放在行业现状里看:多数 guardrail 的准入口径是"过线就进",分数是唯一货币。v0.1 把货币换了------高置信买不到低可靠源的入场券,独立佐证能买到中置信的。这不是调阈值,是换了准入的语法。

五、Hold:判断和权限之间的第三态

三个结果里最陌生的是 Hold。为什么需要它,规范讲得很直白,逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

"Without Hold, the system is forced into a binary choice:"

text 复制代码
ignore evidence
or
change governance state

"That makes false positives expensive."

二选一的世界里,误报很贵:要么装没看见,要么改状态。改了状态,误报就不是一次拒绝,而是一段时间里的持续拒绝------第 4 篇场景二的两笔 false_deny 就是这么来的。

Hold 是第三态:证据可信但不够格,先搁着。它有四个出口,逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

text 复制代码
Hold
   ├── corroborated later → Accept
   ├── human confirms     → Accept
   ├── contradicted       → Reject
   └── expires            → Reject

注意四条出口没有一条通向"直接改关系"。

A2 钉死:"Hold MUST NOT cause a governance Relation transition by itself."【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】

规范给 Hold 的判词,直接点名第 4 篇的术语,逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

"This is the main v0.1 mechanism for limiting the temporal blast radius of a single uncertain judgment."

temporal blast radius,时间爆炸半径------就是 stateful 臂在场景二里输掉的那个东西。

Hold 的覆盖范围有明确边界,它治的是"中等置信 + 单源"这一带;这条边界之外发生什么,第七节的反方一会直面。

这一带的疗效也没被宣布为事实,它被写成可证伪假设 EA-H1,逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

"Compared with score >= threshold → persistent suspension, an admission layer with Hold should reduce the number/duration of persistent false-deny states under uncertain single-source judgments."

顺带一条容易漏的:A3 管的是进门前的新鲜度------"Evidence with now_vtick > expires_vtick MUST NOT be admitted." 过期证据是 inert 的,99 万 ppm 也不行(案例 E)。

但进了门、已经触发关系转移的证据会不会随时间失去效力?v0.1 没有答案,规范把"explicit expiry 之外的 decay 函数"列进了不做清单。这条线留给第八节。

六、Accept 也不是权限:准入不裁决关系效果

最反直觉的一点在 Accept 之后:什么都不发生------除了发出一个类型化事件。逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

"EvidenceAdmitted is an input event, not a direct state mutation."

Accept 的含义只是"这份证据够格进治理",不是"该挂起谁"。规范里的不等式一句话说清:Admission(e) != AuthorizationDecision(e)。

同一份 Accept(Strong) 的 BeyondScope 证据,当前 demo 的规则包映射成三级降级(Trust 降 Warning、Delegation 降 Degraded、Authorization 挂起)。

另一个规则包可以合法地改成完全不同的反应,规范 §5 给了这个反例,逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

text 复制代码
EvidenceAdmitted(BeyondScope, Strong)
        ↓
create Supervision
        ↓
keep Authorization Active but constrained

同样一条强证据,一个规则包选择挂起,另一个选择留人在监督下干活------这个分叉不归准入管。架构文档的判词逐字【公开仓库 Thneoly/r2r-jev·docs/architecture.md@3c04a05】:

"That mapping belongs to R2R semantics, not to Jev and not to Admission."

实跑 fixture demo,第一幕的输出(本机实跑):

text 复制代码
Act 1: admission separates evidence from authority
  JudgmentObserved  event=ev-0001 provider=fixture:jev-style
  judgment          beyond_scope=0.940000 destructive=0.720000 tool=merge_pull_request
  Evidence          evidence-0001 kind=BeyondScope confidence=0.940000
  Admission         policy=0.1 Accept(Strong)
  Evidence          evidence-0002 kind=DestructiveAction confidence=0.720000
  Admission         policy=0.1 Hold(NeedsCorroborationOrReview)
  Trust             Active -> Warning             trust-0001 (caused by evidence-0001)
  Delegation        Active -> Degraded            delegation-0001 (caused by evidence-0001)
  Authorization     Active -> Suspended           authorization-0001 (caused by evidence-0001)
  Decision          DENY merge_pull_request (accepted evidence changed persistent governance state)

看 caused by 那三行:三级降级全部由 evidence-0001 引起------只有过了准入的那条证据摸得到关系。0.72 的 DestructiveAction 停在 Hold,不发治理活性证据。

而它没有消失:provenance 链里挂着 ev-0001 -> evidence-0002[DestructiveAction:Hold(...)],事后审计照样查得到。

后两幕接着补完闭环:Act 2 里 0.18/0.12 两条良性判断全部 Reject(InsufficientSupport),关系原样不动,早先的挂起继续管住调用。

Act 3 里 human_override 修复授权并创建 Supervision【公开仓库 Thneoly/r2r-jev·README@3c04a05】。

架构文档一句话总结 Hold/Reject 证据的状态,逐字【公开仓库 Thneoly/r2r-jev·docs/architecture.md@3c04a05】:

"A held or rejected evidence record remains explainable without becoming authoritative."

可解释,但无权威------这就是第三态在 provenance 里的样子。

重放确定性也是不变量。A6 逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

"Given the same evidence envelope, admission policy version, and virtual tick, the admission result MUST be identical."

同一个信封、同一版政策、同一个虚拟 tick,结果必然相同。加上 A1("A Jev/model result MUST NOT directly set Relation phase or fields."),七条不变量 A1--A7 构成这层的全部骨架。

七、预埋反方:三条一定会来的质疑

反方一:场景二在 v0.1 下照样输,Hold 救的是谁?

算一笔账:误报是 930k ppm【公开仓库 Thneoly/r2r-jev·experiments/stateless-vs-stateful/false-positive.csv】、demo 的来源可靠性 850k【公开仓库 Thneoly/r2r-jev·src/admission.rs】。

套 v0.1 策略:过地板线,930k ≥ 900k 且 850k ≥ 800k------Accept(Strong)。挂起照样发生,爆炸半径照样在。

这是真的,v0.1 不假装修好了场景二。Hold 治的是 60 万到 90 万之间的单源带。

对"高置信 + 高可靠"的组合,v0.1 的赌注押在可靠性外部绑定上------源如果持续误报,配置层面可以把它调低,但"自动调"不存在,规范把"learning source reliability automatically"明确列为不做。

实验 README 也把丑话写在了前头,逐字【公开仓库 Thneoly/r2r-jev·experiments/evidence-admission-v0.1/README.md】:

"The expected result is not assumed. A policy that overuses Hold may delay necessary enforcement; a policy that overuses Accept may retain the false-positive blast radius of the direct-threshold baseline."

三条可证伪假设 EA-H1/H2/H3 摆在规范里,后面跟着一句,逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

"None of these are considered established by this specification alone."

v0.1 交出的是假设和度量方案,不是结论。真正压掉高置信误报的半径,要等第八节里那几个还没答案的问题。

反方二:阈值全是拍的,凭什么信?

对,600/700/800/900k 没有任何实证推导。规范自己认账:不做清单里有 "optimal thresholds",定位声明是 "It is not claimed to be a universal trust model."

demo 里那个 850k,代码注释逐字【公开仓库 Thneoly/r2r-jev·src/admission.rs】:

rust 复制代码
/// Reproducible demo configuration only. 850k is a configured trust weight,
/// not a measured claim about Jev accuracy.

阈值的价值不在数值在结构:常量、有序、版本化、可证伪。主 README 的定位是 "intentionally small and falsifiable"。

实验 protocol 已经备好打脸的尺子------同一份判断流,直接阈值基线对准入 v0.1,量六项【公开仓库 Thneoly/r2r-jev·experiments/evidence-admission-v0.1/README.md】:

  • persistent false-deny duration
  • violation duration after independently corroborated true violations
  • manual repair count
  • held-evidence resolution rate
  • explanation/provenance depth
  • replay determinism

反方三:七行 if 配叫"语义"?

算术上确实七行。A1 禁止判断直接改关系字段,A4 禁止模型自报可靠性,A6 保证重放一致,Accept 只发事件不动状态。

同样的七行写在应用胶水里,以上保证一条都没有;写成带版本号的确定性内核,每一步都能进 provenance。【从业者判断】guardrail 的可信度来自它拒绝做什么,而不是它算了什么。

八、v0.2 的八个开放问题

v0.1 的不做清单有八条,逐字【公开仓库 Thneoly/r2r-jev·docs/evidence-admission-semantics-v0.1.md】:

text 复制代码
calibration of Jev probabilities
learning source reliability automatically
Bayesian evidence fusion
adversarial collusion between corroborators
evidence decay functions beyond explicit expiry
organization-level reconciliation
optimal thresholds
automatic human-override policy

这份清单不是免责声明,是路线图。v0.2 的问题单如下------只列问题,不给机制答案,因为答案还没挣到【从业者判断】:

# 问题 一句话展开
1 Source Identity source 到底指什么------模型、部署、端点还是调用方?可靠性挂错一层,A4 就是摆设
2 Reliability Relation 可靠性该永远是配置常数,还是该有历史、随表现变化?由谁记、谁能改?
3 Independence A5 排除了同源多采样,但同一上游的两个实例算独立吗?合谋怎么排除?
4 Correlation 独立不等于不相关:同一场外部事件触发的两个信源,算两份佐证还是一份?
5 Contradictory 两条都过了准入的证据互相矛盾,准入层裁决,还是留给下游?
6 Accumulation 五条 60 万 ppm 攒起来,该不该等效一条 90 万?不融合,累计逻辑放在哪层?
7 Decay 过期管进门前的新鲜度;进了门、已改了关系的证据,要不要随时间失去效力?
8 Scope 信封里有 scope 字段:同一个源在 repo-alpha 可靠、在 repo-beta 不可靠,算一个源还是两个?

八个问题里一半能在上面的不做清单里找到原型。它们共同指向一个更大的没答案的问题:准入该不该只有"配置常数"一种记忆形态。这题我不答------答案挣到之前,说了就是编的。

九、系列收官:现在就能做的事

六篇到此。第 2 篇立的边界------"A probabilistic judgment is evidence, not permission."【公开仓库 Thneoly/r2r-jev·docs/why-r2r-after-jev.md】------当时只是一句话。

第 4 篇证明这句话缺一段链路就会输掉一场对照;本篇给缺的那段起了名字、定了七步规范、写了七个测试。第 5 篇说生态里"判断之后"那块地没人种,这篇是往地里放的第一块砖。

系列以一张问题清单收尾,而不是胜利宣言------因为这个项目的真实状态就是:边界立住了,答案还没挣到。

两分钟复现(需要 Rust 工具链):

bash 复制代码
git clone https://github.com/Thneoly/r2r-jev.git
cd r2r-jev
cargo run --bin admission
cargo test --bin admission

代码确定性:改 src/bin/admission.rs 里任一案例的 ppm 或佐证数再跑,同输入同输出。把案例 B 的可靠性从 400000 改到 800000,看着同一条 97 万 ppm 的判断从 Reject 变 Accept(Strong)------那一次重跑,比这篇全文都直观。

30 秒自检,三问自己的系统:

  1. 从模型分数到状态变更,中间有几段?答"一段",你在运行第 4 篇的场景二。
  2. 来源可靠性这一栏,谁能填?答案是"模型自己"或"没人",A4 已破。
  3. "先记着,等佐证"这个状态在你的系统里叫什么?没有名字,说明你只有两态:忽略,或直接改状态。

第三问答不上来的,把第五节的四个出口抄走,够用来立项了。

声明与标注约定

  • 本系列与 TypeSafe AI 无隶属、无赞助关系;Jev、TypeSafe、System One 仅用于描述其公开 API,权利归各自所有者。
  • 作者即公开仓库 Thneoly/r2r-jev 的维护者,文中引用该仓库处为作者自己的公开项目------正因为是自己的项目,反例和没解决的问题才必须一起亮出来,否则这个系列与软文无异。
  • 实跑数字与日期:本文全部实跑数字(A--G 案例输出、fixture 三幕输出、7 个测试通过)为 2026-09-22 本机实跑公开代码所得,代码确定性,任何人可复现。
  • commit 锚定:主分支 commit 3c04a05(Evidence Admission 演进后的 HEAD)。README 与 docs/architecture.md 的引文锚定该 commit。
  • 新增资产与未改动:规范文档、src/admission.rs、src/bin/admission.rs、实验 protocol 为本次演进新增;experiments/stateless-vs-stateful/ 与 src/bin/compare.rs 未随演进改动,引文照常。
  • 引文保真:引用规范文档与代码的判据均逐字保真并标注来源档;无来源支撑的个人观点一律标注【从业者判断】。
相关推荐
Thneonl1 小时前
stateless 4/6 漏判,stateful 3/5 错杀:该信谁?
人工智能·架构
mldong1 小时前
同一个审批流引擎,我写了两次:一次 11226 行,一次 7036 行
后端·架构
百万蹄蹄向前冲1 小时前
一张平面图把学校做成2D游戏
前端·人工智能·后端
机器之心1 小时前
突发:Claude自主发现未知生物系统,或能编辑基因
前端·人工智能·后端
犀利豆1 小时前
AI 老板五分钟挂出招聘启事,四个月后开除了第一个人
人工智能·llm·aigc
乱码三千1 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
墨林陌1 小时前
AI 热点日报(2026-09-24):奥尔特曼安理会呼吁建全球AI标准,DeepSeek披露智能体沙箱平台DSec
人工智能
9i编程1 小时前
9. 把 DDD 开源脚手架化为自己的:联调照出的问题与事件重构——租户权限、按钮样式与全局 DomainEvent 反哺 SKILL
人工智能·openai·ai编程
桃西西呀1 小时前
从手写数字到ImageNet冠军:CNN架构20年,为什么越深越难训?
人工智能·计算机视觉·llm