← [ BACK_TO_NOTES ]

Normalized Evidence Boundary

把不同 Retrieval Backend 的 SearchResult 转换成统一 Evidence Contract 的标准化边界,使 Agent/Governance 与 pgvector、PubMed、PDF 等检索实现解耦;标准化只统一形状,不等于 Evidence 已经可信或可采纳。

#concept #growing #ai #architecture #agent #bodysense

[!info] related notes

Normalized Evidence Boundary

一句话定义

Normalized Evidence Boundary 是 Retrieval Infrastructure 与 Agent / Governance 之间的一层标准化契约:

不同检索后端的原始结果
→ normalize
→ 统一 Evidence Contract
→ Agent / Policy / Eval

它解决的核心问题是:

上层业务应该依赖“证据是什么”,而不是依赖“某个搜索后端碰巧怎么返回数据”。

最通俗的理解

BodySense 今天可能从 KnowledgeLibrary.search() 得到:

SearchResult
├─ id
├─ title
├─ body_markdown
├─ similarity
├─ source_title
└─ clips

以后又可能接入 PubMed:

PubMedResult
├─ pmid
├─ abstract
├─ journal
└─ publication_date

再以后可能接入 PDF:

PdfChunk
├─ document_id
├─ page
├─ chunk_id
└─ text

如果 Diagnosis/Treatment 直接依赖这些结构,就会变成:

if source == "knowledge_library": ...
elif source == "pubmed": ...
elif source == "pdf": ...

检索层每加一个后端,上层业务都要跟着修改。

Normalized Evidence Boundary 则把它们统一成:

Evidence
├─ evidence_id
├─ source_type
├─ source_key
├─ source_revision
├─ locator
├─ excerpt / snapshot
├─ retrieval metadata
└─ policy metadata

于是上层只消费一个稳定 Evidence 语言。

SearchResult 与 Normalized Evidence 的职责不同

SearchResult

属于 Retrieval Backend / Infrastructure。

它回答:

“这次搜索后端返回了什么?”

字段通常围绕搜索实现:

  • vector similarity;
  • raw chunk;
  • database row ID;
  • backend-specific metadata;
  • clip/title/body;
  • ranking score。

换 pgvector、BM25、cross-encoder 或外部 API 后,这个结构完全可以变化。

Normalized Evidence

属于 Agent / Business Boundary。

它回答:

“上层系统现在观察到的是哪一条可追踪的证据候选?”

它更关心:

  • 稳定 identity;
  • 来源类型;
  • 具体来源 key;
  • 版本/revision;
  • 当时观察到的内容;
  • 为哪个 Gap 获取;
  • provenance;
  • policy-relevant metadata。

所以:

SearchResult
= retrieval implementation language

Evidence
= business / governance language

这本质上是 Adapter / Dependency Inversion

依赖方向应该是:

Agent / Governance
        │
        ▼
Evidence Contract
        ▲
        │ adapters
 ┌──────┼─────────┐
 ▼      ▼         ▼
pgvector PubMed   PDF

而不是:

Agent
├─ knows pgvector SearchResult
├─ knows PubMedResult
└─ knows PdfChunk

因此未来从:

vector-only retrieval

切换到:

BM25 + vector + reranker

主要修改 Retrieval Adapter / normalization,而不是重写 Diagnosis/Treatment 的业务逻辑。

Normalization 不等于“证据已经正确”

这是最重要的边界。

SearchResult
→ normalize
→ Evidence candidate

只说明:

数据已经被转换成统一格式。

不说明:

内容一定正确 ❌
来源一定可靠 ❌
当前版本允许使用 ❌
一定适用于当前用户 ❌
一定解决 EvidenceGap ❌

后面仍然需要:

Normalized Evidence
→ Provenance validation
→ Admissibility
→ Semantic support / Grounding
→ DecisionAuthority

所以一定记住:

normalized
!= admissible
!= sufficient
!= true

Identity、Locator、Revision、Snapshot 要分开

生产 Evidence 不应该只剩一个数据库 ID。

Source Identity

source_key = knowledge-unit:123

回答:

“是哪一个来源对象?”

Locator

例如:

page 57
video 03:14–05:28
chunk 8

回答:

“来源里的哪个位置?”

Revision / Version

revision = 7

回答:

“这个来源当时是哪一个版本?”

Snapshot / Hash

excerpt = 当时真正看到的内容
content_hash = ...

回答:

“当时系统到底看到了什么?”

因此:

locator
!= revision
!= snapshot

尤其不能拿“视频时间戳没变”去证明“知识内容版本没变”。

一个 BodySense 例子

KnowledgeLibrary 返回:

SearchResult
id = 123
title = 梨状肌相关表现
similarity = 0.88
body_markdown = ...
source_timestamp = 03:14–05:28
review_status = reviewed

Normalization 后可以形成:

Evidence
evidence_id = stable derived identity
source_type = knowledge_unit
source_key = knowledge-unit:123
source_revision = 7
locator = video:03:14–05:28
excerpt = ...当时观察内容...
retrieval_score = 0.88

上层 Agent 不需要知道底层 SQL 是:

pgvector cosine

还是未来变成:

BM25 + dense + cross encoder

它只认识 Evidence Contract。

为什么 Stable Evidence Identity 对 Replay 很重要

假设:

2026-08-23
unit #123 revision 7 = 内容 X

2026-10-01
unit #123 revision 8 = 内容 Y

如果历史 Analysis 只保存:

source_key = 123

未来重新查数据库可能拿到 Y,然后误以为当时模型看到的也是 Y。

所以 Evidence identity / provenance 应至少能 pin:

source identity
+
revision/version
+
必要 snapshot/hash

这样 Historical Replay 才不会被今天的知识偷偷改写。

Normalized Evidence 与 Citation 也不同

Evidence Contract 是系统内部的受治理事实载体。

Citation 更偏 UI / 用户解释:

标题
作者
URL
页码/时间戳

一个 Evidence 可以生成 Citation,但:

Evidence
!= Citation

因为 Evidence 还需要承载:

  • stable identity;
  • version;
  • provenance;
  • acquisition context;
  • policy metadata。

常见误区

“normalize_evidence() 就是验证 Evidence 正确”

错。Normalization 只做 contract mapping;验证可信度属于 provenance/admissibility/grounding。

“数据库 row ID 就是 Evidence ID”

不一定。Evidence 关注的是参与决策的来源与版本,不只是当前数据库中的一行。

“有统一 Pydantic Model 就已经解耦”

只有当上层不再依赖 backend-specific 字段/行为时,才真正实现解耦。

“Similarity 应该成为 Evidence 的核心真值”

Similarity 是 retrieval metadata,只说明“检索器认为相关”;它不等于 support 或 truth。

自测题

  1. SearchResult 与 Normalized Evidence 分别属于哪一层?
  2. 为什么接入 PubMed/PDF 时不应该让 Diagnosis 增加一堆 if source == ...?
  3. Normalization 为什么不等于 Admissibility?
  4. source locator 与 source revision 有什么区别?
  5. 为什么 Historical Replay 最好 pin revision/snapshot?
  6. Embedding similarity 为什么只是 retrieval metadata,而不是 Evidence truth?

最终心智

Retriever-specific result
→ Adapter / Normalization
→ Stable Evidence Contract
→ Provenance
→ Admissibility
→ Grounding
→ Decision

Normalized Evidence Boundary 的价值,本质上就是:底层 Retrieval 可以演进,上层 Agent/Governance 仍然只依赖一个稳定、可追踪的 Evidence 语言。

创建于 2026/8/23 更新于 2026/8/23
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本