Skip to content
Guides1 min read

如何用人工标注评估 RAG 系统

评估检索增强生成的实用指南:分别衡量检索相关性和回答忠实度,并在 Potato 中用片段标注标出缺乏依据的论断。

Potato Team

检索增强生成系统可能以两种完全不同的方式失败,而单一的质量分数会掩盖你正在面对的到底是哪一种:要么是检索器拉取了错误的文档,要么是生成器拿到了好文档却置之不理。如果你只衡量"回答好不好",就无法区分这两者,也就无法判断该修复系统的哪一半。

解决办法是分别评估检索和生成,并精确标出回答在哪里偏离了它的来源。

值得标注的三件事

  1. **检索相关性。**对于每一份检索到的文档,它是否真的与查询相关?
  2. **回答忠实度。**生成的回答是否扎根于这些文档,没有凭空捏造的论断?
  3. **引用准确性。**回答中的论断能否追溯回它所引用的来源?

把这三者分开,就能把含糊的"回答错了"变成"检索到的文档是对的,但模型添加了一个文档中没有的论断"。这是一个生成问题,它指向的修复方向与检索失败截然不同。

在 Potato 中进行配置

你可以把这三项都放在同一个界面上。用 multirate 在同一个量表上为每份检索到的文档打分,用李克特量表评估忠实度,并在回答中高亮出有问题的片段。

yaml
annotation_schemes:
  - annotation_type: multirate
    name: retrieval_relevance
    description: "Rate the relevance of each retrieved document to the query."
    labels: ["Irrelevant", "Somewhat", "Relevant", "Highly relevant"]
 
  - annotation_type: likert
    name: faithfulness
    description: "Is the answer faithful to the retrieved documents?"
    size: 5
    min_label: "Many unsupported claims"
    max_label: "Fully grounded"
 
  - annotation_type: span
    name: problems
    description: "Highlight any unsupported or incorrect claim in the answer."
    labels: [unsupported_claim, contradicted, hallucination]

正是片段标注让数据变得可付诸行动。5 分中得 2 分的忠实度评分告诉你某处出了问题;而高亮出的片段则告诉你是哪一句、又错在哪里。

那些悄悄毁掉 RAG 评估的细节

**没有来源,标注者无法判断忠实度。**把查询、检索到的文档和回答放在同一个界面上。如果文档被折叠起来或放在另一个标签页里,人们就会根据回答听起来是否正确来打分,而这恰恰是你想要捕捉的失败模式。

**"相关"需要一个定义。**是与查询相关,还是确实被用在了回答里?这是两种不同的判断,如果你不事先确定,标注者就会各执一词。

**忠实度才是那个主观的部分。**在一部分样本上收集重叠标注,并专门检查忠实度评分的一致性。如果那里一致性偏低,就先收紧"缺乏依据"的定义,再去信任这些数字。

接下来去哪里

完整的演练,包括这三个标注方案如何相互配合,可参见 RAG 评估指南。若要在任意模型输出(而不仅是 RAG)中标记事实错误和幻觉,请参见用片段标注检测幻觉。如果你想更广泛地评估智能体,可以从如何评估 AI 智能体开始。