用户问:“商品签收十天后发现质量问题,退货运费谁承担?”知识库确实有政策,但系统回答“超过七天都不能退”。可能是检索只找到无理由退货条款,也可能找到了质量问题条款,却在生成时漏掉例外。
RAG 评测必须把“资料是否存在”“资料是否被取回”“资料是否完整进入上下文”“回答是否正确使用资料”分开。否则每次失败都只能归因于模型不够聪明。
先确定什么算相关证据
虚构政策 v3 有三段:d1 说明质量问题经核实后可按质量售后处理;d2 说明普通无理由退货的期限;d3 说明已核实质量问题的退货运费由商家承担。回答当前问题需要 d1 与 d3。
若 Top-3 为 [d1,d2,d4],找回一份所需证据,Recall@3 为 1/2;三份返回资料只有一份相关,Precision@3 为 1/3。Hit Rate@3 在这个问题上为 1,因为至少命中一份。然而它并不说明证据已经齐全。对需要两份证据共同支持的任务,还应单独检查证据集合是否完整。
相关性标签有粒度。文档包含一条有用句子,不代表整份文档都应塞进上下文;不同片段重复同一条款,也不应该让召回率无限增长。应明确按文档、片段还是证据单元评测,并固定去重规则。
排序指标为什么与召回不同
两个检索器都找到了 d1、d3,一个排在第一、第二,另一个排在第九、第十。若后续只装入前两段,实际效果显然不同。MRR 取第一条相关结果排名的倒数,再跨问题平均;第一个相关结果在第 2 位,单题贡献就是 1/2。它强调尽早找到首条相关信息,不衡量后续证据是否齐备。
nDCG 允许相关程度分级。设第 i 位相关等级为 r_i,采用增益 2^r_i-1,折扣为 log2(i+1),把各位置的增益除以折扣再求和得到 DCG。再除以理想排序的 DCG,得到 nDCG。实际排序等级 [0,2,1] 的 DCG 约为 0 + 3/1.585 + 1/2 = 2.393;理想 [2,1,0] 约为 3 + 1/1.585 = 3.631,nDCG 约为 0.659。
这个数字依赖分级标准和候选池完整性。某段资料没有被标注,不一定代表不相关。没有完整金标时应说明标注池范围,通过人工评审补充未知相关片段,而不是把未标注一律当负例。
from math import log2
# relevance 把证据 ID 映射到人工确认的相关等级。
relevance = {"d1": 2, "d2": 0, "d3": 1}
ranking = ["d2", "d1", "d3"]
def dcg(grades):
# 位置从 1 开始,所以分母为 log2(position + 1)。
return sum((2 ** grade - 1) / log2(pos + 1)
for pos, grade in enumerate(grades, start=1))
actual = dcg([relevance[item] for item in ranking])
ideal = dcg(sorted(relevance.values(), reverse=True))
print(round(actual / ideal, 3)) # 0.659
当没有任何相关证据时,Recall 和 nDCG 的分母可能为零。不要替它编一个满分,应把无答案案例单列,评测是否正确拒答或继续澄清。
找到了不代表模型看到了
检索返回 d1 和 d3,但上下文组装超过 Token 预算时把 d1 裁掉,生成器只看到“商家承担运费”。此时 Retriever 的召回率可以很好,模型却缺少“核实质量问题”的条件。
因此要保存实际检索列表和最终发送给模型的上下文。切分丢条件、重排降权、去重误删、预算截断发生在不同位置。评测不能拿检索器的原始输出假装它就是模型输入。
回答的四种好坏
忠实性检查答案中的事实是否被给定证据支持;正确性检查答案是否符合任务事实和适用政策。模型忠实复述过期规则,忠实性可能很高,正确性仍然失败。反过来,模型凭记忆碰巧答对,也不说明当前引用有效。
完整性检查用户需要的关键事实是否覆盖。只说“商家承担”遗漏核实条件,应被判为不完整或错误承诺。引用正确性检查所指段落是否真正支持相邻断言;引用 ID 存在只是结构检查,不能证明语义支持。
把回答拆成事实时还要保留逻辑关系。“已核实质量问题,运费由商家承担”不能机械拆成两个无条件句子。事实数量越多,简单比例越容易受到切分方式影响;应保存拆分结果供复核。
怎样定位改进来自哪一层
固定正确证据给生成器,检查它能否答对;固定查询与金标,单独评检索器;最后恢复完整链路。如果正确证据下仍错误,优先看生成提示、条件理解和答复结构。如果只有完整链路错误,再检查检索和上下文装配。
多跳任务还要记录每次查询新增了什么证据、何时停止。每跳都有相关材料,不代表整条链最终支持结论。Agent 因循环检索而超预算,也应进入任务失败和成本统计。
权限与时效必须进入样本元数据:另一个租户的完美答案不是合法证据;已经废止的政策也不能凭高相似度胜出。分别报告授权后候选池的检索质量和越权暴露,不能靠平均相关性抵消权限问题。
最终把 Recall、条件完整性、引用支持、无答案拒答、延迟和成本一起看。扩大 k 常常提高召回,也增加噪声和上下文成本。评测要帮助选择适合任务的取舍。
继续阅读与配套材料
上一篇:怎样评测 Prompt 和模型回答:从格式检查到语义正确。
下一篇:怎样评测 Tool Calling:从选对工具到执行正确。
完整示例、运行方式和验证边界见评测实验指南下载。本系列的订单、政策、金额和实验数据均为教学示例。