← [ BACK_TO_NOTES ]

AI 输出质量评估框架

AI 应用的分层离线评估框架:从 Knowledge Coverage、Retriever、Reranker 到 Faithfulness、Relevance、Citation 与 Safety,用 Golden Dataset 和 Failure Attribution 定位到底是哪一层发生退化。

#synthesis #growing #ai

[!info] related notes

AI 输出质量评估框架

本篇维护分层指标与诊断顺序;评测数据集、版本与发布流程见 agent-evaluation-engineering。BodySense 数字和病例用于说明方法,不是已部署系统的实测报告。

一句话理解

不要只问:

“最终答案对不对?”

而要问:

“正确知识是否存在、Retriever 是否找到了、Reranker 是否保留了、Evidence 是否真的交给模型、模型是否忠实使用、Citation 是否指对、最终答案是否相关且安全?”

这就是分层 Eval。

它的最大价值不是多算几个指标,而是让错误可以被归因到具体层,而不是所有失败最后都变成一句:

LLM 效果不好

为什么只评 Final Answer 不够

假设最终答案错误,可能发生的是完全不同的故障:

A. Knowledge Base 根本没有正确知识
B. Knowledge 有,但 Retriever 没召回
C. Retriever 召回了,但 Reranker 排掉了
D. 正确 Evidence 已进入 Context,但模型没有忠实使用
E. Claim 本身有支持,但 Citation 指错来源
F. Answer 有依据,但根本没有回答用户的问题
G. 内容相关且有依据,但违反 Safety / Decision policy

如果只保留:

final_answer = wrong

就不知道应该修:

  • knowledge ingestion;
  • embedding;
  • hybrid retrieval;
  • reranker;
  • prompt/model;
  • grounding evaluator;
  • citation mapping;
  • safety policy。

因此 Production Eval 的核心是:

从第一处可观察的 Contract Failure 开始调查,再用输入、版本与对照实验验证原因。

第一处被发现的违约不一定是唯一根因;多层问题可能同时存在,日志缺失也可能影响定位。

RAG / Agent Eval 的完整层次

Knowledge Base
     │
     ▼
1. Knowledge Coverage
     │
     ▼
Retriever
     │
2. Recall@K / candidate recall
     │
     ▼
Reranker
     │
3. Precision@K / MRR / NDCG
     │
     ▼
Normalized / Admissible Evidence
     │
4. Evidence delivery / provenance
     │
     ▼
LLM / Agent
     │
5. Faithfulness / Grounding
     │
     ▼
Answer / Decision
  ┌──┼─────────────┐
  ▼  ▼             ▼
6. Relevance   7. Citation   8. Safety/Correctness

这些层可以关联,但不能混成一个平均分。

Layer 1:Knowledge Coverage

先问:

正确答案需要的知识,知识库里到底有没有?

如果 Golden Evidence 是 E42,但知识库根本不存在 E42 等价内容,那么 Retriever 不可能凭空召回。

这属于:

Knowledge coverage failure

而不是 embedding failure。

因此离线数据集最好明确:

query
required fact / claim
relevant evidence IDs
risk stratum

评测应固定语料快照和访问权限:库中存在但当前用户无权访问的内容不能算作必须召回。缺少人工相关性标注也不能直接证明知识不存在。

Layer 2:Retriever Eval —— 优先看 Recall

Retriever 的主要职责是 Candidate Generation:

尽量别漏掉真正有价值的 Evidence。

Recall@K

Recall@K
= Top-K 中召回的已标注相关 evidence 数
  / 当前评测范围内已标注相关 evidence 总数

例:

Golden Evidence = {E17, E42}
Top-5 = {E17, E08, E91, E32, E75}

那么:

Recall@5 = 1 / 2 = 0.5

空相关集需单独作为 no-result case 处理,不能除以零;相关标注不完整时,Recall 只代表相对该标注集的覆盖率。相同 evidence ID 去重后计数。

为什么常看多个 K

Recall@5
Recall@10
Recall@30

可以帮助判断:

正确 Evidence 完全找不到?
还是能找到,但排名太靠后?

如果 E42:

Top-30 rank = 7
Top-5 missing

若 Top-30 确实传入下一层,说明 E42 已被召回;还需比较精排、权限过滤与上下文裁剪记录,才能确定最终 Top-5 为什么没有它。单看两个 K 的结果不能直接归因精排。

Layer 3:Reranker Eval —— 排序质量

Retriever 常先追求高 Recall,多捞一些 Candidate;Reranker 再负责把真正相关内容排到前面。

Precision@K

Precision@K
= Top-K 中 relevant result 数 / K

它问:

“我最终放进模型上下文的东西,大部分真的有用吗?”

MRR

MRR(Mean Reciprocal Rank)关注:

第一个正确结果排得有多靠前。

例如:

