资讯动态

RuView Evidence Engine 深度解析:为物理感知而生的 Append-Only 精度账本(ADR-304 与 `ruview-evidence` 实现)

发布时间:2026/9/10 14:13:13 来源:尧图企业网站定制
RuView Evidence Engine 深度解析为物理感知而生的 Append-Only 精度账本ADR-304 与ruview-evidence实现【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView导读本文以 RuView 感知基座项目perception-substrate programADR-300中的第 4 号原语——证据引擎Evidence EngineADR-304为主题结合其参考实现 cratev2/crates/ruview-evidence讲解 RuView 如何用一套按 (房间, 设备, 主体) 上下文分片的、只追加的、诚实分级的账本来回答 OEM 与集成商真正关心的问题这个模型在这个房间、这台设备、这个主体上到底表现如何校准还有多新鲜。读完本文你将理解证据引擎的设计动机、EvidenceRecord/EvidenceLedger/EvidenceSlice三类核心对象的用法与不变量以及它在能力证书ADR-318、基准计分板ADR-317、见证链ADR-319中所处的枢纽位置。一、为什么物理感知需要MLflow而不是又一个仪表盘ADR-304 文档开门见山MLflow made ML experiments trackable; physical sensing needs the equivalent for deployed accuracy, drift, and evidence level——MLflow 让机器学习实验可追踪而物理感知WiFi CSI 感知需要的是部署后精度、漂移与证据级别的可追踪。这是两者本质的区别实验期追踪模型还在训练指标可以被覆盖、被迭代部署期追踪模型已经在真实房间跑推理昨天的数字被今天的数字覆盖等于抹掉了退化历史。RuView 的战略评估ADR-300把该原语判定为比又一套姿态网络更有商业价值真正能打开 OEM 与集成商对话的不是更高的头条精度数字而是一份可辩护、可审计的记录说明模型在具体房间、具体设备、具体主体上、随时间推移到底表现如何。因此证据引擎的形态是一个追加式append-only账本ledger而不是会覆盖昨天的数字的仪表盘。ADR-304 明确它复用了项目内已有资产而非重新发明RuField 的 provenance/signature 类型ADR-260/262/277/279—— 现成的签名、带来源记录类型AetherArena 见证账本模式ADR-149—— 只追加、见证锚定的计分结果账本作为结构模板frame::EvidenceLevelL0–L5ADR-282—— 每条记录必须携带的证据级别ADR-302 的DomainState、ADR-137 的QualityScore、ADR-301 的证书版本与年龄 —— 需要逐条累积的按推理信号。在 ADR-300 的原始语映射表docs/adr/ADR-300-perception-substrate-program.md中证据引擎是第 4 号原语所属 Phase 1证书骨干上游是 OOD 检测ADR-302与校准证书ADR-301下游对接能力证书ADR-318与真实基准服务ADR-317。二、方案取舍为什么不用 MLflow也不写普通文件ADR-304 记录了三类候选方案及否决理由把精度写进普通文件 / 指标仪表盘—— 被否决可变的、未签名、无上下文范围、无法跨时间比较这正是要填补的缺口。直接复用通用实验追踪器如 MLflow—— 被否决它是实验期工具而非部署期工具没有房间/设备/主体上下文的概念不懂校准年龄、证据级别或签名 provenance还会引入外部服务依赖违背基座边缘优先、依赖最小的方向。构建原生只追加证据账本复用 RuField 记录类型与 AetherArena 账本模式—— 被采纳。被采纳的决策原文是构建一个证据引擎——按(room, device, subject)为键的只追加精度账本每个模型都会自动写入。而参考实现随后进一步把键细化成四元组(room, device, subject-class, model-version)见下文。三、实现落地ruview-evidencecrate 的整体设计证据引擎的参考实现位于 v2/crates/ruview-evidence/src/lib.rs是一个刻意保持**叶子化leaf、确定性deterministic、诚实honest**的纯 Rust crateLeaf只依赖serde/thiserror。EvidenceLevel阶梯在本地镜像定义避免把 frame crate 拉进来Deterministic不读墙钟、不用随机数记录时间由调用方注入账本只分配单调递增的追加序号Honest by construction证据级别由写入时的 provenance 固定账本记录只能通过只读引用被访问——不可变、不可升级在类型层面被保证。模块顶部用#![forbid(unsafe_code)]强制无 unsafe 代码这与文档中边界校验、不 panic的工程纪律一致。3.1 常量与 ID 边界MAX_ID_LEN 256任何上下文标识字符串的最大字节长度用于在不可信输入边界限制分配注释明确引用 CLAUDE.mdDEFAULT_MAX_RECORDS 1_000_000单个账本默认持有的记录上限可用EvidenceLedger::with_capacity调高或调低——防止失控生产者耗尽内存。3.2EvidenceLevelL0–L5 的忠实本地镜像实现中的EvidenceLevel枚举与 ADR-282 §4 定义在frame::EvidenceLevel上的语义一一对应其#[derive(PartialOrd, Ord)]使顺序承载逻辑summary 的取地板规则直接取minJSON 序列化采用SCREAMING_SNAKE_CASEL0…L5级别语义ADR-282L0仅仿真 / 合成无信号证据L1采集回放 / 启发式证据L2受控单一场景信号证据L3互证 / 留出房间与主体验证L4已校准的多站点现场证据L5生产、经见证 / 认证ADR-319ADR-304 强调这个阶梯是忠实本地拷贝而非独立刻度且每条EvidenceRecord恰好携带一个EvidenceLevel。3.3ProvenanceClass精度声明的诚实标签pub enum ProvenanceClass { Synthetic, // 仿真器/生成器产出 —— 结构上就是 L0ADR-276/301 Claimed, // 真实推理但没有 ADR-303 真值参照背书精度 Measured, // 由 ADR-303 参照 复现句柄背书 }关键规则类别由所用构造器决定无法别名——合成输入永远不能被铸造成Measured。这对应 ADR-304 正文引擎无法提升证据级别级别在写入时由 provenance 决定的诚实纪律。四、EvidenceContext账本按部署上下文分片的键pub struct EvidenceContext { pub room: String, // 空间/房间 idADR-306 pub device: String, // 签名设备 idADR-305 pub subject_class: String, // 经同意/可得的主体类别空串 无主体 pub model_version: String, // 产生推理的模型版本ADR-136 }身份由调用方提供ADR-306 空间 id、ADR-305 签名设备 id本 crate 把这些字段当作不透明的、有界句柄绝不自行发明。EvidenceContext::new在边界做双重校验room/device/model_version必须非空所有字段含可空的subject_class长度受MAX_ID_LEN约束违规返回EvidenceError::EmptyField或EvidenceError::IdTooLong。值得注意ADR-304 正文写的键是(room, device, subject)实现扩展为subject_class并附加model_version——因为部署精度必须按模型版本隔离且主体 id 只在经主体同意时才可用空串表示无主体而非缺失信息。五、AccuracyMetrics与EvidenceRecord一条记录装什么AccuracyMetrics是一个窗口内精度指标的紧凑载体字段均带严格的边界校验validate()字段含义校验规则moving_recall移动主体召回率[0,1]且有限stationary_recall静止主体召回率[0,1]且有限false_positive_rate误报率[0,1]且有限drift与 ADR-301 校准基线的指纹距离幅值有限且非负uncertainty预测不确定性有限且非负calibration_age_secs生效中的校准证书年龄秒ADR-301u64sample_count本条记录汇总的推理数必须 ≥ 1保证聚合权重非零EvidenceRecord承载context metrics level class reproducer timestamp_ns seq其中所有字段都是私有的没有 setter、没有mut访问器因此级别无法被升级、记录无法原地修改——更正是一条新记录。构造器决定 provenance 与级别实现层面有三个// 1) 合成记录强制 L0 Synthetic无路可升ADR-304 §3 EvidenceRecord::synthetic(context, metrics, timestamp_ns)?; // 2) 声称记录真实推理但无 ADR-303 参照级别由调用方按 provenance 设定 // 但绝不允许 L0L0 保留给合成输入——否则返回 SyntheticOnlyL0 EvidenceRecord::claimed(context, metrics, level, timestamp_ns)?; // 3) 测量记录精度由 ADR-303 参照背书必须携带非空且不超过上限的 reproducer 句柄 EvidenceRecord::measured(context, metrics, level, reproducer, timestamp_ns)?;timestamp_ns由调用方注入本 crate 永不自行读时钟保证确定性seq在append前为None入账后由账本盖章。六、EvidenceLedger只追加账本的三条核心 API// 新建空账本默认上限 1_000_000 条或给定上限 EvidenceLedger::new(); EvidenceLedger::with_capacity(max_records); // 追加按值消费记录盖上单调递增 seq 后存储 // 满员时返回 LedgerFull失控生产者无法耗尽内存 let seq: u64 ledger.append(record)?; // 只读视图只返回恰好匹配该上下文的记录保证单上下文 let slice: EvidenceSlice ledger.query(context);设计要点append按值消费记录调用方无法保留句柄去修改已存副本追加式在类型层面成立records()只返回共享引用整个 crate 不存在返回可变引用的 API测试注释明说如果存在mut访问器本测试就需要改它不存在正是这个不变量query永不跨上下文——切片只含与给定 context 等值的记录把两个上下文平均成一个数的 API 在结构上不存在summarize()返回每个上下文各一条摘要绝不产生跨上下文的全局平均对应 ADR-304 Consequencesnever paper over a thin context with a global average。七、EvidenceSlice::summarize纯函数聚合的精确语义聚合是一次对追加日志在查询时刻的纯函数——账本是真相源摘要是派生值永远不是权威呼应 CLAUDE.md 的 source over summaries 规则。其不变量值得逐条看空上下文 →NoEvidence与存在但精度为 0是两种不同结果。下游ADR-318必须把 no evidence 当作没有能力而不是0.0分级别取地板floor/min切片摘要级别 各记录级别的最小值。一条 L4 的强测量记录如果与一条 L0 合成记录同处一个上下文摘要被钉在 L0——切片永远不能报出高于其最弱记录的水平聚合类别不可升级只有所有记录都是Measured摘要类别才是Measured任何更弱的记录Synthetic/Claimed都会把聚合类别降级数值聚合规则moving_recall/stationary_recall/false_positive_rate/uncertainty采用sample_count 加权平均drift与calibration_age_secs输出最新记录按 seq 取最大者的当前值 历史最大值sample_count求和由于每条记录sample_count ≥ 1除数永不为零确定性summarize()不依赖墙钟同一条输入日志反复聚合约等测试summarize_is_deterministic_and_serde_round_trips同时验证了 JSON round-trip 稳定。ContextSummary结构永远携带其所属EvidenceContext并有has_evidence()方法区分Aggregated与NoEvidence——摘要不可能被误读成全局汇总。八、错误模型与容量安全一切越界都是返回值不 panicEvidenceError覆盖账本所有输入边界docs/adr/ADR-304-evidence-engine.md的 Validation 强调no variant panicsmalformed input is always a returned error对齐 CLAUDE.md错误变体触发场景EmptyField { field }必填上下文字段为空IdTooLong { field, len, max }上下文/reproducer 标识超MAX_ID_LENRateOutOfRange { field, value }比率指标超出[0,1]或非有限NegativeMagnitude { field, value }幅值指标为负或非有限ZeroSamplessample_count为 0SyntheticOnlyL0非合成记录试图以 L0 铸造MissingReproducer测量记录缺 reproducer 句柄LedgerFull { max }追加时已达容量上限九、测试如何锁住不变量src/lib.rs内置单元测试ruview-evidence在源码文件底部直接内嵌约十组测试是理解 ADR-304 语义最直接的可执行规格见 v2/crates/ruview-evidence/src/lib.rs 的mod testsappend_assigns_monotonic_seq_and_query_filters_by_context—— 序号 0/1/2 单调递增query(kitchen)只命中 kitchen 的两条记录且断言切片内每条context()都等于 kitchenrecords_are_append_only_no_in_place_edit—— 更正以第二条measured记录追加原记录seq0、sample_count100、reproducerrepro-1保持原样未被改动no_pooling_across_contexts—— kitchen 好recall1.0、bedroom 差recall0.0summarize()返回两条独立摘要测试注释点明若存在全局平均它会得到 0.5 并掩盖差上下文——API 不提供该值evidence_level_floor_is_the_minimum_never_an_upgrade—— L4 测量记录 L0 合成记录 → 摘要级别被钉在L0、聚合类别被降为Syntheticsynthetic_is_forced_l0_and_cannot_be_upgraded—— 合成记录级别必为 L0claimed(…, L0, …)返回SyntheticOnlyL0类型无set_levelempty_context_is_no_evidence_not_zero_accuracy—— 从未出现过的上下文query为空、has_evidence()为假、枚举等于NoEvidence显式断言它不是Aggregated的零精度摘要summarize_is_deterministic_and_serde_round_trips—— 同样输入两次聚合结果相等加权平均验算权重 100/300 → recall0.8级别取 L3、L4 的地板 L3JSON round-trip 等值boundary_validation_rejects_malformed_input_without_panicking—— 空 room →EmptyField、超长 id →IdTooLong、moving_recall1.5→RateOutOfRange、uncertaintyNaN→NegativeMagnitude、sample_count0→ZeroSamples、空 reproducer →MissingReproducerledger_capacity_is_bounded—— 容量 1 的账本第二条追加返回LedgerFull { max: 1 }。ADR-304 的 Validation 还规划了跨 ADR 测试ruview-evidence要能够摄取 ADR-302 的DomainStatePhase 2 再摄取 ADR-303 的一致性报告一份 ADR-318 测试从账本切片铸证书、一份 ADR-317 测试从账本读取精度。真实部署证据来自带 ADR-303 参照的实时 ESP32 捕获、已填充的账本是成熟度里程碑按 CLAUDE.md 要求硬件证据合成账本按构造即为 L0。十、在证书骨干中的枢纽位置账本如何被下游消费证据引擎不是孤立组件而是 ADR-300 证书骨干certificate spine的精度事实源能力证书ADR-318从账本铸成ADR-318 明确能力证书是对账本某一片段的签名证明signed attestation over a slice of the ledger。其上的moving_recall/stationary_recall/false_presence_per_24h是从 ADR-304 账本按精确上下文切片而来非全局平均每条如实标注若账本对该上下文报 no evidence则不发证——缺失证据永不是能力见 docs/adr/ADR-318-capability-certificates.md。证书不能升级其铸造来源账本的级别ADR-304 诚实规则。真实基准服务ADR-317从账本读取真实精度源替代 PR 里的自报数字成为每次合并的精度闸门。见证链ADR-319与账本共用同一套只追加、签名、见证锚定的基础设施ADR-304 记录与 ADR-301/ADR-317/ADR-318 产物一起写入同一根链更正即新链/新记录与 ADR-304 追加式互为镜像。OOD 门控ADR-302把每次推理的DomainStateKNOWN/DEGRADED/UNKNOWN与四个输入一并写入证据记录校准证书ADR-301的版本与年龄随每条记录累积——这使账本 校准年龄能回答这个能力现在还算数吗。用 ADR-304 Consequences 的话说RuView 从此对一个问题是单一可审计答案——这个模型在这里、在这台设备、对这个主体到底工作得多好校准有多新鲜——这正是 OEM/集成商尽职调查真正要的产物。十一、取舍与代价诚实的另一面ADR-304 同样记录了这一设计的代价与边界存储与密钥管理成本签名 只追加设计必然比覆写式仪表盘更重但通过按上下文保留策略限制规模并复用现有 RuField/见证基础设施而非新建存储稀疏或不讨喜的上下文有些上下文只会显示稀疏甚至难看的证据。把这些如实暴露正是目的——引擎绝不能拿全局平均去遮盖一个薄弱的上下文空上下文语义no evidence 与 0 精度严格区分下游必须把前者视为无能力避免把从未测过伪装成测出 0 分。若要进一步阅读本方案在项目中的上下文建议按依赖顺序查看程序框架 ADR-300 → 校准证书 ADR-301 → OOD 门控 ADR-302 → 真值同步Phase 2 上游ADR-303 → 能力证书 ADR-318 与见证链 ADR-319证据级别阶梯的权威定义见 ADR-282。小结一张会拒绝撒谎的账本证据引擎把三个看似平凡的设计决策——追加式、按上下文、provenance 定级——做成了类型级不变量更正只能是新记录聚合绝不跨上下文求平均摘要级别永远是切片内最小值空上下文报 no evidence 而非零分。对于以 WiFi 射频感知为核心的 RuView 而言这正是把论文里的模型精度转译为可交付、可审计、会过期、可辩护的部署事实所缺的那一层基础设施。【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价