Skip to content

Latest commit

 

History

History
102 lines (67 loc) · 4.24 KB

File metadata and controls

102 lines (67 loc) · 4.24 KB

评估与失败模式

RAG 很难评估,不是因为缺工具,而是因为错误可以发生在不同层,却表现为同一个「答案不对」。

只看最终准确率,你会把索引问题当成提示词问题,把路由问题当成模型问题,把拒答缺失当成幻觉。RAGMap 要求把失败拆开。

先拆系统,再拆分数

一条路径至少有四级:

索引质量 → 召回质量 → 生成对证据的使用 → 路由是否选对路径

每一级都该有自己的观察。RAGAS 把生成侧拆成上下文相关性、忠实度、答案相关性,是这个方向上被用得最广的分解。它不是唯一标准,但它强迫你停止只用一个分数管理整个系统。

索引

  • 金证据所在的对象是否存在(有没有被切丢、抽丢)?
  • 更新后,旧对象是否还指向正确版本?

召回

  • 金证据是否进入候选?
  • 进入了第几名?会不会被重排挤出窗口?

生成

  • 答案能否被证据支持(忠实)?
  • 证据不足时是否拒答?
  • 是否回答了问题本身(而不是复述一段相关百科)?

路由

  • 这条查询该走哪条路径?
  • 实际走了哪条?
  • 费用和延迟是否符合约束?

没有这四级日志,ablation 是假的。

任务决定基准,基准反过来塑造方法

用错基准,会选出漂亮但无用的赢家。

你真正关心的问题 更接近的评测 不该当成主基准的东西
局部事实 / 手册 带引用的文档 QA,自建金证据 纯多跳榜
多跳事实 HotpotQA, 2Wiki, MuSiQue 主题综括题
全局主题 GraphRAG 一类 QFS / LLM-as-judge EM/F1 短答案
长叙事状态 长上下文叙事基准(ComoRAG 所用一类) 单跳百科
混合入口 自建路由集 + 费用 单一数据集 SOTA

论文在某一基准上的胜利,只说明它在那个任务分布上成立。把它迁到你的流量之前,先看你的流量更像表里的哪一行。

一种失败分类

下面的分类适合写进标注规范。比「幻觉」有用。

  1. 切块失败:证据存在,但不构成可检索对象。
  2. 表示失败:对象在,问法与写法错位,近邻找不到。
  3. 结构失败:需要边或社区,系统只给了段落。
  4. 动态失败:需要中间变量,系统只检索了一次。
  5. 状态失败:需要改写旧理解,多轮检索互不相认。
  6. 忠实失败:证据对,生成仍添加了证据外事实。
  7. 过度生成:证据不够,系统不拒答。
  8. 路由失败:能力存在,但走错了路径或付错了费用。
  9. 抽取失败:图上的边是错的,后续遍历在传播错误。

每一类对应不同的修复。把它们混成「再换一个模型」是最贵的懒。

评估路由器时的特殊陷阱

  • 用最终准确率代替路径准确率。 路由器选错路,下游碰巧答对,会掩盖控制错误。
  • 在单一复杂度的数据集上训练分类器。 它会学到数据集偏置,而不是问题结构。
  • 不计入费用。 永远走 agentic 的系统可以在复杂集上更好看,同时在真实流量上不可用。
  • 没有 gold path。 至少要有「不该走 agent」的负例。

人工与 LLM-as-judge

短答案 EM/F1 对事实题仍然有用。综括题、解释题、全局主题题往往没有唯一金答案。GraphRAG 用 LLM-as-judge 比较全面性和多样性,是在承认任务形态变了。

使用 LLM-as-judge 时写明:

  • 比较的标准是什么(忠实、覆盖、多样、简洁);
  • 法官模型与被评模型是否隔离;
  • 是否用交换顺序缓解位置偏差。

不要用「GPT 觉得更好」代替标准。

最小评估清单

如果你只能做五件事:

  1. 从真实失败里标 50 个查询,写下错误类型。
  2. 为每个查询标金证据,不只标金答案。
  3. 分开报召回、忠实、端到端。
  4. 若有多条路径,报路径分布和 P95 延迟。
  5. 每次改索引或改路由,先跑这 50 个,再看大盘。

这 50 个案例会比又一份框架默认评测集更接近你的系统。

评估是为了让地图可证伪。下一篇把论文放回枝条,避免文献变成另一份不可证伪的收藏。