Query A: first relevant rank = 1 → 1/1
Query B: first relevant rank = 2 → 1/2
Query C: first relevant rank = 5 → 1/5

再取平均,得到 (1 + 0.5 + 0.2) / 3 ≈ 0.567。没有相关结果时 reciprocal rank 记 0;采用 MRR@K 时,还需固定截断范围。

NDCG

当相关度不是简单的“相关/不相关”,而有:

非常相关
比较相关
略相关
无关

NDCG 更适合评价整个排序是否把高价值结果排在前面。

Retriever 与 Reranker 必须分开测

假设:

Retriever Recall@30 = 98%
Reranker Recall@5 = 60%

这说明最终小集合丢失了一部分已标注相关证据,但还不能断定精排错误:K 从 30 减少到 5 本就限制容量。应比较相同最终 K 的未精排 baseline、候选集可达到的上限和关键证据保留率,并检查中间过滤。

如果只看最终 Top-5,就可能错误地去换 embedding model。

Failure Attribution:一个最重要的例子

Golden Evidence:

E42

运行结果:

Knowledge Base: E42 存在 ✅
Retriever Top-30: E42 rank #7 ✅
Reranker Top-5: E42 被淘汰 ❌
Agent: 没看到 E42,最终回答错误

若合同要求保留 E42,且排除权限变化、去重和后续裁剪,当前可定位的违约是 Reranking failure。这不证明模型没有独立问题:没有足够依据仍作确定结论,也可能同时违反 grounding / abstention 规则。

这就是分层 Eval 的价值:不要把下游表现错误归罪给没有违约的上游组件。

Layer 4:Evidence Delivery / Provenance

即使 Retriever/Reranker 都正确,还要确认:

正确 Evidence 是否真的进入了当前 Agent run?

要区分:

retrieved globally
!= observed in this run
!= admissible in this run

例如模型引用:

E42

如果 E42 未以检索结果、获准快照、缓存或其他受控路径绑定并交付给当前 run,却被当作本轮证据引用,这属于:

invalid provenance / cross-run contamination

证据 ID、版本、权限与交付记录可做 deterministic 校验;跨 run 缓存复用本身不违规,前提是重新验证并绑定当前使用范围。正文是否支持 claim 则是另一层语义判断。

Layer 5:Faithfulness / Grounding

Faithfulness 最通俗的理解:

模型有没有“按资料说话”。

它问的不是“现实世界里这句话是否碰巧正确”,而是:

当前输出中的 material claim,是否能被本轮允许使用的 Evidence 支持?

例如 Evidence:

疼痛加重时应停止动作 A

模型输出:

疼痛加重时继续动作 A

则:

Retriever ✅
Reranker ✅
Evidence delivery ✅
Faithfulness ❌

这时候应该优先调查:

  • prompt grounding contract;
  • conflicting evidence;
  • context formatting;
  • model reasoning;
  • model capability;
  • grounding evaluator。

而不是继续调 embedding。

Faithfulness 与 Correctness 不相同

假设 Evidence 没有提到 B,但模型凭参数知识说了 B,而 B 恰好在现实世界中是真的。

那么可能:

Correctness = true
Faithfulness = false

当合同要求该 claim 必须由指定证据支持时,这个区别很重要,系统需验证:

这个结论来自当前 Evidence

而不是“模型刚好知道”。

详见 RAG Grounding / Faithfulness 校验。

Layer 6:Answer Relevance

即使回答全部有依据,也可能答非所问。

例如用户问:

“我现在应该先观察什么?”

模型回答一大段:

“梨状肌的解剖位置是……”

内容可能完全 faithful,但:

Relevance 低

所以:

faithful
!= relevant

Layer 7:Citation Correctness 与 Completeness

Citation Correctness

问:

[1] 真的支持紧邻的 Claim 吗?

Citation Completeness

问:

所有应该引用的重要 Claim 都有来源吗?

因此:

citation exists
!= citation correct
!= claim grounded

漂亮的 Citation UI 只是透明度能力,不是 correctness proof。

Layer 8:Safety / Business Correctness

一个输出可以:

fully grounded ✅

但仍然因为当前用户状态或 red flag:

Safety blocked

因此:

Faithfulness
!= Safety
!= DecisionAuthority

这在 BodySense Diagnosis/Treatment 特别重要。

Golden Dataset 应该保存什么

最简单可以从:

from dataclasses import dataclass

@dataclass
class GoldenCase:
    query: str
    relevant_doc_ids: list[str]
    expected_answer: str | None = None
    expected_intent: str | None = None
    risk_stratum: str = "normal"
    critical_evidence_ids: list[str] | None = None

开始。

更成熟后可以增加:

  • required facts / claims;
  • expected evidence type;
  • forbidden / contradicted claims;
  • source/admissibility requirements;
  • expected decision outcome;
  • expected citation mapping。

数据来源

来源优点缺点
人工标注可引入领域判断成本高,仍需准则与一致性复核
历史真实对话真实分布需要脱敏/审核
LLM 辅助生成扩量快必须人工校验
Knowledge Unit 反向构造覆盖知识库Query 可能不自然

Risk-stratified Eval:不要只看平均数

BodySense 不能把所有 RAG query 混在一起算一个:

Recall@5 = 95%

因为可能实际是:

exercise recall = 99%
red-flag / contraindication recall = 70%

平均很好,但安全上不可接受。

因此 dataset 应分 slice:

definition
cause
self-check
exercise
contraindication
red flag
escalation knowledge

并对高风险 Evidence 使用更严格的 hard gate,例如:

critical evidence recall

具体阈值由 benchmark 与业务风险决定,原则是:

不同 Evidence 的漏召回成本不同。

组件升级时应该控制变量

换 Embedding Model

优先比较:

Recall@K
MRR / candidate ranking
latency
cost
critical evidence recall

不要只看最终 Diagnosis Accuracy,因为中间还有 Reranker、Prompt、Model 等变量。

换 Reranker

冻结 Retriever candidate set,比较:

Recall@final K
Precision@K
MRR / NDCG
critical evidence retention

换 Prompt / Model

冻结 Evidence set,比较:

Faithfulness
Answer relevance
Decision correctness
Safety behavior

这是组件对照评测。还需固定语料、权限、配置和 evaluator,考虑模型随机性;组件效果明确后再跑端到端回归,检查组件间交互。

离线 Eval 与运行时 Guardrail 的关系

维度离线 Eval运行时 Guardrail
时机上线前 / 变更后每次生产请求
目的发现系统性退化拦住单次危险/不合格输出
输入Golden Dataset当前 Run
结果指标 + failure slices单次 verdict / reason code
典型例子Recall@K, MRR, Faithfulness rateinvalid provenance, unsupported claim

二者互补:

Offline Eval
→ 在指定数据集与门槛下提供上线资格证据,不证明所有请求都安全

Runtime Guardrail
→ 尝试拦截当前可检测的违约;判定与执行边界仍可能失败

一个最小 Eval Pipeline

for each GoldenCase:
    1. verify knowledge coverage
    2. run retriever → record candidate ranks
    3. run reranker → record final ranks
    4. record actual evidence delivered
    5. generate answer / decision
    6. evaluate faithfulness
    7. evaluate relevance / citation / safety
    8. store observed failure layers + reason codes + evidence gaps

最终报告不应该只给平均数,而应该同时有:

aggregate metrics
+
risk slices
+
failed cases
+
observed failures / attribution confidence
+
configuration identity

常见错误

“Final Answer 错了,所以换更强 LLM”

错误。先检查 Knowledge → Retriever → Reranker → Evidence Delivery → Faithfulness 的第一处违约。

“Retriever Top-30 找到了,但 Top-5 没有,所以 Embedding 差”

不一定。如果 Candidate 已经召回,优先查 Reranker。

“Faithfulness 高,所以 Answer 一定好”

错。它可能完全忠实地回答了一个与用户问题无关的内容。

“Citation 存在,所以 Grounded”

错。Citation 可能指错,也可能来源根本不支持 claim。

“平均 Recall 很高,所以可以上线”

错。必须看 critical/risk strata。

“运行时 checker 可以代替离线 eval”

错。一个负责系统性 qualification,一个负责单次 runtime guard。

自测题

  1. Knowledge Coverage failure 与 Retriever failure 如何区分?
  2. E42 在 Retriever Top-30 排第 7,但被 Reranker Top-5 淘汰,应该归因哪一层?
  3. Retriever 为什么通常更偏 Recall,Reranker 为什么更偏 Precision/Ranking?
  4. MRR 主要回答什么问题?
  5. E42 已经进入 Agent Context,但 Agent 给出与它明确矛盾的 Claim,应优先看哪一层?
  6. Faithfulness 与 Correctness 有什么区别?
  7. Citation Correctness 与 Citation Completeness 有什么区别?
  8. 为什么不能只看整个 Dataset 的平均 Recall?
  9. 换 Embedding、换 Reranker、换 Prompt 时为什么应该评不同指标?
  10. Offline Eval 与 Runtime Guardrail 各自解决什么?

最终心智

Knowledge exists?
→ Retriever found it?
→ Reranker kept it?
→ Runtime actually delivered it?
→ Evidence admissible?
→ Model followed it faithfully?
→ Answer relevant?
→ Citation correct?
→ Safety / Authority allows it?

生产级 Eval 的核心不是“分数越多越专业”,而是:每个指标对应一个明确组件职责,从可观察的违约定位调查范围,并明确证据不足与多因素归因的边界。

创建于 2026/6/26 更新于 2026/10/6
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
关闭浮层 / 取消命令;输入框内清空文本